自定义消息的响应和资源消息的响应有很多类似之处;资源消息的响应是以资源的ID号作为标识的;自定义的消息要自己声明消息ID。

一.           定义:

第一步要声明消息:

#define WM_MYMSG  WM_USER+200

第二步要在类声明中声明消息映射:

DECLARE_MESSAGE_MAP()

第三步要在类声明中定义消息处理函数:

afx_msg LRESULT MyMsgHandler(WPARAM,LPARAM);

在.cpp中做的工作:

第四步要实现消息映射:

BEGIN_MESSAGE_MAP()

ON_MESSAGE(WM_MYMSG,OnMyMsgHandler)

END_MESSAGE_MAP()

第五步要实现消息处理函数(当然可以不实现):

LRESULT CMainFrame::OnMyMsgHandler(WPARAM w,LPARAM l)

{

AfxMessageBox("Hello,World!");

return 0;

}

二.           使用

1.      如果该自定义消息所在的类是有CWnd派生出来的,且在本类中调用,那么我们可以调用CWnd::SendMessage()函数,具体定义为:

LRESULT SendMessage( UINT message, WPARAM wParam = 0, LPARAM lParam = 0 );

此时我们只需要在引发消息的地方添加如下代码:

SendMessge(WM_MYMSG,0,0);

如果我们想在不同的情况下发送用户消息,我们只需要将SendMessage的后两个参数wParam,lParam加以标识即可;在消息处理函数,写一个if条件语句(或switch语句)就可以了;将不同情况下的用户消息区分开;

  例如看下面的例子:  

  ①加入消息响应函数实现
  在CCDlg类的实现文件中加入消息响应函数的实现部分,代码如下:
 
  void CCDlg::Customize(WPARAM wParam, LPARAM lParam)
  {
        CString strTittle;
        strTittle.Format("自定义消息参数:x=%d,y=%d",wParam,lParam);
        SetWindowText(strTittle);
  }
  此函数的作用是将鼠标的位置信息显示在对话框的标题栏部分。
  ②.菜单部分
  在主框架的“帮助”主菜单中加入“自定义消息”子菜单,其ID设为ID_CUSTOMIZE,通过类向导响应该命令,函数名默认。其函数体如下:
 
  void CMainFrame::OnCustomize()
  {
        // TODO: Add your command handler code here
        POINT pos;
        //将消息参数定义为屏幕坐标值
        GetCursorPos(&pos);
        pdlg->SendMessage(WM_CUSTOMIZE,(UINT)pos.x,pos.y);//这里就是将(UINT)pos.x,pos.y(注:它们分别对应①中消息响应函数的两个参数WPARAM     wParam和LPARAM lParam)两个参数分别传给消息响应函数。
  }
 

2.      如果不在本类中响应自定义消息;那么我们只能用win32 的API函数;例如,当自定义消息在CMainFrame中,而触发消息的地方不在CMainFrame类中,那么我们可以用如下语句:

::SendMessge(::AfxGetMainWnd()->m_hWnd,WM_MYMSG,0,0);

相关内容网址:

http://www.cnblogs.com/smartvessel/archive/2011/07/18/2109472.html

http://blog.csdn.net/penpenandtongtong/article/details/18598907

http://www.oschina.net/question/565065_72596

http://blog.chinaunix.net/uid-24459558-id-299010.html

MFC的自定义消息的定义与使用的更多相关文章

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

    PostMessage:把消息投放到线程的消息队列,不能消息被处理就立即返回SendMessage:消息被处理完后才返回 几种发送消息的写法:   ::PostMessage(GetSafeHwnd( ...

  2. MFC用户自定义消息

    之前做过佳能相机和位移平台的额二次开发,当时遇到一个棘手的问题,就是位移平台如何知道相机已经拍完照了,或者相机如何知道位移平台已经运行到指定位置,当时为了方便采用了定时器来定时检测位移平台的位置,结果 ...

  3. MFC添加自定义消息

    由于MFC中无法通过类向导来自定义消息,所以需要手动添加,主要过程如下: 本文基于vs2008下通过线程实现数据实时更新的对话框运用程序 1. 定义消息(Resource.h文件中): 由于很多新控件 ...

  4. MFC消息-自定义消息

    转:http://blog.csdn.net/penpenandtongtong/article/details/18598907 像MFC的窗口发送消息,可以进行自定义的动作行为,因此很多时候非常有 ...

  5. MFC中全局变量的定义及使用

    用MFC制作的工程由很多文件构成,它不能象一般C++程序那样随意在类外定义全局变量,在这里要想定义能被工程内多个文件共享的全局变量和函数必须用一些特殊方法才行.实际上有多种方法可以实现,这里只介绍两种 ...

  6. MFC中 自定义消息

    想在对话框显示出来后立即执行一段代码. 方法之一是自定义消息,即添加一个自定义的消息在消息队列中等待对话框初始化之后从消息队列中读取消息执行代码. 在OnInitDialog返回之前post一个自定义 ...

  7. MFC中自定义消息

    在头文件stdafx.h中增加一个自定义消息宏 #define WM_USER_THREADEND WM_USER + 1 在于增加新消息的窗口或对话框类的头文件中增加一个回调函数声明 afx_msg ...

  8. 20190108C++MFC error 2065 未定义XX原因以及解决方式

    今天写界面的时候,明明直接在rc和reourse.h里面加了控件下面是rc和reourse.h照片 编辑的时候一直报错,找了很久发现是新定义的控件有两处定义,定义到其他工程里了所以才会这样,把其他工程 ...

  9. VC/MFC中为程序定义全局快捷键

    VC 2010-05-01 18:01:34 阅读287 评论0 字号:大中小 订阅 1.注册快捷键 在初始化函数,如OnInitDialog() 注册快捷键,代码如下: #define HotKey ...

随机推荐

  1. FatMouse' Trade_贪心

    Problem Description FatMouse prepared M pounds of cat food, ready to trade with the cats guarding th ...

  2. Javascript 事件(一)

    焦点事件获取焦点事件onfocus \  失去焦点事件 onblur 使浏览器能够区分用户输入的对象,当一个元素有焦点的时候,那么他就可以接收用户的输入.我们可以通过一些方式给元素设置焦点    1. ...

  3. 帝国CMS灵动标签e:loop

    头条调用方法 1 [e:loop={'selfinfo',5,13,0,'firsttitle=2'}]<a href="<?=$bqsr[titleurl]?>" ...

  4. python数据结构与算法——图的最短路径(Floyd-Warshall算法)

    使用Floyd-Warshall算法 求图两点之间的最短路径 不允许有负权边,时间复杂度高,思路简单 # 城市地图(字典的字典) # 字典的第1个键为起点城市,第2个键为目标城市其键值为两个城市间的直 ...

  5. 或许是 Nginx 上配置 HTTP2 最实在的教程了

    导读 从 2015 年 5 月 14 日 HTTP/2 协议正式版的发布到现在已经快有一年了,越来越多的网站部署了 HTTP2,HTTP2 的广泛应用带来了更好的浏览体验,只要是 Modern 浏览器 ...

  6. ASP代码审计 -4.命令执行漏洞总结

    命令执行漏洞: 保存为cmd.asp,提交链接: http://localhost/cmd.asp?ip=127.0.0.1 即可执行命令 <%ip=request("ip" ...

  7. LVM逻辑卷管理

    一.LVM简介 LVM(Logic Volume Manager)逻辑卷管理,简单理解就是将一块或多块硬盘的分区在逻辑上集合,当一块大硬盘来使用. 其特点是: 1.可以实现在线动态扩展,也可以缩减 2 ...

  8. linux和window下mkdir函数问题(转-锦曦月)

    通过WIN32宏进行判断   window下mkdir函数   #include<direct.h> int _mkdir( const char *dirname );   linux下 ...

  9. Java引用总结--StrongReference、SoftReference、WeakReference、PhantomReference

    Java引用总结--StrongReference.SoftReference.WeakReference.PhantomReference 1 Java引用介绍 Java从1.2版本开始引入了4种引 ...

  10. mysql事务,SET AUTOCOMMIT,START TRANSACTION

    http://yulei568.blog.163.com/blog/static/135886720071012444422/ MyISAM不支持 START TRANSACTION | BEGIN ...