【MFC】消息机制

1.Windows消息机制

Windows应用程序是通过消息驱动的,在MFC软件开发时,进行界面操作经常要用到消息,通过消息对应的处理函数来实现响应的操作。比如,用户操作窗口,就会产生消息,送给对应的消息处理函数进行处理,对用户的操作做出一些反应。

2.MFC消息映射

MFC使用消息映射机制来处理消息,具体表现就是消息和消息处理函数一一对应的消息映射表,以及消息处理函数的声明和是实现。当窗口收到消息时,会在消息映射表中寻找对应的处理函数,然后由消息处理函数做出相应的处理。

3.自定义消息的方法

MFC无法通过类向导自定义消息,所以需要手动进行添加,主要过程如下:

  • 定义消息:因为很多新控件也会用到WM_USER消息,所以自定义需要从WM_USER+100开始或更高,以避免冲突。

#define  WM_MY_MESSAGE           (WM_USER+100)

  • 声明消息处理函数:afx_msg为消息标志,它向系统声明,有消息映射到函数实现体。

afx_msg LRESULT OnGlobalRegisterReadRspMsg(WPARAM wParam,  LPARAM lParam);

  • 实现消息处理函数
  • 将消息映射到消息处理函数:MESSAGE_MAP即是消息映射表

BEGIN_MESSAGE_MAP()

ON_MESSAGE(WM_MY_MESSAGE, &MY_CLASS::OnGlobalRegisterReadRspMsg)

END_MESSAGE_MAP()

  • 发送自定义消息:在发送自定义消息时,通常使用PostMessage和SendMessage的用法

::PostMessage(m_hWnd, WM_MY_MESSAGE, wParam , lParam);

4.PostMessage和SendMessage

4.1 SendMessage函数

LRESULT SendMessage (HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam );

4.2 PostMessage函数

       BOOL PostMessage(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam);

4.3 WPARAM和LPARAM参数

这两个参数指定了与消息有关的附加信息,是Windows消息机制的两个重要参数,整个Windows依靠这两个参数传递各种各样的消息。

  • WPARAM:它表示此次的消息类型是什么,是鼠标?是键盘?键盘up还是down?鼠标单击or双击等等。(我们也可以自定义值来表示我们想要传递的消息的含义)
  • LPARAM:它是一个指针,它指向本条区域所存储的信息的内存区域的首地址(一般用来携带数据)

4.4 二者的区别:

PostMessage是异步的,SendMessage是同步的。PostMessage 只把消息放入队列,不管消息是否被处理就返回,消息可能不被处理;而 SendMessage 等待消息被处理完了之后才返回,如果消息不被处理,发送消息的线程将一直被阻塞。也就是说,SendMessage发送消息不经过消息队列,会被直接处理,但是SendMessage会一直等待,直到消息被处理才会返回

4.5 二者的相同点:

都可以向进程内窗口发送消息,也可以向进程外窗口发送消息。

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值