不知道大家用过SSCOM32这个串口调试工具。
当选择16进制的时候会捕获键盘键盘的输入,如果输入值非0~9或a~f或A~F就会提示。
我的方法是重载PreTranslateMessage函数,加入判断语句
if(pMsg->message==WM_KEYDOWN)
{
if( pMsg->wParam<'0' || (pMsg->wParam>'9'&&pMsg->wParam<'A') || (pMsg->wParam>'F'&&pMsg->wParam<'a') || pMsg->wParam>'f' )
……
}
可是出现两个问题:
1。按下任何一个键盘都会进行判断,可是我只想捕获能输入编辑框的值进行判断。
2。小键盘输入的数字无法通过此判断语句。我知道我的方法是错误的,请问正确的方法是什么。
当选择16进制的时候会捕获键盘键盘的输入,如果输入值非0~9或a~f或A~F就会提示。
我的方法是重载PreTranslateMessage函数,加入判断语句
if(pMsg->message==WM_KEYDOWN)
{
if( pMsg->wParam<'0' || (pMsg->wParam>'9'&&pMsg->wParam<'A') || (pMsg->wParam>'F'&&pMsg->wParam<'a') || pMsg->wParam>'f' )
……
}
可是出现两个问题:
1。按下任何一个键盘都会进行判断,可是我只想捕获能输入编辑框的值进行判断。
2。小键盘输入的数字无法通过此判断语句。我知道我的方法是错误的,请问正确的方法是什么。
解决方案 »
- "VPad-Q71" 几个字符在 android img 文件中的排列顺序是怎么样?
- MFC中怎样对列表中的数据直接点击修改
- 如何在同一文件中添加数据
- 求命啊!!!!!VC/MFC中WINPCAP的使用!!!!!!!!
- QQ昵称的特殊字符为什么在Windows系统的文本文档中不能显示?
- java与vc++比较哪个功能更强?
- 向诸位请教:如何将在toolbar中的按钮上显示的图像,保证是24位位图
- 关于vc调用数据库存储过程,特急!
- mciWnd的问题
- 请问哪里有《COM原理与应用》可下载?谢谢!
- 获取网络驱动器路径
- 实在没辙了 快点来帮忙看看 关于CRichEditCtrl控件滚动条的动态实现和隐藏
switch(pMsg->wParam)
case VK_F1:
case VK_F2:
case VK_F3:
..........
bread;
................
类似的
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);
}
我的想法是,把这个PreTranslateMessage先写在app中,然后在对话框中也来接收PreTranslateMessage这个消息,然后通过判断如果焦点在编辑控件上,就处理PreTranslateMessage传来的按键。
小键盘没研究过,你在PreTranslateMessage函数入口处加断点,按小键盘,看看传来的消息是什么,添加进去就可以了。
程序在发送WM_KEYDOWN后,如果是字符消息还会接着发送WM_CHAR。
只要将判断语句中的WM_KEYDOWN改成WM_CHAR就能屏蔽大部分按键消息,应为它只捕获字符消息。
当然还有一些消息需要屏蔽,具体请看下面的代码吧: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;
}
}