博客
关于我
windows消息机制(转)
阅读量:406 次
发布时间:2019-03-06

本文共 1702 字,大约阅读时间需要 5 分钟。

Windows 操作系统的编程模式以消息驱动为核心,这一机制直接影响了应用程序的设计与实现。本文将深入剖析Windows 消息机制及其在实际开发中的应用,重点探讨MFC(Microsoft Foundation Class)对消息处理的封装与扩展。

Windows 消息机制

消息的概念

消息是Windows操作系统用来通知应用程序特定事件发生的机制。例如,用户的鼠标点击或键盘按键按下都会触发相应的消息。每条消息都包含以下信息:

  • hwnd:指向发送消息的窗口句柄,决定了哪个窗口处理消息。
  • message:消息类型标识符。
  • wParamlParam:32位的附加信息,具体含义取决于消息类型。
  • time:消息发送的时间戳。
  • pt:鼠标在消息发送时的坐标。

消息循环

Windows应用程序通过消息循环来响应各种事件。消息循环的实现方式如下:

while (GetMessage(&msg, NULL, 0, 0)) {    TranslateMessage(&msg);    DispatchMessage(&msg);}
  • GetMessage:从消息队列中获取当前消息。
  • TranslateMessage:对消息进行预处理,尤其是处理键盘消息。
  • DispatchMessage:将消息分发给相应的窗口函数处理。

消息循环的终止条件是接收到WM_QUIT消息(通常由PostQuitMessage函数触发)。

消息处理

应用程序通过窗口函数来处理消息。Windows为每个窗口类提供了默认的窗口处理函数DefWindowProc,开发者可以通过switch语句对感兴趣的消息进行特定处理:

LRESULT CALLBACK WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {    switch (uMsg) {        case WM_TIMER: return 0;        case WM_LBUTTONDOWN: return 0;        default: return DefWindowProc(hwnd, uMsg, wParam, lParam);    }}

对于每条消息,处理函数必须返回0,否则消息会被重复发送。

MFC 消息映射

MFC 消息映射实现

MFC通过宏定义和消息映射表来简化消息处理。开发者只需在类中声明消息映射,并在实现中使用特定宏定义:

BEGIN_MESSAGE_MAP(CMyClass, CBaseClass)    ON_COMMAND(ID_EDIT_COPY, OnEditCopy)    // 其他消息映射END_MESSAGE_MAP()

MFC会将消息映射表中的消息类型与对应的处理函数关联,并通过SendMessage函数触发这些处理函数。

MFC 消息分类

MFC对消息类型进行了扩展分类:

  • 命令消息(WM_COMMAND):处理如菜单单击、工具栏点击等事件。
  • 标准消息(WM_XXX):处理窗口生命周期相关消息,如WM_CREATEWM_DESTROY
  • 通告消息(WM_NOTIFY):处理控件状态变化消息,如TCN_SELCHANGE
  • 自定义消息:允许开发者定义和处理特定场景下的消息。
  • 消息的灵活运用

    通过示例程序可以直观体验MFC消息处理的灵活性。程序设计如下:

    • 对话框包含一个CTabCtrl和一个CComboBox控件,两个按钮用于触发不同类型的消息。
    • 每个按钮单击调用SendMessage函数发送特定消息:
      • TCN_SELCHANGE消息:通过WM_NOTIFY发送。
      • CBN_SELCHANGE消息:通过WM_COMMAND发送。

    总结

    Windows 消息机制是其编程模式的核心,MFC通过对消息机制的封装,大大简化了开发过程。本文通过理论分析和实例演示,揭示了如何利用MFC的消息映射和命令响应机制,高效完成实际开发任务。掌握了Windows消息机制和MFC的使用方法,开发者能够更高效地构建用户友好的应用程序。

    转载地址:http://mfbkz.baihongyu.com/

    你可能感兴趣的文章
    Objective-C实现图形着色算法(附完整源码)
    查看>>
    Objective-C实现图片dilation operation扩张操作算法(附完整源码)
    查看>>
    Objective-C实现图片erosion operation侵蚀操作算法(附完整源码)
    查看>>
    Objective-C实现图片格式转换(附完整源码)
    查看>>
    Objective-C实现图片的放大缩小(附完整源码)
    查看>>
    Objective-C实现图片腐蚀(附完整源码)
    查看>>
    Objective-C实现图片膨胀(附完整源码)
    查看>>
    Objective-C实现图片转化为 ASCII图(附完整源码)
    查看>>
    Objective-C实现图的拓扑序列(附完整源码)
    查看>>
    Objective-C实现图的邻接矩阵(附完整源码)
    查看>>
    Objective-C实现图结构(附完整源码)
    查看>>
    Objective-C实现圆球的表面积和体积(附完整源码)
    查看>>
    Objective-C实现在list中找到next greatest element下一个更大元素算法(附完整源码)
    查看>>
    Objective-C实现在Regex的帮助下检查字谜算法(附完整源码)
    查看>>
    Objective-C实现在指定区间 [a, b] 中找到函数的实根,其中 f(a)*f(b) < 0算法(附完整源码)
    查看>>
    Objective-C实现均值滤波(附完整源码)
    查看>>
    Objective-C实现埃拉托斯特尼筛法算法(附完整源码)
    查看>>
    Objective-C实现埃拉托色尼筛法(附完整源码)
    查看>>
    Objective-C实现域名解析(附完整源码)
    查看>>
    Objective-C实现域名转IP(附完整源码)
    查看>>