码迷,mamicode.com
首页 > Windows程序 > 详细

Win32API 消息机制

时间:2017-05-15 12:57:15      阅读:209      评论:0      收藏:0      [点我收藏+]

标签:wms   int   窗口   内存   产生   系统默认   windows   处理   检查   

Win32API 消息机制

    • windows平台下,什么是消息?
      • 当系统通知窗口工作时,就采用消息的方式派发给窗口的窗口处理函数
      • 消息组成的6大部件组合,缺一不可:
        • 1 窗口句柄
          • 每个win32的窗口程序,只要是有窗口,就不可能没有窗口句柄,因为创建之初就生成了句柄,有如小车要上路就强制要求有个“车牌”。
        • 2 消息ID
          • 微软给windows消息机制,设计1024个消息数字,这种数字的出现,就代表此种消息的出现。
        • 3 消息的两个参数(附带信息)
          • 任何一个消息都附带两个信息: 1 不同的消息,这两个附带的信息是不同的 2 一个用WPARAM 保存 ,另外一个用 LPARAM类型来保存。
        • 4 消息产生的时间 (不关注,但不可缺少)
        • 5 消息产生时的鼠标位置 (不关注,但不可缺少)
    • 消息相关函数
      • 1 GetMessage - 获取本进程的消息
        BOOL GetMessage(
        LPMSG lpMsg, //存放获取到的消息Buff
        HWND hWnd, //窗口句柄
        UINT wMsgFilterMin, //获取消息的最小ID 默认0
        UINT wMsgFilterMax //获取消息的最大ID 默认0
        );
        • LPMSG lpMsg, - 当获得消息后,将消息的参数存放到MSG结构中。
        • HWND hWnd, - 获得hWnd所指定窗口的消息。
        • UNIT wMsgFilterMin 和 UNIT wMsgFilterMax - 只能获得由它们指定的消息范围内的消息,如果都为0,表示没有范围。
        • BOOL GetMessage(...) 这个函数的返回值非常重要
          • while(GetMessage(...)){......} 返回0才能结束,然而能使得GetMessage函数返回0的消息只有一个:WM_QUIT 。
          • PostQuitMessage(0); 预设了一个WM_QUIT消息。##助记:挖坑埋雷
      • 2 TranslateMessage - 翻译消息。将探寻消息,翻译成字符消息。
        BOOL TranslateMessage(
        const MSG* lpMsg //要翻译的消息地址
        );
        • 检查消息是不是按键的消息,不是按键消息,不做任何处理,继续执行。
      • 3 DispatchMessage - 派发消息。
        LONG DispatchMessage(
        const MSG* lpmsg
        );
        • DispatchMessage(&msg,NULL,NULL,NULL)函数派发消息,触发窗口处理函数,调用窗口处理函数。
        • msg.hWnd --> 找到保存窗口数据的内存 ---> 比对"窗口名称"--->匹配窗口类 ---> 调用WndProc(msg.hWnd, msg.message, msg,wParam, msg.lParam); --->给了我们处理消息的机会,我们只处理我们关注的消息,其余的消息,让系统默认的函数DefWindowProc()处理。

Win32API 消息机制

标签:wms   int   窗口   内存   产生   系统默认   windows   处理   检查   

原文地址:http://www.cnblogs.com/bing-z/p/6855812.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!