MFC中消息笔记

本文探讨了在MFC中如何管理和处理消息,特别是计数器消息。类向导用于管理commands、message、visual functions和member variables。重点讨论了WM_LBUTTONUP、WM_KEYDOWN消息及CDialog中键盘消息响应的问题。通过重写PreTranslateMessage函数来捕获特定键盘事件,例如VK_TAB、VK_LEFT等。同时,解释了MSG结构体和WM_CHAR消息在处理字符按键中的作用。
摘要由CSDN通过智能技术生成

在Class Wizard(类向导)中能管理类的相关信息,例如 commands 命令 message 消息 visual functions虚函数,member variable类的成员变量 Menthods重写的方法

在对应的类下面增减相关的信息:

一些例子相似的就不说了:在消息发送后运行对应的处理函数。

WM_LBUTTONUP:当鼠标左键点击弹起时候发送该信息。相似的海鸥左键点击按下时,双击。中键。

WM_KEEYDOWN:OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags):nChar表示虚拟键码,nRepCnt是当按住一个键时的重复计算,nFlags表示击键消息标志,包含很多状态标识,可以表明是否同时按下了各种键,有CTRL,SHIFT等标志(nFlags&标识判断)。虚拟键代码是与设备无关的键如 F1 SHIT等。

注意:CDialog中响应键盘消息的OnKeyDown函数没反应。

经过仔细研究发现CDialog是相应对应消息的OnKeyDown函数的,只是这个消息在到达窗体之前,已经被它的子控件捕获了,如果将窗体中的所有控件都删除,窗体就会捕获到这个消息,但要注意的是,MFC为了实现在窗体上切换子控件的焦点,已经将 VK_TAB,VK_LEFT,VK_RIGHT,VK_UP,VK_DOWN进行了处理,同时VK_RETURN也被系统捕获用来处理相应的确定事件,所以即使窗体中没控件,这几个键还是无法捕获,暂时只能用PreTranslateMessage解决。 

在visual function 中找到PreTranslateMessage(MSG* pMsg)

我们看看MSG的结构:

typedef struct tagMSG {
    HWND        hwnd;
    UINT        message;
    WPARAM      wParam;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值