Windows 消息处理机制与事件驱动

2.消息,消息队列,消息循环,消息响应
 .OS将操作包装成Message
 .typedef struct MSG {       
      HWND   hwnd; //窗口句柄,即标示消息所属的窗口     
      UINT   message;//标示消息的类别,是鼠标还是键盘等 如鼠标左键按下消息是WM_LBUTTONDOWN,键盘按下消息是WM_KEYDOWN,字符消息是WM_CHAR
      WPARAM wParam;//消息的附加信息
      LPARAM lParam;//消息的附加信息
      DWORD  time;//消息投递到消息队列中的时间
      POINT  pt;//鼠标的当前位置
   } MSG;
 .消息队列每一个Windows应用程序开始执行后,系统都会为该程序创建一个消息队列,这个消息队列用来存放该程序创建的窗口的消息
 .进队消息(OS将产生的消息放在应用程序的消息队列中,让应用程序来处理)
  不进队消息(OS直接调用窗口的处理过程)
 .Windows应用程序的消息处理机制
  while(GetMessage(&msg,NULL,0,0)){//接收到WM_QUIT消息时,才返回0
     
TranslateMessage(&msg);//对消息进行包装处理然后再以消息的形式投放到消息队列
     
DispatchMessage(&msg);//消息回传给操作系统,由操作系统调用窗口过程函数对消息进行处理
 
}

(1)操作系统接收到应用程序的窗口消息,将消息投递到该应用程序的消息队列中。
2)应用程序在消息循环中调用GetMessage函数从消息队列中取出一条条的消息。取出后,以对消息进行一些预处理,如放弃对某些消息的响应,或者调用TranslateMessage产生新的消息
3)应用程序调用DispatchMessage,将消息回传给操作系统。消息是由MSG结构体对象来表示的,其中就包含了接收消息的窗口的句柄。因此,DispatchMessage函数总能进行正确的传递。4)系统利用WNDCLASS结构体的lpfnWndProc成员保存的窗口过程函数的指针调用窗口过程,对消息进行处理(即“系统给应用程序发送了消息”)。
 .窗口过程函数
   lresult callback windowproc(

        hwnd hwnd,          // 对应消息的窗口句柄

        uint umsg,           // 消息代码,区别消息的类型

        wparam wparam,      // 消息代码的附加参数1

        lparam lparam       // 消息代码的附加参数2

       );

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值