/*调用窗体的PreTranslateMessage函数 ,处理键盘键入事件 ;
曾经尝试写到OnMessage函数中,发现无法实现检测键盘输入的功能;
这里的GetFocus()函数是获得当前焦点所在的控件*/
BOOL CLocalSetDlgChild::PreTranslateMessage(MSG* pMsg)
{
/* 如果是回车键,则改变刚刚键入的回车键的值,使他变为空值 */
if (pMsg->wParam == '\r' || pMsg->wParam == 013)
{
pMsg->wParam = NULL;
fflush(stdin);
}
if (WM_KEYFIRST <= pMsg->message && pMsg->message <= WM_KEYLAST) /* 判断是键盘消息 */
{
switch (pMsg->message)
{
case WM_CHAR:/*这里的WM_CHAR,若換成WM_KEYDOWN,則無法輸入小數點*/
if (GetFocus() == GetDlgItem(IDC_EDIT_FRONT_BACK_IP))
{
char ch = (char)pMsg->wParam; /* pMsg->wParam获得用户刚刚键入的单个
字符 */
if (ch == '.' || (ch <= '9' && ch >= '0') || ch == '\b' ) /* '\b' 表示回退键字
符常量,经测试,也可以用VK_BACK代替,0x2E表示小数点 */
{
; /*什么也不做,让程序正常通过,表示接受字符的输入;
通过这个if分支,实现了只能通过字符、小数点、回车键的功能;*/
}
else
{
pMsg->wParam = NULL; /*此句功能是改变刚刚键入的单个字符的值,即让已经存入到缓
冲区的非法值置为空,
将来这个空值会输入到编辑框中,在编辑框中变现出来的现象是并没有字符输入*/
fflush(stdin);
}
}
break;
}
}
return CDialog::PreTranslateMessage(pMsg);
}