Win32 Dialog对话框处理WM_KEYDOWN事件
来源:互联网 发布:武汉淘宝产品拍摄公司 编辑:程序博客网 时间:2024/06/05 10:39
MFC中重写虚函数PreTranslateMessage里是可以过滤WM_KEYDOWN消息的。但是如果是Win32 SDK中利用DialogBox/DialogBoxParam创建模态对话框一般行为是不处理WM_KEYDOWN消息的。如果该对话框中没有任何的子控件的话,在对话框的窗口回调函数DlgProc()中是可以过滤到WM_KEYDOWN消息的,不过并不是所有的键的消息都可以捕获到,例如像Tab键,上下左右方向键VK_UP/VK_DOWN/VK_LEFT/VK_RIGHT等都没有办法捕获到。
补充:如果对话框上有其它子控件的话,使用方式和它类型,子类化,自己设置控件新的窗口回调函数,新窗口回调函数与上面的类似。比如对话框中有个static静态文本控件的话,也是这样捕获Tab/方向键事件的。
如果该模态对话框中有子控件,哪怕是一个static静态文本控件的话,这个时候对话框的窗口回调函数中就无法获取任何的WM_KEYDOWN消息了。
所以模态对话框在没有任何子控件的情况下想要处理Tab键/VK_UP/Down/Left/Rigth键的话,可以使用下面的方式:
INT_PTR CALLBACK DlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam){UNREFERENCED_PARAMETER(lParam);switch (message){case WM_INITDIALOG:{OldWndProc = (WNDPROC)SetWindowLong(hDlg, GWL_WNDPROC, (LONG)NewDlgProc); // 设置新的窗口过程回调函数}return (INT_PTR)TRUE;} // ... 其它消息处理,这里省略return (INT_PTR)FALSE;}LRESULT CALLBACK NewDlgProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) // 该对话框新的窗口回调函数,过滤WM_KEYDOWN消息。{switch(message){case WM_GETDLGCODE:{ return (DLGC_WANTALLKEYS | CallWindowProc(OldWndProc, hWnd, message, wParam, lParam)); // 注意这里,否则没有办法捕获Tab/方向键}case WM_KEYDOWN:{TCHAR szText[MAX_PATH] = {0};StringCchPrintf(szText, _countof(szText), _T("%d"), wParam);SetWindowText(hWnd, szText);}break;default:break;}return CallWindowProc(OldWndProc, hWnd, message, wParam, lParam);}
补充:如果对话框上有其它子控件的话,使用方式和它类型,子类化,自己设置控件新的窗口回调函数,新窗口回调函数与上面的类似。比如对话框中有个static静态文本控件的话,也是这样捕获Tab/方向键事件的。
4 0
- Win32 Dialog对话框处理WM_KEYDOWN事件
- win32关于对话框处理不到WM_KEYDOWN消息的解决办法(注:非MFC)
- 对话框中控件的WM_KEYDOWN消息处理
- 对话框中控件的WM_KEYDOWN消息处理
- jQuery Dialog对话框事件
- 对话框响应WM_KEYDOWN消息
- 对话框响应WM_KEYDOWN消息
- win32事件处理
- 对话框事件处理接口
- MFC menu 事件 dialog 对话框 传递 传值
- MFC menu 事件 dialog 对话框 传递 传值
- MFC 对话框Dialog响应键盘事件
- MFC 对话框Dialog响应键盘事件
- element ui 对话框el-dialog关闭事件
- dialog中处理鼠标事件
- Win32事件消息处理函数
- TranslateAccelerator只处理WM_KEYDOWN消息
- WM_KEYDOWN
- 算法题总结+解法
- MySQL日期时间函数大全
- 链表的建立和一些基本功能的实现
- NSXMLParser(SAX解析)大文件解析
- Easy way to buy cheap fut coins fifa 15 awfifame and cool?
- Win32 Dialog对话框处理WM_KEYDOWN事件
- 《数据结构》图存储遍历示例
- Ubuntu 14.04 搭建Android开发环境
- hadoop8-序列化
- Mergesort
- java Swing控件桌面程序 更换程序小图标
- poj1094贴一份TLE的代码,以后有可能再优化。
- hdoj 1207 汉诺塔II
- Android 使用Loader示例