MFC——12.话框中对键盘消息的响应处理&&如何响应wm_char消息
来源:互联网 发布:怎么举报淘宝卖家店铺 编辑:程序博客网 时间:2024/04/29 17:44
本文为转载文章,转载地址:http://blog.sina.com.cn/s/blog_a9fa057b0101gz1p.html
今天在写一个小程序的时候,发现在对话框对应的类里添加键盘字符消息,写了消息响应函数,但没有反应,查了后发现这篇文章解决了问题。
创建一个基于对话框的程序,结果发现对于不能直接响应键盘按键的消息。原来,在MFC中,对话框程序在完成程序的初始化后,就在程序主线程中,调用CWinThread::Run函数。在该函数中,首先调用API函数PeekMessage,而函数PeekMessage检查线程消息队列,如果消息存在,就将该消息放于指定的MSG结构中,以后的消息处理都将针对这一MSG结构对象。捕获消息后,该函数将捕获的消息进行预处理,然后再将消息传递给相应的窗口处理函数。
例子如下,在VC6的Class view中找到相应的对话框类单击右键,在右键菜单中选择Add Virtual Fuction...项,然后找到PreTranslateMessage虚函数进行加载。
BOOL CKeyinTstDlg::PreTranslateMessage(MSG* pMsg) //CKeyinTstDlg我为自己创建的对话框类{ // TODO: Add your specialized code here and/or call the base classif(pMsg->message == WM_KEYDOWN) { MessageBox(L"有键被按下");} return CDialog::PreTranslateMessage(pMsg);}
如何响应wm_char消息
创建一个MFC Dialog 的Porject,为了截获键盘击键的值,需要用到WM_CHAR消息。但在Project中添加该消息后会发现,程序无法响应该消息。即击键后程序并没有执行到该消息对应的函数处。参考MSDN对该消息的描述:
This member function is called by the framework to allow your application to handle a Windows message. The parameters passed to your function reflect the parameters received by the framework when the message was received. If you call the base-class implementation of this function, that implementation will use the parameters originally passed with the message and not the parameters you supply to the function.
关键的意思是要执行WM_CHAR消息,程序焦点必须在主窗口上。但不幸的是,程序运行以后,焦点在按钮上。
BOOL CKeyinTstDlg::PreTranslateMessage(MSG* pMsg) //CKeyinTstDlg我为自己创建的对话框类{ // TODO: Add your specialized code here and/or call the base class方式是使用PreTranslateMessage消息,进行处理,将焦点设置到主窗口上。具体代码如下:if ( pMsg->message == WM_CHAR) { pMsg->hwnd = m_hWnd; return FALSE; } return CDialog::PreTranslateMessage(pMsg);}
然后再OnChar(nChar, nRepCnt, nFlags)中添加对应消息
void Ctest4Dlg::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)//nChar 为对应按键的asc码值{ if (nChar==0xD){dd="";aa.SetWindowText(dd);}CString ss;ss.Format(L"%c",nChar);dd=dd+ss;aa.SetWindowText(dd);CDialog::OnChar(nChar, nRepCnt, nFlags);}
1 0
- MFC——12.话框中对键盘消息的响应处理&&如何响应wm_char消息
- 基于MFC对话框的键盘消息响应 WM_KEYDOWN WM_CHAR消息
- Dialog响应WM_CHAR消息
- MFC为何不响应WM_CHAR消息的解释理解
- MFC对话框程序不能响应WM_CHAR消息的解决办法
- MFC为何不响应WM_CHAR消息的解释理解
- MFC 响应键盘消息
- MFC键盘响应消息
- 如何让Dialog响应WM_CHAR消息
- MFC对键盘消息的截取与响应
- mfc 关于不响应键盘消息的处理
- 基于MFC对话框的键盘消息响应
- 让CDialog响应WM_CHAR消息
- MFC 键盘响应消息
- MFC响应键盘方向键消息
- MFC 消息响应与消息处理过程
- MFC中子控件响应键盘消息
- MFC对键盘消息的处理
- 手把手教你本地安装Chrome应用启动器
- 继承
- centos7 实现跨终端bash命令,vim文本等的粘贴复制
- iOS入门时常用的一些代码段——字典转模型
- Cowardly refusing to `sudo brew install`
- MFC——12.话框中对键盘消息的响应处理&&如何响应wm_char消息
- A率13折线PCM编码的C语言实现
- Arduino中的数据类型
- "围观"设计模式(4)--接口隔离原则(ISP,Interface Segregation Principle)
- C++编程基础笔记章节八
- 第七周项目1-成员函数、友元函数和一般函数有区别
- 第八周项目2 求长方体的表面积和体积
- 网上课程推荐
- 钱能c++第9章以前的笔记