zoukankan      html  css  js  c++  java
  • MFC:基础篇 第三章 MFC消息映射机制

    一.简介

    Windows应用程序的输入由Windows系统以消息的形式发送给应用程序的窗口.这些窗口通过窗口过程来接收和处理消息,然后把控制权还给Windows

    二.消息的分类

    1.队列消息和非队列消息

    从消息的发送途径上看,消息分两种:队列消息和非队列消息

    队列消息送到系统消息队列,然后到线程消息队列,最后送给目的窗口过程

    非队列消息直接送给目的窗口过程

    Windows维护一个系统消息队列(System message queue),每个GUI线程有一个线程消息队列(Thread message queue)

    除了键盘 鼠标消息 WM_PAINT WM_TIMER WM_QUIT消息以外,其他消息大多数都是非队列消息

    2.系统消息和应用程序消息

    从消息来源来看,可以分为系统定义的消息和应用程序定义的消息

    三.消息结构

    typedef struct tagMSG{

      HWND hwnd,      // 接收消息的窗口句柄

      UINT messag,       // 消息标识(ID)

      WPARAM wParam,    // 第一个消息参数

      LPARAM lParam,    // 第二个消息参数

      DWORD time,      // 消息产生的时间

      POINT pt        // 消息产生时鼠标的位置

    }MSG;

    四.接收消息

    while (GetMessage(&msg, NULL, NULL, NULL))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    return msg.wParam.

    五.处理消息

    应用程序通过窗口过程来处理消息

    LRESULT CALLBACK MainWndProc{

      HWND hwnd,    // 窗口句柄

      UINT msg,      // 消息表示 

      WPARAM wParam,  // 消息参数

      LPARAM lParam   // 消息参数

    }  

    六.MFC消息映射

    MFC主要处理三类消息:

    (1) Windows消息 : 以 WM_ 开头的消息,除了 WM_COMMAND 消息例外

    (2) 控制通知消息 : 是控制子窗口送给父窗口的 WM_COMMAND 通知消息

    (3) 命令消息 : 这是来自菜单 工具条按钮 加速键等用户接口对象的 WM_COMMAND 通知消息

    在类的头文件里面,增加消息处理函数的声明之外,添加一行声明消息映射的宏定义 DECLARE_MESSAGE_MAP

    在类的源文件里面,实现消息处理函数之外,添加 BEGIN_MESSAGE_MAP() ... END_MESSAGE_MAP()

  • 相关阅读:
    STL:set/multiset用法详解
    STL:list用法详解
    STL:deque用法详解
    STL:vector容器用法详解
    Axure RP chrome插件显示已损坏或者无法安装的解决方法
    怎样知道自己机器的出口网关IP(即外部IP)
    [Selenium]怎样验证页面是否有无变化
    [Selenium]刷新页面 Refresh page
    [SoapUI]怎样获取隐藏元素的文本内容Get text of hidden element
    [SoapUI]怎样从应答报文中获取某个字段的值,然后用其改写某个变量
  • 原文地址:https://www.cnblogs.com/k5bg/p/11214592.html
Copyright © 2011-2022 走看看