Windows消息机制

在Windows中,用户或系统中所发生的任何活动被当作事件来处理,例如,用户按下了鼠标按钮,就产生一鼠标事件。对于所发生的每一个事件,Windows将其转换成消息的形式放在一个称为消息队列的内存区中,然后由Windows的消息发送程序选择适合的对象,将消息队列中的消息发送到欲接受消息的对象上。Windows的消息可分为四种类型:  
    (1)输入消息:对键盘和鼠标输入作反应。这类输入消息首先放在系统消息队列中,然后Windows将它们送入应用程序的消息队列,使消息得到处理。  
    (2)控制消息:用来与Windows的特殊控制对象,例如,对话框、列表框、按钮等进行双向通信。这类消息一般不通过应用程序的消息队列,而是直接发送到控制对象上。  
    (3)系统消息:对程式化的事件或系统时钟中断作出反应。有些系统消息,例如大部分DDE消息(程序间进行动态数据交换时所使用的消息)要通过Windows的系统消息队列。而有些系统消息,例如窗口的创建及删除等消息直接送入应用程序的消息队列。  
    (4)用户消息:这些消息是程序员创建的,通常,这些消息只从应用程序的某一部分进入到该应用程序的另一部分而被处理,不会离开应用程序。用户消息经常用来处理选单操作:一个用户消息与选单中的一选项相对应,当它在应用程序队列中出现时被处理。  
    Windows应用程序通过执行一段称为消息循环的代码来轮询应用程序的消息队列,从中检索出该程序要处理的消息,并立即将检索到的消息发送到有关的对象上。典型的Windows应用程序的消息循环的形式为:  
   
    MSG  msg;  
    while   (GetMessage(&msg,   NULL,   0,   0L))  
    {  
      TranslateMessage(&msg);  
      DispatchMessage(&msg);  
    }  
   
    函数GetMessage从应用程序队列中检索出一条消息,并将它存于具有MSG类型的一个变量中,然后交由函数TranslateMessage对该消息进行翻译,紧接着,函数DispatchMessage将消息发送到适当的对象上。 

关于自定义消息的参数

自定义消息如果光是消息那只能是一个通知。  
  你知道什么时候该干什么事了。但是有的情况下需要具体的数据。这样参数就起作用了。  
  比如说要在消息处理中填充一个结构。  
  如struct   mystruct{  
  int   i;  
  char   buf[255];  
  }  
  可以把这个结构的一个指针强制转换为long  ,即(lparam)&mystruct,然后做为消息参数进入消息处理函数。   其他结构可以此类推。
  消息处理函数只要将WParam   或是LParam   强制转换为mystruct   *   就可以只用这个结构指针。可以为这个结构中的成员附值。或是使用这个结构中的数据。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Windows消息机制是指在Windows操作系统中,用于实现应用程序之间的通信和事件处理的机制。每个消息都由一个消息标识符和一些相关的参数组成。当系统中发生某个事件时,Windows会将这个事件转化为一个消息,并将其放入消息队列中。应用程序通过接收消息并将其传递给适当的窗口过程来处理这些消息。 在Windows消息机制中,每个线程都有自己的消息队列。GUI线程通常拥有一个消息循环,负责接收和处理消息消息循环会不断从消息队列中获取消息,并将其翻译和分发给对应的窗口过程进行处理。 除了通过消息队列派发消息到窗口过程外,有些消息也可以直接发送到窗口过程进行处理,绕过消息队列和线程消息队列。例如,当用户激活一个新的应用程序窗口时,系统会直接发送一系列消息到窗口,包括WM_ACTIVATE、WM_SETFOCUS和WM_SETCURSOR等消息,用于通知窗口被激活、键盘输入被定向到窗口以及鼠标光标移到窗口的边界内。 因此,Windows消息机制是通过将事件转化为消息并通过消息队列进行传递,以实现应用程序之间的通信和事件处理的机制。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Windows消息机制](https://blog.csdn.net/King_weng/article/details/100072633)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值