对话框在什么时候才会调用OnChar 函数 我要做的是在一个没有任何控件的对话框窗口中接收键盘按键字符,就是要用OnChar 函数,但是它没有响应键盘按键.如何才能让系统调用OnChar 这个函数.各位大哥大姐,兄弟姐妹帮帮小弟的忙,不弟在些谢过了. 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 用调试程序测试时,发现程序可以响应SendMessage(WM_CHAR,48,48)消息,但不能响应PostMessage(WM_CHAR,48,48)消息.但SendMessage消息后之前按键的键值也收到了,且在SendMessage发送来的消息之前收到. 自己添加处理代码CDialog::PreTranslateMessage(MSG* pMsg){ if(pMsg->message==VK_KEYDOWN) { switch(pMsg->wParam) { case: 'VK_LEFT' MessageBox("你按了左方向键"); case: 'VK_RETURN' MessageBox("你按了回车键"); ...//你的处理代码 ... } } ..... return CDialog::PreTranslateMessage(pMsg);} 当你按下一个键时(然后再抬起来) windows发送三条消息WM_KEYDOWN,WM_CHAR,WM_KEYUP WM_KEYDOWN表示有一个键被按下 WM_CHAR表示你按的那个字符WM_KEYUP 当然表示有一个键抬起来了 重载对话框的PreTranslateMessage我这里的示例是过滤编辑框可输入字符,如果是对话框接收OnChar,则用this->GetSafeHwnd() ==pMsg->hwnd来判断或者直接省略PreTranslateMessage(MSG* pMsg) { if(WM_CHAR == pMsg->message) { if(GetDlgItem(IDC_EDIT1)->GetSafeHwnd() == pMsg->hwnd) { char ch = (TCHAR) pMsg->wParam; if((ch == '.') ||(ch >='0' && ch <='9')||(ch ==VK_BACK) ) return CDialog::PreTranslateMessage(pMsg); else return true; } } 双cpu 多线程 请教:程序中加入gridctrl_demo227中的GridCtrl的代码,编译报错。 添加CLSID 失败 CDBException::Dlete()函数做什么用?在MSDN中查不到呢 vc++mapx(高分相送) 求邮件附件与邮件正文分离的程序? 菜鸟问题,请大家帮忙。 csdn上的内容怎么保存下来? 请高手指点,弱弱的问,如何控制我的鼠标显示和移动 小问题请教 关于CoInitializeSecurity,快疯了。 求救:我想在局域网内通过代理(支持http sock) 取油件,有现成代码吗?
CDialog::PreTranslateMessage(MSG* pMsg)
{
if(pMsg->message==VK_KEYDOWN)
{
switch(pMsg->wParam)
{
case: 'VK_LEFT'
MessageBox("你按了左方向键");
case: 'VK_RETURN'
MessageBox("你按了回车键");
...//你的处理代码
...
}
}
.....
return CDialog::PreTranslateMessage(pMsg);
}
WM_KEYDOWN,WM_CHAR,WM_KEYUP
WM_KEYDOWN表示有一个键被按下
WM_CHAR表示你按的那个字符
WM_KEYUP 当然表示有一个键抬起来了
我这里的示例是过滤编辑框可输入字符,如果是对话框接收OnChar,则
用this->GetSafeHwnd() ==pMsg->hwnd来判断或者直接省略
PreTranslateMessage(MSG* pMsg)
{
if(WM_CHAR == pMsg->message)
{
if(GetDlgItem(IDC_EDIT1)->GetSafeHwnd() == pMsg->hwnd)
{
char ch = (TCHAR) pMsg->wParam;
if((ch == '.') ||(ch >='0' && ch <='9')||(ch ==VK_BACK) )
return CDialog::PreTranslateMessage(pMsg);
else
return true;
}
}