基本用法
常用属性
1.Readonly --- 只读,用户不可输入但可以通过代码SetWindowText设置内容
2.Number --- 只能输入数字
3.Password --- 输入以密码符号显示
4.Multiline --- 支持多行
5.Want Return --- 接受Enter键换行
全部Edit Style为Edit Control Styles
注意:有些风格是可以通过SetWindowLong更改的,有些则不可以,可以修改的都有标出。
以下代码展示通过SetWindowLong修改CEdit风格,增加ES_NUMBER:
DWORD dwStyle = ::GetWindowLong(m_edit.GetSafeHwnd(), GWL_STYLE);
dwStyle |= ES_NUMBER;
::SetWindowLong(m_edit.GetSafeHwnd(), GWL_STYLE, dwStyle);
获取与设置内容
GetWindowText
SetWindowText
当Multiline为True时,要想通过SetWindowText实现换行,需加字符串"\r\n".
与数值变量绑定
通过Class Wizard操作如下图所示
通过手工添加代码如下
void CTestEditDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Text(pDX, IDC_EDIT1, m_nEdit);
DDV_MinMaxFloat(pDX, m_nEdit, 0, 100);
}
使用关联的数值变量
使用前请使用UpdateData:
UpdateData(TRUE) ---- data is being retrieved
UpdateData(FALSE) ---- dialog box is being initialized使用示例如下:
// UpdateData(TRUE)返回FALSE时,会弹出对话框提示出错,UpdateData函数自带的
if (FALSE == UpdateData(TRUE))
{
return; //标明更新数据有错,可能是超过设定的大小范围或含有字母等非Number字符导致错误
}
CString cstr;
cstr.Format(TEXT("%d"), m_nEdit)
AfxMessageBox(cstr);
动态创建CEdit控件
代码如下:
CEdit *pMyEdit = NULL;
pMyEdit = new CEdit();
// 创建
// WS_EX_CLIENTEDGE --- 3D边框,否则是黑色边框和对话框上静态创建的CEdit不一致
pMyEdit->CreateEx(
WS_EX_CLIENTEDGE,
TEXT("EDIT"),
TEXT(""),
WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_BORDER | ES_LEFT | ES_MULTILINE | ES_AUTOHSCROLL,
10,10,100,100,
this->GetSafeHwnd(),
NULL);
//设置和对话框一样的字体
pMyEdit->SetFont(this->GetFont());
很多人会问:为什么不用pMyEdit->Create创建而用CreateEx
在创建完后再通过SetWindowLong增加WS_EX_CLIENTEDGE风格
这是不可取的,因为该风格在窗口创建完后不可修改
pMyEdit = new CEdit();
pMyEdit->Create(
WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_BORDER | ES_LEFT | ES_AUTOHSCROLL | ES_MULTILINE,
CRect(0, 0, 100, 20),
this,
1000);
// 试图在创建完后增加WS_EX_CLIENTEDGE风格
// 失败,因为该Style在控件创建完后不可更改
DWORD dwExStyle = ::GetWindowLong(pMyEdit->GetSafeHwnd(), GWL_EXSTYLE);
dwExStyle |= WS_EX_CLIENTEDGE;
::SetWindowLong(pMyEdit->GetSafeHwnd(), GWL_EXSTYLE, dwExStyle);
pMyEdit->ModifyStyleEx(0, WS_EX_CLIENTEDGE);
// 设置和对话框一样的字体
pMyEdit->SetFont(this->GetFont());