MFC 自定义消息

原创 2013年12月02日 15:06:21

消息映射、循环机制是Windows程序运行的基本方式。VC++ MFC 中有许多现成的消息句柄,可当我们需要完成其它的任务,需要自定义消息,
就遇到了一些困难。在MFC ClassWizard中不允许添加用户自定义消息,所以我们必须手动在程序中添加相应代码,以便可以象处理其它消息一样处理自定义消息。

自定义消息的步骤如下:
(1)建立Single Document的MFC Application,工程名为:MyMessage
(2)自定义消息:
第一步:定义消息
在Resource.h中添加如下代码:

//推荐用户自定义消息至少是UM_USER+100,因为很多新控件也要使用UM_USER消息。UM:User Message
#define UM_MY_MESSAGE (UM_USER+1)

第二步:声明消息处理函数
选择CMainFrame类中添加消息处理函数
在MainFrm.h文件中,类CMainFrame内,声明消息处理函数,代码如下:

protect:
    afx_msg LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam); 

第三步:实现消息处理函数
在MainFrm.cpp文件中添加如下代码:

LRESULT CMainFrame::OnMyMessage(WPARAM wParam, LPARAM lParam)
{
      //TODO: Add your message handle code
      return 0;
}

 第四步:在CMainFrame类的消息块中,使用ON_MESSAGE宏指令将消息映射到消息处理函数中

BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
    ON_WM_CREATE()
    ON_MESSAGE(UM_MY_MESSAGE,OnMyMessage)
    //ON_REGISTERED_MESSAGE (WM_MY_MESSAGE,OnMyMessage)
END_MESSAGE_MAP()

 如果用户需要一个定义整个系统唯一的消息,可以调用SDK函数RegisterWindowMessage定义消息:
在Resource.h中将代码

#define UM_MY_MESSAGE (UM_USER+1)

替换为:

static UINT UM_MY_MESSAGE=RegisterWindowMessage(_T("User"));

并使用ON_REGISTERED_MESSAGE宏指令取代ON_MESSAGE宏指令,其余步骤同上。
注:如果仍然使用ON_MESSAGE宏指令,compile可以通过,但是无法响应消息。
当需要使用自定义消息时,可以在相应类中的函数中调用函数PostMessage或SendMessage发送消息PoseMessage(WM_MY_MESSAGE,O,O)。

原来来自:http://www.cnblogs.com/xulei/archive/2007/11/22/968170.html,略有改动


MFC中自定义消息过程

这几天接触一个MFCdi
  • feilong911hao
  • feilong911hao
  • 2014年05月29日 10:36
  • 802

[每日一学]MFC学习笔记——自定义消息的使用

简单概要 windows的消息机制在前面的几章已经介绍过了,今天来学习一下自定义消息。 预备知识 看完前几章的文章。 具体步骤 新建一个工程,名称为“MyMe...
  • kingsollyu
  • kingsollyu
  • 2012年12月11日 12:05
  • 4550

MFC中自定义消息的步骤

 这篇技术文章不是讨论经典的MFC中的消息工作机理的,讨论消息工作原理、方式和路径的文章在网上和书本中 随处可见。网上众多的讨论都是关于如何响应并进行用户自定义消息映射的;网上还有一些文章...
  • ljsant
  • ljsant
  • 2016年07月11日 14:29
  • 747

MFC中用户自定义消息及其响应函数的方法

1.在对应类的头文件中自定义消息 如:#define WM_RESULT WM_USER+1 2.在头文件中定义消息响应函数,注意:这个函数的返回值必须是LRESULT 参数必须是 WPARAM ...
  • gukesdo
  • gukesdo
  • 2011年09月05日 20:53
  • 6896

【转载+修改】MFC 自定义消息四步曲与在参数中传递变量

今天自己也重学了一下 VC小自定义消息的使用,在网上查阅了相关资料,发现http://hi.baidu.com/atlight/blog/item/11ba969442df6218d21b70cd.h...
  • code_robot
  • code_robot
  • 2012年07月07日 16:08
  • 3480

MFC一一添加WM_USER自定义消息

有些时候,我们希望自定义一些消息响应函数来控制何时进行消息触发,或针对两个不同类或线程之间进行消息互动,这个时候自定义消息响应函数就起到很大作用了。那么如何添加自定义消息呢?具体分为以下几步: 如下是...
  • xuanyin235
  • xuanyin235
  • 2017年09月13日 21:15
  • 648

MFC下的多线程和自定义消息收发

不仅在MFC的程序中,其他设计库如qt,也会存在运行时界面卡死的问题,导致这个问题的原因是内部存在多次循环,界面更新函数处理不过来,消息队列阻塞。为解决这一问题,多线程是首选。也有通过在单线程循环中P...
  • qwtyuiop
  • qwtyuiop
  • 2014年11月17日 21:48
  • 1241

MFC用户自定义消息的使用

场景描述:MFC对话框程序中的picture控件中显示动态图像,并通过鼠标点击获取图像中任意像素的坐标。 首先创建自定义类,通过派生Cwnd类实现在picture控件中绘图从而显示图像,在该类中定义...
  • Kelvin_Yan
  • Kelvin_Yan
  • 2015年09月09日 15:00
  • 663

MFC 向指定窗口发送自定义消息

像MFC的窗口发送消息,可以进行自定义的动作行为,因此很多时候非常有用。   1. 在MSGDlg.h或者其他头文件中增加自定义自定义消息:#define WM_COUNT_MSG WM_USER...
  • penpenandtongtong
  • penpenandtongtong
  • 2014年01月21日 10:43
  • 18836

MFC 如何添加自定义消息及其响应函数

如果用户自定义的类要求响应普通的Windows消息(也就是以WM_开头,除了WM_COMMAND以外的消息,这类消息在WM_USER以下的是系统消息,WM_USER以上的可以由用户自己定义),那就要求...
  • Kevin_Samuel
  • Kevin_Samuel
  • 2012年11月08日 20:16
  • 1270
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MFC 自定义消息
举报原因:
原因补充:

(最多只允许输入30个字)