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

Windows核心编程06-Windows的消息循环

时间:2016-06-27 19:31:13      阅读:213      评论:0      收藏:0      [点我收藏+]

标签:

Windows的消息机制

  程序的执行机制

    过程驱动-程序的执行过程是按照预定好的顺序执行

    事件驱动-程序的执行是无序,用户根据需要随机触发相应的事件

  Win32窗口程序就是采用时间驱动方式执行,也就是消息机制

  什么是消息

    当系统通知窗口工作时,就采用消息的方式派发(DispatchMessage来派发)给窗口的自定义的处理函数函数WNDCLASSEX.lpfnWndProc

    消息组成:

      窗口句柄

      消息ID

      消息的两个参数 如鼠标单击,两个参数如下:

        消息产生的时间

        消息产生的鼠标位置

  窗口处理函数和消息

    每个窗口都必须具有窗口处理函数

    回调函数:自己定义一个函数,自己没调用给操作系统调用

LRESULT CALLBACK WindowProc(      
    HWND hwnd,  //窗口句柄
    UINT uMsg,  //消息ID
    WPARAM wParam, //消息参数
    LPARAM lParam //消息参数
);

    当系统通知窗口时,会调用窗口处理函数同时将消息ID和消息参数传递给窗口处理函数

    在窗口处理函数中,不处理的消息,使用缺省窗口处理函数 ,例如 DefWindowsProc

  消息相关函数

    1 GetMessage-获取消息,只能抓取本进程的消息      

BOOL GetMessage(      

    LPMSG lpMsg, //存放获取到的消息BUFF     HWND hWnd, //窗口句柄,抓取哪个窗口的消息,如果为空抓取本进程所有消息     UINT wMsgFilterMin, //获取消息的最小ID     UINT wMsgFilterMax //获取消息的最大ID );
  lpMsg - 当获取到消息后,将消息的参数存放在MSG结构中
  hWnd - 获取到hWnd所指定窗口的消息
  wMsgFilterMin和wMsgFilterMax - 只能获取到由它们指定消息范围内的消息,如果都为0,表示没有范围 通过现象发现 PostQuitMessage可以使GetMessage返回0
以下是MSDN的解释:
GetMessage返回值:

If the function retrieves a message other than WM_QUIT, the return value is nonzero.

If the function retrieves the WM_QUIT message, the return value is zero.

PostQuitMessage Function


The PostQuitMessage function indicates to the system that a thread has made a request to terminate (quit). It is typically used in response to a WM_DESTROY message.

Syntax

void PostQuitMessage(      

    int nExitCode );

Parameters

nExitCode
[in] Specifies an application exit code. This value is used as the wParam parameter of the WM_QUIT message.

2 TranslateMessage - 翻译消息。将按键消息,翻译成字符消息。

  BOOL TranslateMessage(

    CONST MSG *lpMsg //要翻译的消息地址

  );

  检查消息是否按键的消息,如果不是按键消息,不做任何处理,继续执行。

3 DispatchMessage - 派发消息。将消息派发到该消息所属窗口的窗口处理函数上

  LRESULT DispathMessage(

    CONST MSG *lpmsg // 要派发的消息

  );

Windows核心编程06-Windows的消息循环

标签:

原文地址:http://www.cnblogs.com/visions/p/5612963.html

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