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

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 // 要派发的消息

  );

转载于:https://www.cnblogs.com/visions/p/5612963.html

一、Win32编程基本概念 1、消息驱动 在介绍Windows消息驱动概念之前,我们首先来回顾面向过程的程序结构:main()程序有明显的开始、中间过程和结束点,程序是围绕这个过程编写好相关的子过程,再把这些子过程串联在一起。程序编好以后,该过程也就确定了,程序必须按照规定好的顺序执行:是否需要用户的输入、输入什么、程序取得用户输入以后做什么处理,处理完毕将结果显示给用户。该过程一旦确定,程序的执行过程也是固定的,用户不能干预。 而Windows编程所采用设计思想是:消息驱动,又叫做事件驱动。在这种程序结构中,程序没有明显的开始、结束,程序流程的控制由各种随机发生、不确定、没有预先设定顺序的事件的发生来触发。是一个不断产生消息和处理消息的过程。 也就是说程序一运行开始处于等待消息状态,取得消息以后,就对该消息做出相应的处理,完成处理以后又进入等待消息的状态。这种程序结构与Windows操作系统结合非常紧密,最明显一点就是消息的管理是由操作系统完成的。应用程序从操作系统获得消息有两种方式:一种就是应用程序调用Windows提供的消息获取函数;另外一种就是回调函数,由操作系统自己调用。 这种消息驱动机制,有点像银行的柜台业务:早上八点,银行开门(Windows应用程序开始运行),每个营业员(Windwows线程)回到自己的柜台开始办公。如果有顾客来办理相关业务(相当于Windows消息),那么对应的业务员就进行处理。顾客来办理业务的时间以及业务类型都是随机的,如果某一时刻没有顾客办理业务并且没有到下班时间(Windows应用程序退出)的话,那么相关的业务员进入等待状态。所有的业务员不断重复该过程,直到下班(Windows应用程序退出)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值