网上说的大部分方法是重载CEdit,重写OnChar函数,在历遍进行数据判断,如果只实现这一个功能完全不必重载CEdit,只需重写PreTranslateMessage函数即可,函数添加方法,选中对话框类,右键属性在重载的函数中找。实现方法如下:
BOOL CWindowsRouterDlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
if(pMsg->message==WM_CHAR)
{
//检查控件是否是当前焦点
if(GetDlgItem(IDC_EDIT6)==GetFocus()||
GetDlgItem(IDC_EDIT7)==GetFocus())
{
//检查Ctrl组合键
short nks = GetKeyState(VK_CONTROL);
if (nks & 0x8000)
{
return CDialog::PreTranslateMessage(pMsg);
}
//检查输入的内容
if ((pMsg->wParam >= 0x30 && pMsg->wParam <= 0x39) ||
(pMsg->wParam >= 'a' && pMsg->wParam <= 'f') ||
(pMsg->wParam >= 'A' && pMsg->wParam <= 'F') ||
(pMsg->wParam == 0x08) ||
(pMsg->wParam == 0x20))
{
return CDialog::PreTranslateMessage(pMsg);
}
else
{
MessageBeep(-1);
pMsg->wParam=NULL;
}
}
}
return CDialog::PreTranslateMessage(pMsg);
}