15,979
社区成员
发帖
与我相关
我的任务
分享
if( (GetFocus()==GetDlgItem(IDC_EDIT)) &&
m_ctrlHexSend.GetCheck() &&
(pMsg->message==WM_CHAR)
)
{
switch (pMsg->wParam) {
case 0x08:
//backsapce,必须
break;
case 0x0A:
//linefeed(ctrl+Enter),必须
break;
case 0x1B:
//escape,由于先执行退出,实际不会到这里
break;
case 0x09:
//tab,由于先执行焦点转移, 实际不会到这里
break;
case 0x0D:
//carriage return(Enter),必须
break;
default://Process displayable characters
if( pMsg->wParam<'0' || (pMsg->wParam>'9'&&pMsg->wParam<'A') || (pMsg->wParam>'F'&&pMsg->wParam<'a') || pMsg->wParam>'f' )
{
AfxMessageBox("请输入十六进制数!");
return true;
}
break;
}
}
BOOL CXXX:PreTranslateMessage(MSG* pMsg)
{
if(GetDlgItem(IDC_EDIT)->GetSafeHwnd() == pMsg->hwnd && WM_KEYDOWN == pMsg->message)
{
if((pMsg->wParam >= '0' && pMsg->wParam <= '9') || (pMsg->wParam >= 'a' && pMsg->wParam <= 'f') || (pMsg->wParam >= 'A' && pMsg->wParam <= 'Z'))
{
...
return TRUE;
}
}
return CXXX:PreTranslateMessage(pMsg);
}