PreTranslateMessage()函数捕获键盘按键消息

01. PreTranslateMessage函数,常用于屏蔽MFC对话框中默认的Enter和ESC消息

函数原型:BOOL PreTranslateMessage(MSG* pMsg)

用法举例:

BOOL CTestDlg::PreTranslateMessage(MSG* pMsg)
{
    if(pMsg->message == WM_KEYDOWN){
        if(pMsg->wParam == VK_ESCAPE){
            return TRUE;
        }
        if(pMsg->wParam == VK_RETURN){
            return TRUE; // 对话框内部控件不可以接收到回车消息!!
        }
    }

return CDialog::PreTranslateMessage(pMsg);
}

02.响应系统按键

if(pMsg->message==WM_SYSKEYDOWN)
{
   if(pMsg->wParam==VK_MENU)
    MessageBox("alt");
}

if((pMsg->wParam==VK_F9) && (GetAsyncKeyState(VK_MENU)<0))
{  
   MessageBox(_T("同时按下了Alt键和F9键"));  
}

GetAsyncKeyState()
=========================
功能:确定用户当前是否按下了键盘上的一个键
原型:SHORT GetAsyncKeyState(int vKey);

参数:nVirtKey指出要检查键的虚键代码。结果的高位指出该键当前是否被按下(是为1,否为0)。
常用键的VK值:
VK_SHIFT Shift键
VK_LSHIFT 左Shift键
VK_RSHIFT 右Shift键
VK_CONTROL Ctrl键
VK_LCONTROL 左Ctrl键
VK_RCONTROL 右Ctril键
VK_MENU Alt键
VK_LMENU 左Alt键
VK_RMENU 右Alt键
VK_LBUTTON 鼠标左键
VK_RBUTTON 鼠标右键

另一个函数GetKeyState与GetAsyncKeyState函数不同。GetAsyncKeyState在按下某键的同时调用,判断正在按下某键。
GetKeyState则在按过某键之后再调用,它返回最近的键盘消息从线程的队列中移出时的键盘状态,判断刚按过了某键。

与RegisterHotKey()相比,GetAsyncKeyState()的优点在于可以监控鼠标按键,缺点是需要使用定时器。

//*******************

用获取系统消息的方法
        protected override void WndProc(ref Message m)
        {
            if (m.Msg == WM_LBUTTONDOWN)
            {
                string controlName = GetControlName();
                if (controlName == "Edit")
                {
                    this.Show();
                }
                else
                {
                    this.Hide();
                }
            }
            base.WndProc(ref m);
        }

Window捕获消息机制及动态创建button-MFC相关推荐

  1. Window捕获消息机制-C#

    C#捕获鼠标消息 在C#中怎样禁用鼠标按键,我们可以通过ImessageFilter接口下的PreFilterMessage方法.Application类的AddMessageFilter方法,Rem ...

  2. MFC中动态创建button及添加响应事件

    MFC中动态创建button及添加响应的事件,主要步骤如下:  1.在头文件(**Dlg.h)中添加一个CButton类型,  例如:CButton btn;  2.在(**Dlg.cpp)的OnIn ...

  3. BB10动态创建Button并响应单击事件(C++版本)

    现在在我的项目中需要用到这样一个功能:从数据文件中读取出数量不等的字符串,然后根据字符串的个数动态添加相应的按钮到主界面中,并且要求根据不同按钮的单击事件执行不同的代码. //不会使用CSDN的cod ...

  4. C#,桌面编程入门(01)——按钮Button属性与事件、动态创建、快捷键、控件数组及自定义Button

    本文是<桌面编程入门>系列文章的开山之篇. <桌面编程入门>系列文章主要介绍桌面编程的各种组件,Button,ComboBox,Panel,WebBrowser...... 类 ...

  5. windows消息机制详解-3

    1. 引言 Windows 在操作系统平台占有绝对统治地位,基于Windows 的编程和开发越来越广泛. Dos 是过程驱动的,而Windows 是事件驱动的[6],这种差别的存在使得很多Dos 程序 ...

  6. MFC六大核心机制之三:动态创建

    MFC中很多地方都使用了动态创建技术.动态创建就是在程序运行时创建指定类的对象.例如MFC的单文档程序中,文档模板类的对象就动态创建了框架窗口对象.文档对象和视图对象.动态创建技术对于希望了解MFC底 ...

  7. 动态的Objective-C——关于消息机制与运行时的探讨

    2019独角兽企业重金招聘Python工程师标准>>> 动态的Objective-C--关于消息机制与运行时的探讨 一.引言 Objective-C是一种很优美的语言,至少在我使用其 ...

  8. Handler消息机制(四):子线程可以创建Handler吗

    默认情况下,ActivityThread类为我们创建的了主线程的Looper和消息队列,所以当你创建Handler之后发送消息的时候,消息的轮训和handle都是在ui线程进行的.这种情况属于子线程给 ...

  9. MFC小程序003------MFC使用WebBrowser组件,在对话框中创建滚动视图,动态创建一个静态文本控件并设置鼠标单击的消息响应...

    MFC小程序截图: 一.在MFC中简单使用WebBrowser的ActiveX插件的方法: 见博文:  http://blog.csdn.net/supermanking/article/detail ...

最新文章

  1. vue 增加js日志输出文件_Vue.JS项目导入导出JSON文件的方案之一,其他项目也可参考...
  2. MFCC特征参数提取(一)(基于MATLAB和Python实现)
  3. rosdep init和rosdep update出错处理
  4. linux应用程序抢占键盘,linux 系统挂起
  5. QT QNetworkInterface::allAddresses();获取了很多无效的地址_Qt编写地图综合应用16-省市轮廓图下载...
  6. 【Linux】一步一步学Linux——hexdump命令(267)
  7. ChemDraw教程:如何查看和删除俗名
  8. python中模块和包是什么_Python中模块和包的概念
  9. 常用Latex表达式符号——组合数学篇
  10. C/C++程序设计注意事项 (二)
  11. AtCoder Grand Contest 004 C - AND Grid(思路题)
  12. 《构建之法》读书心得
  13. xmlhttp资料(收集)
  14. 图神经网络学习笔记(1)——图信号与图傅里叶变换
  15. DevExpress 隐藏Ribbon中barbuttonItem的SuperTip(2)
  16. 浅谈一下前后端分离(什么是前后端分离以及前后端分离的原理)
  17. 淘宝新店提升必备-直通车如何开
  18. Bert入门学习过程记录
  19. 师兄写的一个JAVA播放器的源代码(转)
  20. Kali Linux 安装教程和使用技巧

热门文章

  1. ansible(自动化运维中)——ansible常用模块
  2. Linux解决 -bash: nc: command not found问题,安装nc
  3. iview 下拉select样式_Vue.js相关:iview实现select tree树形下拉框的示例代码
  4. sudo dpkg 找不到命令_【干货】Linux中实用但很小众的11个炫酷终端命令
  5. 怎么看电脑系统是win几_一文看懂arm架构和x86架构有什么区别
  6. 程序员算事业单位吗_清北毕业出来的程序员不如三本公务员?网友:你开心就好...
  7. iphonex黑屏开不了机_手机突然黑屏开不了机充电没反应怎么办?别急,这样就可以解决...
  8. 李焕英 照片动起来了?B站 up主用AI还原动态影像
  9. 突发!百度CEO李彦宏被当中泼了一瓶水,肇事者网名:直男上树
  10. assignment symbolic automaton verilog设计