MFC用户自定义消息

之前做过佳能相机和位移平台的额二次开发,当时遇到一个棘手的问题,就是位移平台如何知道相机已经拍完照了,或者相机如何知道位移平台已经运行到指定位置,当时为了方便采用了定时器来定时检测位移平台的位置,结果在后续的工作中引起了各种意想不到的错误。其实用户自定义消息之前了解过,由于之前编程一直没用到过,所以没去深入研究,主要也是自己偷懒怕麻烦。偷懒这个坏习惯必须要改,就像这次的相机开发一样,遇到问题没有去解决而采取回避方式,最终给自己带来了更大的麻烦。其实用户自定义消息并不是一件特别麻烦的事情。

在MFC应用程序中传输的消息有三种类型:窗口消息、命令消息和控件通知。

(1)窗口消息:WM_XXX

窗口消息(Window Message)一般与窗口的内部运作有关,如:创建窗口、绘制窗口和销毁窗口等。通常,消息是从系统发送到窗口,或从窗口发送到窗口。

(2)命令消息:WM_COMMAND

命令消息一般与处理用户请求相关,当用户单击一个菜单项或工具栏时,命令消息产生,并被发送到能处理该请求的类对象(如:装载文件、编辑文本和保存选项等)。

(3)控件通知:有多种格式       通常,控件通知在某些重要事件发生时,由控件窗口发送到父窗口,如打开一个组合框。控件通知为父窗口进一步控制子窗口提供了机会。例如,打开一个组合框时,父窗口可以用组合框初建时得不到的消息填充它。

BN_XXXX是CButton产生的消息,EN_XXXX是CEdit产生的消息,等等。

消息映射、循环机制作为Windows程序运行的基本方式。在MFC中我们必须手动在程序中添加相应代码,以便可以象处理其它消息一样处理自定义消息。

自定义消息步骤:

首先在源文件中定义一个消息的ID

#define WM_USERMESSAGE WM_USER+100

其次就是定义接收消息的函数

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

在DECLARE_MESSAGE_MAP()语句之前,一对AFX_MSG之间加上如下形式的函数原型:

afx_msg LRESULT OnProcName( WPARAM wParam, LPARAM lParam);

然后在实现文件中加上接受消息映射的宏

在cpp文件里,BEGIN_MESSAGE_MAP语句之后,在一对BEGIN_MESSAGE_MAP(ThisClass, BaseClass)与END_MESSAGE_MAP()之间,增加 如下形式的代码:

          ON_MESSAGE(WM_USERMESSAGE, OnProcName)

最后就是用户发送消息了

这里有两种方式PostMessage();SendMessage();两种方式略有区别。

时间: 2024-10-02 09:24:37

MFC用户自定义消息的相关文章

在MFC中添加用户自定义消息

在MFC中添加用户自定义消息 (2009-03-23 13:44:18) 转载▼ 标签: mfc 消息 自定义消息 it 分类: 计算机编程 首先弄清楚两点: (1)谁要发送这个消息(2)谁要接受这个消息. 用一个简单的例子来说明.对象A向B(也可以就是A到A)发送消息. 1 发送消息 首先在A的头文件中定义这个消息: #define WM_USERMESSAGE WM_USER+30 所有自定义消息都是以WM_USER消息为基础加上一个任意的自然数来表示的.A是向外发送消息的对象,因此在A的某

再探MFC(七)用户自定义消息

用途 回调函数通信 子对话框与父对话框通信,子对话框间通信 线程通信 用户自定义消息使用 step1 定义消息ID 例如Resource.h #define                LBD_SET_CALL_STATE_MESSAGE                (WM_USER+100) step2 消息处理 类视图选中要发往消息的对话框类,在属性视图中重写WindowProc 在TODO下添加代码处理用户自定义消息 switch (message) { caseLBD_SET_CAL

MFC发送自定义消息-PostMessage和SendMessage

PostMessage:把消息投放到线程的消息队列,不能消息被处理就立即返回SendMessage:消息被处理完后才返回 几种发送消息的写法:   ::PostMessage(GetSafeHwnd(), WM_USER_THREADEND, 0, 0); //GetSafeHwnd()表示得到当前窗口句柄,所以这条语句是发送给当前窗口   GetParent()->PostMessage(WM_USER_THREADEND, 0, 0);//发送给父窗口    this->PostMessa

win32 用户自定义消息范围

WINDOWS自定义消息WM_USER和WM_APP WM_USER常量是Windows帮助应用程序定义私有窗口类里的私有消息,通常使用WM_USER+一个整数值,但总值不能超过0x7FFF. #define WM_USER       0x0400                  -->1024 WM_APP常量是Windows帮助应用程序定义私有消息,通常使用WM_APP+一个整数值,但总值不能超过0xBFFF. #define WM_APP       0x8000           

MFC的自定义消息的定义与使用

自定义消息的响应和资源消息的响应有很多类似之处:资源消息的响应是以资源的ID号作为标识的:自定义的消息要自己声明消息ID. 一.           定义: 第一步要声明消息: #define WM_MYMSG  WM_USER+200 第二步要在类声明中声明消息映射: DECLARE_MESSAGE_MAP() 第三步要在类声明中定义消息处理函数: afx_msg LRESULT MyMsgHandler(WPARAM,LPARAM); 在.cpp中做的工作: 第四步要实现消息映射: BEGI

MFC动态按钮的创建及其消息响应(自定义消息)

动态按钮(多个)的创建: 1.在类中声明并定义按钮控件的ID #define IDC_D_BTN 10000 2.在类的OnInitDialog()函数中动态创建按钮(建立按钮对象时最好建立对象的指针) 3.手动释放对象指针 下面是动态生成多个按钮的例子: CButton* btn = new CButton[5]; DWORD dwStyle = WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON; for(int i = 0; i < 5; i++) { btn[i]

MFC 如何添加自定义消息

MFC 如何添加自定义消息 分类: MFC2012-08-17 18:21 561人阅读 评论(0) 收藏 举报 mfcnullwindowsuser工作command MFC如何添加自定义消息   MFC自定义消息 图解VC添加自定义消息 MFC激活自定义消息 如果用户自定义的类要求响应普通的Windows消息(也就是以WM_开头,除了WM_COMMAND以外的消息,这类消息在WM_USER以下的是系统消息,WM_USER以上的可以由用户自己定义),那就要求自定义的类必须从CWnd中派生.这是

MFC动态按钮的创建及其消息响应 和 自定义消息

原文链接: http://www.cnblogs.com/gaohongchen01/p/4046525.html 动态按钮(多个)的创建: 1.在类中声明并定义按钮控件的ID #define IDC_D_BTN 10000 2.在类的OnInitDialog()函数中动态创建按钮(建立按钮对象时最好建立对象的指针) 3.手动释放对象指针 下面是动态生成多个按钮的例子: CButton* btn = new CButton[5]; DWORD dwStyle = WS_CHILD | WS_VI

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

这篇技术文章不是讨论经典的MFC中的消息工作机理的,讨论消息工作原理.方式和路径的文章在网上和书本中随处可见.网上众多的讨论都是关于如何响应并进行用户自定义消息映射的:网上还有一些文章介绍如何在自定义类中响应Windows消息,在本文中都简略叙述.但是,网上大部分的文章没用透彻阐述如何在用户自定义类中响应自定义消息这一通用方法. 问题定义如下:用户自定义一个类,这个类不一定要有界面(完全可以是不可视的),要求自定义的类可以响应某个自定义消息. 首先能够响应消息的类必须都从CCmdTarget类中