zoukankan      html  css  js  c++  java
  • 如何在MFC对话框之间自定义消息传递

      在MFC项目开发中,涉及到不同模块间数据信息的传递,如用户在登录界面成功登录后向系统管理模块发送用户名和密码等信息。

      首先,需明确以下两点:

    • 谁要发送这个消息--消息发送方
    • 谁要接受这个消息--消息接收方

      本文以对象A向对象B发送消息为例进行讲解,具体如下:

    1.消息发送方:发送消息

      首先在A的头文件(*.h)中自定义这个消息:

    1 #define WM_MyMessage WM_USER+100

    或者: 

    1 const UINT WM_MYMESSAGE = WM_USER + n

     需注意以下几点: 

    • 所有自定义消息都是以WM_USER消息为基础加上一个任意的自然数n来表示的,

      n一般至少大于100

    • 该消息一般加在stdafx.h 或resource.h 或*.h中,一般都是全局变量头文件

    • A是向外发送消息的对象,因此在A的某个方法(函数)里就会调用用来发消息的函数B::SendMessage()/B::PostMessage(),因为是B接受消息。

    2.消息接收方:接受消息

      消息接收方对象接受一个消息,需有以下三部分:

    • 在头文件(*.h)中有该消息的处理函数的原型;
    • 在实现文件(*.cpp)中有接受消息映射的宏;
    • 在实现文件(*.cpp)中有该消息的处理函数的具体实现。

    2.1 头文件中加上自定义消息的处理函数原型

      DECLARE_MESSAGE_MAP()语句之前,加如下形式的函数原型:

    1 afx_msg LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam);

    对Win32来说,wParam, lParam是传递消息最常用的手段。

    2.2 实现文件中加上接受消息映射的宏

      在cpp文件里,BEGIN_MESSAGE_MAP语句之后,加如下形式的代码:

    1 ON_MESSAGE(WM_MyMessage, OnMyMessage)

     也就是说WM_MyMessage消息对应OnMyMessage函数。注意,上面是不用分号结尾的。

    2.3 在实现文件中给出消息处理函数的具体实现

    1 LRESULT CBDlg::OnMyMessage( WPARAM wParam, LPARAM lParam )
    2 {
    3     //处理用户自定义消息
    4     ......
    5     return 0;
    6 }

     

  • 相关阅读:
    crowd在更改IP后无法登录的问题
    VMware虚拟机中为Linux 添加虚拟硬盘(VirtualBox方法类似)
    虚拟机virtualbox中挂载新硬盘
    下载谷歌浏览器(Chrome)扩展离线安装包crx文件最简单的方法
    Chrome神器Vimium快捷键学习记录
    Chrome好用的扩展插件
    虚拟内存,MMU/TLB,PAGE,Cache之间关系
    ARM“庖丁解牛”之存储器管理单元MMU
    MMU——存储器管理单元
    我的vim配置---jeffy-vim-v2.3.tar
  • 原文地址:https://www.cnblogs.com/whl2012/p/4746576.html
Copyright © 2011-2022 走看看