win32 消息机制

1、windows消息分类:
窗口消息:与窗口相关,以WM_开头的消息,除WM_COMMAND外。
命令消息:WM_COMMAND消息,处理用户请求
控件通知消息:WM_NOTIFY
用户自定义消息:(WM_USER、 WM_APP)

2、windows消息系统组成:
消息队列:操作系统负责为进程维护一个消息队列,程序运行时不断地从消息队列进行消息的获取,处理消息
消息循环:应用程序不断地获取消息,处理消息构成消息循环。

消息处理:消息循环负责将消息派发到相关的窗口使用关联的窗口过程函数进行处理。

3、win32消息路由

    1. 消息产生
    2. 系统将消息排列到其应该排放的线程的消息队列中。
    3. 线程中的消息循环调用GetMessage (or PeekMessage )获取消息。

    4. 传送消息TranslateMessage and DispatchMessage to 窗口过程。
    5. 在窗口过程中进行消息处理。

4、消息处理

应用程序的消息机制主要由消息循环来处理:

  1. while (GetMessage(&msg, NULL, 0, 0))
  2. {
  3.         TranslateMessage(&msg);
  4.         DispatchMessage(&msg);
  5. }

GetMessage 函数从应用程序的队列里取出一个消息,如果这个消息是 WM_QUIT(程序退出消息)就返回 0,结束 while 循环。如果不是退出消息,那么就执行 TranslateMessage 翻译消息,这个操作主要是对一些消息进行转换,例如把键盘的虚拟键消息转换为字符消息。

接着调用 DispatchMessage 将消息分派给相应的窗口过程。

注意:他不是直接通过 DispatchMessage 调用我们的窗口过程 WndProc,这里其实 DispatchMessage 是带着消息去找操作系统,然后再由操作系统调用 WndProc 窗口过程。看起来有点纠结哈,不过这就是消息机制的一个真实面目,操作系统为了绝对的控制权,时时刻刻都监控着应用程序的运行。

在窗口过程中,我们对感兴趣的消息进行监控并部署相应的代码,对不感兴趣的消息我们都扔给DefWindowProc,让操作系统以默认的方式来处理消息。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值