MFC自定义消息

MFC中自定义消息 【转】MFC中用户自定义类响应自定义消息   2009-08-13 17:15:11|  分类: MFC学习 |  标签: |字号大中小 订阅 这篇技术文章不是讨论经典的MFC中的消息工作机理的,讨论消息工作原理、方式和路径的文章在网上和书本中 随处可见。网上众多 阅读详情

MFC自定义消息


在编写多界面之间的通信时,MFC是基于消息以及消息响应的机制。本篇学习笔记则简单总结一下MFC下实现多界面(多线程)之间的通信时的自定义消息。

Windows应用程序是消息驱动的。在MFC软件开发中,界面操作或者线程之间通信都会经常用到消息,通过对消息的处理实现相应的操作。比较典型的过程是,用户操作窗口,然后有消息产生,送给窗口的消息处理函数处理,对用户的操作做出响应。

一、消息:

1.标准Windows消息。除WM_COMMAND外以WM_开头的消息是标准消息。例如,WM_CREATE、WM_CLOSE。

2.命令消息。消息名为WM_COMMAND,消息中附带了标识符ID来区分是来自哪个菜单、工具栏按钮或加速键的消息。

3.通知消息。通知消息一般由列表框等子窗口发送给父窗口,消息名也是WM_COMMAND,其中附带了控件通知码来区分控件。 

用户自定义消息是实际上就是用户定义一个宏作为消息,此宏的值应该大于等于WM_USER,然后此宏就可以跟系统消息一样使用,窗口类中可以定义它的处理函数。

二、消息映射表:

C++代码
1.  BEGIN_MESSAGE_MAP(CMainFrame, CFrameWndEx)  
2.      ON_WM_CREATE()  
3.      ON_COMMAND(ID_VIEW_CUSTOMIZE, &CMainFrame::OnViewCustomize)  
4.      ON_REGISTERED_MESSAGE(AFX_WM_CREATETOOLBAR, &CMainFrame::OnToolbarCreateNew)  
5.      ON_COMMAND_RANGE(ID_VIEW_APPLOOK_WIN_2000, ID_VIEW_APPLOOK_WINDOWS_7, &CMainFrame::OnApplicationLook)  
6.      ON_UPDATE_COMMAND_UI_RANGE(ID_VIEW_APPLOOK_WIN_2000, ID_VIEW_APPLOOK_WINDOWS_7, &CMainFrame::OnUpdateApplicationLook)  
7.      ON_WM_SETTINGCHANGE()  
8.  END_MESSAGE_MAP()  

 在BEGIN_MESSAG_MAP和END_MESSAGE_MAP之间的内容成为消息映射入口项。消息映射除了在CMainFrame的实现文件中添加消息映射表外,在类的定义文件MainFrm.h中还会添加一个宏调用:

DECLARE_MESSAGE_MAP()

一般这个宏调用写在类定义的结尾处。

三、添加消息处理函数

       如何添加消息处理函数呢?不管是自动还是手动添加都有三个步骤:

       1.在类定义中加入消息处理函数的函数声明,注意要以afx_msg打头。例如MainFrm.h中WM_CREATE的消息处理函数的函数声明:afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);。

       2.在类的消息映射表中添加该消息的消息映射入口项。例如WM_CREATE的消息映射入口项:ON_WM_CREATE()。

       3.在类实现中添加消息处理函数的函数实现。例如,MainFrm.cpp中WM_CREATE的消息处理函数的实现:

          intCMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
         {
                 ......
         }

      通过以上三个步骤以后,WM_CREATE等消息就可以在窗口类中被消息处理函数处理了。下面按照这三步来介绍自定义消息及其响应的过程。

本例实现子界面中点击按钮控制主界面中的功能。

1.    首先在resources.h或者stdafx.h中添加自定义消息:

#define WM_MY_MESSAGE1 (WM_USER+100)//自定义消息宏
#define WM_MY_MESSAGE2 (WM_USER+101)//自定义消息宏
#define WM_MY_MESSAGE3 (WM_USER+102)//自定义消息宏
#define WM_MY_MESSAGE4 (WM_USER+103)//自定义消息宏
#define WM_MY_MESSAGE5 (WM_USER+104)//自定义消息宏

2.    给子界面中的按钮添加一个按钮响应函数(其过程实际上也是添加一个消息响应机制)。在这个响应函数里添加如下代码,实现发送WM_MY_MESSAGE1消息至主界面。

    CWnd *active = GetActiveWindow();
    if (active!=NULL)
    {
       active->PostMessage(WM_MY_MESSAGE1,0,0);
    }

3.    在主界面的消息映射表中添加消息映射:

BEGIN_MESSAGE_MAP(CMainFrame, CFrameWndEx)
    ON_WM_SIZE()
    ON_WM_CREATE()
    ON_MESSAGE_VOID(WM_MY_MESSAGE1,OnGorun) //添加消息映射
END_MESSAGE_MAP()

4.    在主界面的.h文件中添加该响应函数的声明,并在.cpp文件中添加定义。

afx_msg void  OnGorun(WPARAM, LPARAM);
 
void CMainFrame::OnGorun(WPARAM wParam, LPARAM lParam)
{
    inta=1,b=4;
    a= a+b;
}


MFC中使用自定义消息   消息映射、循环机制是Windows程序运行的基本方式。VC++ MFC 中有许多现成的消息句柄,可当我们需要完成其它的任务,需要自定义消息,就遇到了一些困难。在MFC ClassWizard中不允许添加用户自定义消息,所以我们必须在程序中添加相应代码,以便可以象处理其它消息一样处理自定义消息。通常的做法是采取以下步骤:  第一步:定义消息。  推荐用户自定义消息至少是WM_USER+100,因 阅读详情

相关推荐

MFC自定义消息:实现MFC子窗口向父窗口发送消息的功能

在MFC中,使用用户自定义消息,子窗口向父窗口发送消息过程、代码: 在需要接收消息的父窗口头文件(xxx.h)中增加定义,也可以在其他头文件中定义,但是要记得引入 //自定义DMTIDRegDlg到主窗口的消息 #define WM_MYMSG WM_USER+2 在父窗口的头文件(xxx.h)文件中,声明消息的处理函数: //自定义消息的处理函数声明 protected: afx_msg LRESULT InsPackMessage(WPARAM wParam, LPARAM lParam

weixin_40721097的博客 2157

MFC开发,自定义消息

基于MFC消息机制实现自定义消息

LWD的博客 1399

MFC 在自定义类中向MFC窗口发送消息

在MSGDlg.h或者其他头文件中增加自定义自定义消息:#define WM_COUNT_MSG WM_USER+100 在MSGDlg.h头文件中添加消息处理函数的声明 afx_msg LRESULT OnCountMsg(WPARAM,LPARAM); 在CMSGDlg类实现文件MSGDlg.cpp中的消息映射表中加入自定义消息映射: BEGIN_MESSAGE_MAP(CMSGDlg, CDialog) ON_WM_PAINT() ON_MESSAGE(WM_CO..

wqc的博客 1284

MFC 自定义消息

MFC 自定义消息四步曲1. 定义全局变量或宏#define WM_MyMessage (WM_USER + n) n为数字到少大于100或者用 const UINT WM_MYMESSAGE = WM_USER + n一般可以加在stdafx.h 或resource.h 或*.app.h中。他们都是全局变量头文件所以都可以.2. 在所在类的*.H文件增加消息函

djf_1985的专栏 1254

MFC实现自定义消息(附完整源码)

MFC实现自定义消息(附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 805

MFC 自定义消息实现

参看http://blog.youkuaiyun.com/wangshiqilin_fjy/article/details/14458843

MFC模拟消息发送,自定义以及系统消息

在有些时候系统定义的消息不能完全满足程序的应用,这时候就需要进行消息自定义了,那么该如何实现自定义消息呢?在MFC框架下,分配了WM_USER之后的消息都是开发人员可以自定义的消息ID。,消息ID号是:WM_USER+1如果要是你的程序中只存在了一两个自定义消息,就没有必要写成上面的格式了。这种格式的好处:可以根据功能划分自定义消息区域。假设你目前正在开发一个仅供公司内部使用的基础框架类,在自定义消息的时候,需要区分哪些是自己开发使用的,哪些是对外开发者调用的。分工明确,不容易消息错乱。

糯诺诺米团 1785

langchain4j+milvus实战

本文主要研究一下如何使用langchain4j来对接向量数据库milvus。

go4it 1474

MFC中用户自定义类响应自定义消息

所以,又一个重要的结论,在自定义类能够处理任何消息之前一定要确保m_hWnd关联到一个窗体,即便这个窗体是不可见的。那么有人说,在自定义类的构造函数中调用Create函数就行了,不错,当然也可以在别处调用,只要确保在消息发送之前。但是,Create的调用很有说法,要注意两个地方,第一个参数是类的名称,我建议最好设为NULL;第五个参数是父窗体对象的指针,这个函数指定的对象一定要存在,我建议最好为整个程序的主窗体。还有很多人问第六个参数的意义,这个参数关系不大,是子窗体ID,用于传给父窗体记录以便识别。

csdndenglu的专栏 897

使用FileZilla在武汉大学IGS数据分析中心下载GNSS数据

2.依次点击如下图标下载到本地并解压安装(按系统选择要下载的版本)

qq_43381998的博客 6042

Python爬招聘网站:Selenium+ActionChains破解滑动验证码,批量采集岗位数据(新手可跑)

通过本文实战,你不仅学会了用Selenium+ActionChains破解滑动验证码,还掌握了爬虫的核心优化思路——“模拟人类行为”是突破反爬的关键。这套逻辑不仅适用于招聘网站,还能迁移到其他有滑动验证码的平台(如电商、资讯网站)。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1188

浅析MFC自定义消息

1、使用场景 通过点击按钮,来实现数据的更新,这个过程在MFC中是由消息机制来实现的,但是如果我想点击对话框中的按钮,在不关闭对话框的情况下更新数据,这就要使用到自定义消息 2、使用方法 1、消息一般都包含消息名称和消息所传递的数据,所以第一步当然是:定义消息名称和消息的数据 #define WM_USER_APPLY WM_USER+0x100 //定义消息名称 typedef struct tagELLPROP { //消息所附带的数据包 /*int nWidth; int nHeight; i

LAZYPET BLOG 568

YOLOv8模型压缩终极方案:LAMP剪枝实战,速度提升不掉点

一个庞大的模型虽然强大,但在实际部署,尤其是资源受限的边缘设备(如无人机、移动电话、嵌入式系统)上,却面临着严峻的挑战:高昂的内存占用、巨大的计算量以及随之而来的高延迟和高能耗。本教程从LAMP剪枝的深刻理论出发,详细解释了它如何通过最小化最坏情况下的L2失真,并借助巧妙的数学简化,最终推导出一种高效、无超参数、层自适应的剪枝策略。它如同为臃肿的模型进行一次精准的“瘦身手术”,通过移除网络中冗余或不重要的权重、神经元甚至整个结构,来显著降低模型的参数量和计算量(FLOPs),从而实现推理加速和资源节约。

LXY_LOVE36的博客 176

MFC自定义消息的实现方法

一、概述: 消息机制是windows程序的典型运行机制,在MFC中有很多已经封装好了的消息,如WM_BTN**等。但是在有些特殊情况下我们需要自定义一些消息去完成一些我们所需要的功能,这时候MFC的向导不能帮助我们做到这一点。对此,我们可以通过添加相应的代码去完成这个功能。 二、实现方法: 添加自定义消息操作如下: 1. 建立MFC工程,如基于对话框的应用程序,Test。 2. 在资源中添加...

u011555996的博客 692

Opencv计算机视觉PPT-算法篇

01 02 03 04 05 06 07 08 09 010 011 012 013 014 015 016 017 018

Qt历险记,专注Qt技术,三年医疗设备研发经验,1年机器视觉研发经验,半年柔性传感研发经验。 205

【WorkBuddy专栏19】技能的创造与迁移——从零开始打造你的AI工作流

【WorkBuddy专栏19】技能的创造与迁移——从零开始打造你的AI工作流

AI人人懂 376

MFC自定义消息发送和界面挂载

实现窗口拆分后MFC自定义消息发送和界面挂载 有部分类的定义在MFC静态拆分窗口中:https://blog.youkuaiyun.com/u014151564/article/details/109667552 1、在 CMainFrame.h 中,添加自定义消息宏 //WM_USER 是用户自定义消息的一个起始值 //WM_USER+100是为了区分系统消息和用户消息,避免冲突 #define NM_A (WM_USER + 100) #define NM_B (WM_USER + 101) #define N

学Java的LC的博客 1478

Cadence Orcad Capture原理图断线的检查与避免方法

在设计电路图中,尤其是直接借鉴别人的设计进行二次开发的过程中难免会遇到如下尴尬的情况。有没有眼神好的朋友发现图纸的哪里有不对劲的地方呢?

fydar的博客 3269

MFC自定义消息映射

MFC自定义消息映射 本文章适用于刚开始学习mfc的同学进行阅读。如果文章里面由缺陷,希望阅读者能给予批评与指正。谢谢! 正文 MFC的消息映射,运用了STL标准模板库中的map,运用map的一一映射的特性来进行实现的。 先说一下,我之前学习mfc比较懵的位置,就是那个文件我都不知道哪里的操作该写到那个文件里面去。(是不是感觉我很笨笨哒?) 这是我的理解,如果与大家的不同,或者有哪里不对的地方,希...

weixin_43677716的博客 627

华为OD机试 - 天然蓄水库(Java 2025 A卷 100分)

例如,当山脉为s = [3, 1, 2]时,则选取s[0]和s[2]作为水库边界,则蓄水量为1,此时输出:0 2:1。选取下标 0(高度 3)与 2(高度 2)为边界,水位为 min(3,2)=2;选取山脉上两个点作为蓄水库的边界,则边界内的区域可以蓄水,蓄水量需排除山脉占用的空间。经过分析,选取s[1]和s[6]时,水库蓄水量为19(3 + 7 + 4 + 5)。当存在合理的水库边界时,输出左边界、空格、右边界、英文冒号、蓄水量;当山脉`s = [3, 2, 1]时,不存在合理的边界,此时输出:0。

学Java,找哪吒 939

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

c++MFC自定义消息的方法

下面我们给大家介绍一下c++MFC自定义消息的方法吧!定义一个自定义消息号:const UINT WM_MYMESSAGE = WM_USER + n; // 自定义消息一般大于WM_USER,然后就可以为该消息添加映射了。 afx_msg LRESULT OnMyMessage ( WPARAM wParam, LPARAM lParam ); ON_MESSAGE ( WM_MYM

qq_31209383的博客 1366

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

上一篇: MFC创建可停靠与浮动窗口
下一篇: MFC界面美化
bjtuwayne
博客等级 码龄12年 370粉丝 81原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bjtuwayne

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值