Win32对话框模板创建的窗口上响应键消息,Tab焦点切换消息,加速键消息
今天在学习的时候,发现对话框上不响应键盘消息,查了老半天,终于成功了,现分享出来,
1,首先要在消息循环的时候加如下代码.
- int WINAPI WinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPSTR lpCmdLine, _In_ int nShowCmd)
- {
- MyDialog *pDlg = new MyDialog();
- HWND hWnd=pDlg->QCreateDlg(hInstance, IDD_DIALOG1, NULL);
- pDlg->QShowWindow();
- pDlg->QUpdateWindow();
- HACCEL hAccel = NULL; //加速键句柄,如果要用就加载资源中的加速键
- //消息循环
- MSG msg;
- while (GetMessage(&msg, NULL, 0, 0))
- {
- if (!pDlg->PreTranslateMessage(&msg))//捕获所有消息
- {
- //判断是否是加速键消息和是否是对话框消息
- if (!TranslateAccelerator(hWnd, hAccel, &msg) && //捕获加速键消息
- !IsDialogMessage(hWnd, &msg)) //响应Tab键消息
- {
- TranslateMessage(&msg);
- DispatchMessage(&msg);
- }
- }
- }
- delete pDlg;
- return 0;
- }
2.响应WM_KEYDOWN消息
- BOOL MyDialog::PreTranslateMessage(MSG* pMsg)
- {
- if ((pMsg->hwnd == m_hWnd) || ::IsChild(m_hWnd, pMsg->hwnd))
- {
- // 如果消息是 WM_KEYDOWN ,我们就弹出一个消息框。 sunxin
- if (pMsg->message == WM_KEYDOWN && pMsg->wParam==VK_RETURN)
- {
- HWND hChild=GetFocus(); //获得当前有焦点的控件句柄
- if (hChild != NULL)
- {
- if (GetDlgCtrlID(hChild) == IDOK)
- {
- OnIDOK(hChild);
- }
- }
- //获得下一个有Tab索引的控件句柄
- //(父窗口句柄,当前有焦点的句柄,FALSE为向下查找,TRUE为向上)
- hChild = GetNextDlgTabItem(m_hWnd,hChild,FALSE);
- if (hChild2)
- {
- SetFocus(hChild); //设置找到的控件为焦点
- return TRUE;
- }
- }
- }
- return FALSE;
- }
3.响应加速键消息
在前面添加加速键句柄的时候加载资源中的加速键ID
- HACCEL hAccel = LoadAccelerators(m_hInstance, MAKEINTRESOURCE(IDR_ACCELERATOR1));//添加资源中的加速键
其实加速键就是在菜单点击事件消息的时候发送的WM_COMMAND消息中
- LRESULT MyDialog::OnCommand(UINT CtrlId, UINT CtrlEvent, HWND hCtrlWnd)
- {
- //普通按钮消息
- if (CtrlId == IDOK)
- return OnIDOK(hCtrlWnd);
- //加速键消息
- if (CtrlId == IDOK && CtrlEvent == 1)
- return OnIDOK(hCtrlWnd);
- //就这么点区别
- return QDialogEx::OnCommand(CtrlId, CtrlEvent, hCtrlWnd);
- }
WM_COMMAND 消息说明:
声明:
#define WM_COMMAND 0x0111
参数:
wParam
1,菜单 (HIWORD)wParam=0,(LOWORD)wParam=菜单id
2,加速键(HIWORD)wParam=1,(LOWORD)wParam=加速键id
3,控件 (HIWORD)wParam=通知id,(LOWORD)wParam=控件id
lParam
1,菜单=0
2,加速键=0;
3,控件=HWND
返回值
LRESULT
学习后感觉是不是很简单????????????????
Win32对话框模板创建的窗口上响应键消息,Tab焦点切换消息,加速键消息的更多相关文章
- VS2010/MFC对话框:非模态对话框的创建及显示
非模态对话框的创建及显示 上一节讲了模态对话框及其弹出过程,本节接着讲另一种对话框--非模态对话框的创建及显示. 已经说过,非模态对话框显示后,程序其他窗口仍能正常运行,可以响应用户输入,还可以相互切 ...
- Python小游戏——外星人入侵(保姆级教程)第一章 01创建Pygame窗口 02创建设置类Setting()
系列文章目录 第一章:武装飞船 01:创建Pygame窗口以及响应用户输入 02:创建设置类Setting() 一.前期准备 1.语言版本 Python3.9.0 2.编译器 Pycharm2022 ...
- [Win32]创建模态窗口
http://www.cnblogs.com/zplutor/archive/2011/02/20/1958973.html 在Win32编程中,如果要显示一个模态窗口,一般是先创建对话框模板,然后使 ...
- MFC编程入门之六(对话框:创建对话框模板和修改对话框属性)
本节开始为大家讲解偏向应用的知识--创建对话框. 对话框,大家应该很熟悉了,在我们常用的软件中大多都有对话框界面,例如,360安全卫士的主界面其实就是对话框,知识它做了很多美工方面的工作,将其大大美 ...
- VS2010/MFC对话框一:创建对话框模板和修改对话框属性
创建对话框主要分两大步: 第一,创建对话框资源,主要包括创建新的对话框模板.设置对话框属性和为对话框添加各种控件: 第二,生成对话框类,主要包括新建对话框类.添加控件变量和控件的消息处理函数等. 创建 ...
- win32 htmlayout点击按钮创建新窗口,以及按钮图片样式
最近在做一个C++ win32的桌面图形程序,我不是C++程序员,做这个只是因为最近没什么java的活. windows api,之前接触的时候,还是大学,那时用这个开发打飞机游戏纯粹是娱乐.现在基本 ...
- VS2010/MFC编程入门之六(对话框:创建对话框模板和修改对话框属性)
鸡啄米在上一讲中介绍了MFC的消息映射机制,属于原理方面的知识.对于VC++编程入门学习者来说可能有些抽象,鸡啄米会把消息映射的知识渗透到后面的教程中.本节开始为大家讲解偏应用的知识-创建对话框. 对 ...
- VS2010-MFC(对话框:创建对话框模板和修改对话框属性)
转自:http://www.jizhuomi.com/software/149.html 对话框,大家应该很熟悉了,在我们常用的软件中大多都有对话框界面,例如,360安全卫士的主界面其实就是个对话框, ...
- win32手动创建windows窗口的,小记
摘抄自文档,其中的函数需要以后花时间看 向 WinMain 添加功能 首先,在 WinMain 函数内部创建 WNDCLASSEX 类型的窗口类结构. 此结构包含有关窗口的信息,如应用程序图标.窗口的 ...
随机推荐
- long ? 的使用和理解
Dictionary<string, object> dic = new Dictionary<string, object>(); long lg = 12345; dic[ ...
- (3)hadoop单节点配置
hadopp版本hadoop-2.6.0-cdh5.7.0 下载地址http://archive-primary.cloudera.com/cdh5/cdh/5/ 同样使用flashFXP上 ...
- Git(GitHub)配合TortoiseGit使用
1.首先下载安装配置Git 安装请参照 https://www.cnblogs.com/xueweisuoyong/p/11914045.html 配置请参照 https://www.jianshu. ...
- ros-kinetic install error: sudo rosdep init ImportError: No module named 'rosdep2'
refer to: https://blog.csdn.net/yueyueniaolzp/article/details/85070093 方法一 将Ubuntu默认python版本设置为2.7 方 ...
- configparser读
#-*-coding:utf-8-*-__author__ = "logan.xu"import configparserconf = configparser.ConfigPar ...
- MySQL-SQL基础1
p.p1 { margin: 0; font: 11px Menlo; background-color: rgba(128, 128, 128, 0.5); min-height: 13px } p ...
- MySQL之连接查询和子查询
多表连接的基本语法 多表连接,就是将几张表拼接为一张表,然后进行查询 select 字段1, 字段2, ... from 表1 {inner|lift|right} join 表2 on 连接条件; ...
- Linux系统的vsftpd服务配置
概述: FTP ( 文件传输协议 ) 是 INTERNET 上仍常用的最老的网络协议之一 , 它为系统提供了通过网络与远程服务器进行传输的简单方法FTP 服务器包的名称为 VSFTPD , 它代表 V ...
- 【Spring 5.x】学习笔记汇总
Spring 工厂 工厂设计模式.第一个Spring程序细节分析.整合日志框架 注入详解 - Set注入(JDK内置类型,用户自定义类型).构造注入(重载) 反转控制与依赖注入.Spring工厂创建复 ...
- Java变量命名规范
java命名规范 所有方法.变量.类名:见名知意 类成员变量:首字母小写.驼峰原则: 例如:lastName 第一个单词首字母小写,其余首字母大写 局部变量:首字母小写.驼峰原则 类名: 首字母小写. ...