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()处理。
时间: 2024-12-14 18:44:47

Win32API 消息机制的相关文章

利用消息机制实现VC与Delphi之间的通讯(发送自定义消息)

摘要: 本文介绍了使用Windows消息机制实现由不同语言编制的程序之间的相互通讯.联系,并以当前较为流行的两种语言Microsoft Visual C++ 6.0和Borland delphi 5.0为对象,用这两种语言各编制一应用程序,并能很好的通过消息进行交互. 关键字:vc++.delphi.消息 一. 引言 编制较大型的程序往往需要将一个项目分割成若干个模块,由若干个开发小组共同完成.笔者曾参加过几个大型项目的研发工作,根据需要往往要将项目分为解为几大部分,分到三.四家科研单位共同完成

Broadcom的消息机制

在Broadcom中提供了自己的消息机制,有两种消息形式:Request/Response and Event(事件) Request/Response消息:进程之间的通信都是通过smd,所有的消息都是先发送到smd,smd收到信息后,如果消息目的是smd的就做相应的操作,如果不是,就把这个消息route出去 Event messages :对某些事件感兴趣的进程,可以CMS_MSG_REGISTER_EVENT_INTEREST注册此感兴趣事件.事件发生时,将事件信息发送给smd,smd再将事

Android的消息机制之ThreadLocal的工作原理

提到消息机制大家应该都不陌生,在日常开发中不可避免地要涉及到这方面的内容.从开发的角度来说,Handler是Android消息机制的上层接口,这使得开发过程中只需要和Handler交互即可.Handler的使用过程很简单,通过它可以轻松地将一个任务切换到Handler所在的线程中去执行.很多人认为Handler的作用是更新UI,这说的的确没错,但是更新UI仅仅是Handler的一个特殊的使用场景,具体来说是这样的:有时候需要在子线程中进行耗时的IO操作,这可能是读取文件或者访问网络等,当耗时操作

android 进程/线程管理(四)续----消息机制的思考(自定义消息机制)

继续分析handler 和looper 先看看handler的 public void dispatchMessage(Message msg) { if (msg.callback != null) { handleCallback(msg); } else { if (mCallback != null) { if (mCallback.handleMessage(msg)) { return; } } handleMessage(msg); } } 所以消息的处理分层三种,就是 1.传入一

深入Windows内核——C++中的消息机制

<编程思想之消息机制>一文中我们讲了消息的相关概念和消息机制的模拟,本文将进一步聊聊C++中的消息机制. 从简单例子探析核心原理 在讲之前,我们先看一个简单例子:创建一个窗口和两个按钮,用来控制窗口的背景颜色.其效果如下: 图 2 :效果图 Win32Test.h #pragma once #include <windows.h> #include <atltypes.h> #include <tchar.h> //资源ID #define ID_BUTTO

java:从消息机制谈到观察者模式

本文接编程思想之消息机制,读者可以结合编程思想之消息机制一起阅读,也可以直接从本文开始阅读. 从简单的例子开始 同样,我们还是先看一个简单例子:创建一个窗口实现加法的计算功能.其效果如下: 图1: 加法计算 Calculator.java: import javax.swing.*; import javax.swing.border.BevelBorder; import java.awt.*; import java.awt.event.ActionEvent; import java.aw

MFC消息机制

何谓消息.消息处理函数.消息映射?消息简单的说就是指通过输入设备向程序发出指令要执行某个操作.具体的某个操作是你的一系列代码.称为消息处理函数. 在SDK中消息其实非常容易理解,当窗口建立后便会有一个函数(窗口处理函数)开始执行一个消息循环,我们还可以清楚的看到消息处理的脉络.一个switch case语句就可以搞定,消息循环直到遇到WM_QUIT消息才会结束,其余的消息均被拦截后调用相应的处理函数. 但在封装了API的MFC中,消息似乎变的有些复杂了,我们看不到熟悉的switch case语句

(转载)Windows消息机制

文章出处:http://www.cnblogs.com/watsonyin/archive/2005/12/12/295536.html Windows消息机制 Windows操作系统最大的特点就是其图形化的操作界面,其图形化界面是建立在其消息处理机制这个基础之上的.如果不理解Windows消息处理机制,肯定无法深入的理解Windows编程.可惜很多程序员对Windows消息只是略有所闻,对其使用知之甚少,更不了解其内部实现原理,本文试着一步一步向大家披露我理解的Windows消息机制.可以说,

Android Framework 分析---消息机制Native层

在Android的消息机制中,不仅提供了供Application 开发使用的java的消息循环.其实java的机制最终还是靠native来实现的.在native不仅提供一套消息传递和处理的机制,还提供了自定义文件描述符的I/O时间的监听机制.下面我们从具体代码中分析一下. Native层的关键类: Looper.cpp.该类中提供了pollOnce 和wake的休眠和唤醒机制.同时在构造函数中也创建 管道 并加入epoll的机制中,来监听其状态变化. Looper::Looper(bool al