BngThea 发表于 2017-7-6 14:33:22

《Windows SDK》004 消息机制1

本帖最后由 BngThea 于 2017-7-15 09:42 编辑

一 核心知识点
* 窗口出生流程
初始化窗口类结构 -> 注册该类 -> 创建该类的对象 -> 显示与更新窗口 -> 消息循环
只有且只要用窗口类生成对象时(CreateWindow)在内存中生成实例窗口(带句柄的)

* 事件驱动机制
1 不同的事件均能触发Windows响应,且能并行进行
2 事件通过消息的方式被Windows捕获,并扔进消息队列中

* DispatchMessage 机制
当其执行时,并不是直接将消息传递给窗口,而是Windows通过回调函数来实现的。

* MSG结构
成员:
            HWND hwnd;//窗口句柄
      UINT message;//消息
      WPARAM wParam;//附加消息
      LPARAM lParam;//附加消息
      DWORD time;//该消息被放到队列中的时间
      POINT pt;//消息投放时鼠标位置

* 消息机制
通过不断GetMessage来逐条处理消息,每条消息都通过TranslateMessage进行翻译和DispatchMessage进行分派,然后交由操作系统使用回调函数处理和响应消息。
消息数量极其庞大,我们只需要对自己感兴趣的消息进行筛选处理,而其他所有的消息扔给DefWindowProc即可。

二 新API函数
* ShowWindow(hwnd,iCmdShow)
该函数设置指定窗口的显示状态,如果窗口之前可见返回true,否则返回false。
第一次调用时,用WinMain的第四个参数作为其第二个参数。

* UpdateWindow(hwnd)
该函数可以绕过消息列队,直接发送WM_PAINT消息,成功返回true,失败返回false。

* GetMessage(&msg,NULL,0,0)
该函数从消息列队中获取一个消息放到MSG对象中,成功后在列队中删除该消息并返回true,仅当该消息为WM_QUIT,返回false
第一个参数:MSG结构对象的指针
第二个参数:需要获取消息的窗口的句柄,一般为NULL,表示当前窗口
第三四个参数:消息值得最小数,一般为0
页: [1]
查看完整版本: 《Windows SDK》004 消息机制1