小甲鱼 发表于 2014-5-31 17:20:41

第004讲:消息机制

知识点回顾:


1. 窗口的诞生



备注:当调用完 CreateWindow 函数的时候,应用程序实例以及相应的消息队列已经诞生了。


2. Windows 是一个事件驱动,基于消息的操作系统



用户的任何操作都被看作一个事件,操作系统会自动将该事件转换为相应的消息并投入该应用程序的消息队列等待处理。


3. 消息机制



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

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

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

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

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

ravenhu13 发表于 2014-5-31 18:36:52

原来是坛主。。难怪这么详细。。。而且如此清晰。

zwbj8 发表于 2014-6-3 09:34:58

讲的好。。。简单明了

xqlsrjjjh 发表于 2014-6-7 11:41:38

有图有真像:lol:

wbdl88 发表于 2014-8-20 23:13:31

很好。。

!@R键! 发表于 2015-1-7 19:56:04

我来冒个泡

Mr.Evil 发表于 2015-3-6 14:08:50


讲的好。。。简单明了

WilliamYu 发表于 2015-9-23 15:06:07

显浅易懂!:loveliness:

susijie0021 发表于 2015-10-22 21:57:39

:smile

一笑见苍穹 发表于 2019-1-29 11:57:50

{:9_228:} +U

icblue 发表于 2019-8-2 14:19:28

{:10_256:}

hacker欢 发表于 2019-10-15 18:40:55

打卡学习哈

SuperJd 发表于 2020-2-14 21:56:04

多谢坛主

howzyao 发表于 2020-3-28 21:46:57

本帖最后由 howzyao 于 2020-3-28 21:53 编辑

需要正确地注册完成后,由CreateWindow(11参数)来返回一个指针赋给hwnd;
随后的事,就是消息的循环直至有退出消息产生。过程中,由“回调函数”中让Windows参与对消息的处理,需要干涉、处理的(消息)分支,我们就写代码,不用的,不用写,使用最后一行的函数:
DefWindowProc();来完成默认的处理。
页: [1]
查看完整版本: 第004讲:消息机制