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()

  • 相关阅读:
    Shell脚本查看apk签名信息
    Android Studio中的六种依赖
    Gradle build设置自动log开关
    转-Android Studio系列教程六--Gradle多渠道打包
    经验分享
    Android Studio build dex jar
    iPhone6搜索如何打开?详细使用方法
    Android Studio 简单设置
    Android Studio常见问题 -- uses-sdk:minSdkVersion 8 cannot be smaller than version 9 declared in library
    iOS开发学习记录【整理】
  • 原文地址:https://www.cnblogs.com/k5bg/p/11214592.html
Copyright © 2011-2022 走看看