MFC编程中有时需要限制字符输入的类型,长度等。还可以设置不同颜色来提示。
1.首先需要自建一个新的类,插入--类--然后自己新建一个类,可以取名为CNewEdit,基类为CEdit。
2.在类视图里找到CNewEdit,然后为它添加WM_CHAR事件。添加如下代码
if((nChar>=0x30&&nChar<=0x39)||nChar==0X08)
{
CEdit::OnChar(nChar, nRepCnt, nFlags);
}
这样就限制新的类只能输入数字和回车了,也可以设置成16进制等等。
将新类的头文件添加到Dlg的cpp文件中。
3.为控件添加控制变量
打开类视图,找到添加的编辑框ID,然后为它添加变量如m_MyEdit,变量类型选择新建的类CNewEdit,2005以上版本需要自己手动输入,下拉框中没有,然后策略那里选择控制变量。这样重新编译后编辑框就只能输入数字了。
4.限制输入长度
在初始化函数中添加如下代码
m_MyEdit.LimitText(10);
这样编辑框就只能输入10个字符了
5.输入的字符颜色
为dlg添加OnCtlColor事件
HBRUSH CMy_PCSCDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
// TODO: Change any attributes of the DC here
// TODO: Return a different brush if the default is not desired
return hbr;
}
然后在里面添加代码
if((pWnd->GetDlgCtrlID() == IDC_EDIT_UART))
{
pDC->SetTextColor(RGB(255,0,0));
}
这样输入的字符就是红色了。
也可以用标志位来实现颜色变换
switch(Result_Color)
{
case BLACK:
if(pWnd->GetDlgCtrlID() == IDC_STATIC_RESULT)
{
pDC->SetTextColor(RGB(0,0,0));
pDC->SelectObject(&m_font);
}
break;
case GREEN:
if(pWnd->GetDlgCtrlID() == IDC_STATIC_RESULT)
{
pDC->SetTextColor(RGB(0,255,0));
pDC->SelectObject(&m_font);
}
break;
case RED:
if(pWnd->GetDlgCtrlID() == IDC_STATIC_RESULT)
{
pDC->SetTextColor(RGB(255,0,0));
pDC->SelectObject(&m_font);
}
break;
default:
break;
}
这样在程序中更改Result_Color的值后再写入新的数据就会是新的颜色了。