今天在学习的时候,发现对话框上不响应键盘消息,查了老半天,终于成功了,现分享出来,

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焦点切换消息,加速键消息的更多相关文章

  1. VS2010/MFC对话框:非模态对话框的创建及显示

    非模态对话框的创建及显示 上一节讲了模态对话框及其弹出过程,本节接着讲另一种对话框--非模态对话框的创建及显示. 已经说过,非模态对话框显示后,程序其他窗口仍能正常运行,可以响应用户输入,还可以相互切 ...

  2. Python小游戏——外星人入侵(保姆级教程)第一章 01创建Pygame窗口 02创建设置类Setting()

    系列文章目录 第一章:武装飞船 01:创建Pygame窗口以及响应用户输入 02:创建设置类Setting() 一.前期准备 1.语言版本 Python3.9.0 2.编译器 Pycharm2022 ...

  3. [Win32]创建模态窗口

    http://www.cnblogs.com/zplutor/archive/2011/02/20/1958973.html 在Win32编程中,如果要显示一个模态窗口,一般是先创建对话框模板,然后使 ...

  4. MFC编程入门之六(对话框:创建对话框模板和修改对话框属性)

    本节开始为大家讲解偏向应用的知识--创建对话框.  对话框,大家应该很熟悉了,在我们常用的软件中大多都有对话框界面,例如,360安全卫士的主界面其实就是对话框,知识它做了很多美工方面的工作,将其大大美 ...

  5. VS2010/MFC对话框一:创建对话框模板和修改对话框属性

    创建对话框主要分两大步: 第一,创建对话框资源,主要包括创建新的对话框模板.设置对话框属性和为对话框添加各种控件: 第二,生成对话框类,主要包括新建对话框类.添加控件变量和控件的消息处理函数等. 创建 ...

  6. win32 htmlayout点击按钮创建新窗口,以及按钮图片样式

    最近在做一个C++ win32的桌面图形程序,我不是C++程序员,做这个只是因为最近没什么java的活. windows api,之前接触的时候,还是大学,那时用这个开发打飞机游戏纯粹是娱乐.现在基本 ...

  7. VS2010/MFC编程入门之六(对话框:创建对话框模板和修改对话框属性)

    鸡啄米在上一讲中介绍了MFC的消息映射机制,属于原理方面的知识.对于VC++编程入门学习者来说可能有些抽象,鸡啄米会把消息映射的知识渗透到后面的教程中.本节开始为大家讲解偏应用的知识-创建对话框. 对 ...

  8. VS2010-MFC(对话框:创建对话框模板和修改对话框属性)

    转自:http://www.jizhuomi.com/software/149.html 对话框,大家应该很熟悉了,在我们常用的软件中大多都有对话框界面,例如,360安全卫士的主界面其实就是个对话框, ...

  9. win32手动创建windows窗口的,小记

    摘抄自文档,其中的函数需要以后花时间看 向 WinMain 添加功能 首先,在 WinMain 函数内部创建 WNDCLASSEX 类型的窗口类结构. 此结构包含有关窗口的信息,如应用程序图标.窗口的 ...

随机推荐

  1. linux 常用命令(二)——(centos6.8-centos7)防火墙的启动、关闭

    centos 6.8 [centos6.5]: 查看chkconfig列表里面是否有iptables的服务: chkconfig | grep iptables 查看防火墙状态: service ip ...

  2. ES6 class——音乐播放器实例

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  3. python json demo

    值得注意的一点是,list类型的数据可以用[2,3]的方式定义,如"b" import json jsonData = '{"a":1,"b" ...

  4. shell中的引号

    单引号: 所见即所得 原封不动输出 双引号: 与单引号类似 特殊符号进行解析 ( $ $() `` ! ) 无引号: 与双引号类似 支持通配符( {} * ) 反引号: 优先执行 优先执行里面的命令, ...

  5. 20210717 noip18

    考前 从小饭桌出来正好遇到雨下到最大,有伞但还是湿透了 路上看到一个猛男搏击暴风雨 到了机房收拾了半天才开始考试 ys 他们小饭桌十分明智地在小饭桌看题,雨下小了才来 考场 状态很差. 开题,一点想法 ...

  6. 20210713考试-2021noip13

    这位巨佬的博客还是比我好多了 T1 工业题 考场: 暴力挺香的,不想正解了. 题解: $f(i,j)$ 只会得到 $f(i-1,j)$ 和 $f(i,j-1)$ 的贡献.每向右一步乘 $a$ ,向下一 ...

  7. Selenium系列(22) - 通过selenium控制浏览器滚动条的几种方式

    如果你还想从头学起Selenium,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1680176.html 其次,如果你不懂前端基础知识, ...

  8. Mysql常用sql语句(11)- between and 范围查询

    测试必备的Mysql常用sql语句系列 https://www.cnblogs.com/poloyy/category/1683347.html 前言 between and可以判断值是否在指定范围内 ...

  9. jq的选择器中带有特殊符号无法获取元素

    因项目需要,将元素id命名为数组(array[i].string) 使用jq去获取该id的元素时,返回的是个undefined.即jq获取不到该元素,因为该元素中的id含有特殊字符"[&qu ...

  10. Stream流方法引用

    一.对象存在,方法也存在,双冒号引用 1.方法引用的概念: 使用实例: 1.1先定义i一个函数式接口: 1.2定义一个入参参数列表有函数式接口的方法: 1.3调用这个入参有函数式接口的方法: lamb ...