1. 先来个基本知识介绍

[cpp] view plaincopy print?
  1. SendMessage的基本结构如下:
  2. SendMessage(
  3. HWND hWnd,  //消息传递的目标窗口或线程的句柄。
  4. UINT Msg, //消息类别(这里可以是一些系统消息,也可以是自己定义,下文具体介绍,)
  5. WPARAM wParam, //参数1 (WPARAM 其实是与UINT是同种类型的,
  6. //在vc编译器中右键有个“转到WPARAM的定义”的选项可以查看。
  7. LPARAM lParam); //参数2
  8. 其中一些参数的由来如下:
  9. //typedef unsigned int UINT;
  10. //typedef UINT WPARAM;
  11. //typedef LONG LPARAM;
  12. //typedef LONG LRESULT;
SendMessage的基本结构如下:SendMessage(HWND hWnd,  //消息传递的目标窗口或线程的句柄。UINT Msg, //消息类别(这里可以是一些系统消息,也可以是自己定义,下文具体介绍,)WPARAM wParam, //参数1 (WPARAM 其实是与UINT是同种类型的,//在vc编译器中右键有个“转到WPARAM的定义”的选项可以查看。LPARAM lParam); //参数2其中一些参数的由来如下://typedef unsigned int UINT;//typedef UINT WPARAM;//typedef LONG LPARAM;//typedef LONG LRESULT;

2. SendMessage用法实例

[cpp] view plaincopy print?
  1. void CTScrollWinView::OnLButtonDblClk(UINT nFlags, CPoint point)
  2. {
  3. // TODO: 在此添加消息处理程序代码和/或调用默认值
  4. ::SendMessage(AfxGetMainWnd()->m_hWnd,WM_CHILDFRAMEDBCLK ,0,0);
  5. CScrollView::OnLButtonDblClk(nFlags, point);
  6. }
void CTScrollWinView::OnLButtonDblClk(UINT nFlags, CPoint point)  {  // TODO: 在此添加消息处理程序代码和/或调用默认值  ::SendMessage(AfxGetMainWnd()->m_hWnd,WM_CHILDFRAMEDBCLK ,0,0);  CScrollView::OnLButtonDblClk(nFlags, point);  }  

这是我用VC2008下建立的一个多文档选项卡式工程里面的一段代码,是为了实现在子窗口双击后发送一个不带参数的消息(其ID为WM_USER+1)给主窗口, 如上为部分代码, 其中WM_CHILDFRAMEDBCLK是自定义的消息ID, AfxGetMainWnd()->m_hWnd是获得主窗口(这里不能使用GetParent()->m_hWnd或者GetParentFrame()->m_hWnd, 因为这是获得父窗口,但父窗口不一定是主窗口,一定要注意,不然消息就会发错导致接收不到。

3. 在接收消息的窗体以及线程所在的头文件里定义:

[cpp] view plaincopy print?
  1. #define WM_CHILDFRAMEDBCLK  WM_USER+1   // do something
#define WM_CHILDFRAMEDBCLK  WM_USER+1   // do something  

4. 然后接下来定义一个消息需要映射的函数,如下:

[cpp] view plaincopy print?
  1. afx_msg LRESULT OnChlidFrameDBClick(WPARAM wParam, LPARAM lParam);
afx_msg LRESULT OnChlidFrameDBClick(WPARAM wParam, LPARAM lParam);  

注意格式必须是:两个参数必不可少,返回类型一定为LRESULT,网上很多文章都忽略了这两点,这也是网上文章普遍错误的地方。

5. 添加消息函数映射

[cpp] view plaincopy print?
  1. ON_MESSAGE(WM_CHILDFRAMEDBCLK,OnChlidFrameDBClick)
ON_MESSAGE(WM_CHILDFRAMEDBCLK,OnChlidFrameDBClick)  

注意这里必须是ON_MESSAGE, 不能使用ON_COMMAND, 前者主要针对用户自定义消息,后者针对WM_COMMAND命令,比如菜单、工具栏等.

6. 实现消息函数:

我们在接收窗体里定义一个这样的事情(过程),

[cpp] view plaincopy print?
  1. LRESULT CMainFrame::OnChlidFrameDBClick(WPARAM wParam, LPARAM lParam)
  2. {
  3. CancelFullScreenWin();  // 这里调用了一个使子窗口全屏的自写函数,我就不贴出来了,以后专题将的时候会提到
  4. return 0;
  5. }
LRESULT CMainFrame::OnChlidFrameDBClick(WPARAM wParam, LPARAM lParam)  {  CancelFullScreenWin();  // 这里调用了一个使子窗口全屏的自写函数,我就不贴出来了,以后专题将的时候会提到  return 0;  }  

MFC中SendMessage的用法与相应函数的添加相关推荐

  1. MFC中CString.format用法

    MFC中CString.Format的详细用法 收藏  在MFC程序中,使用CString来处理字符串是一个很不错的选择. CString既可以处理Unicode标准的字符串,也可以处理ANSI标准的 ...

  2. vue中定时器一般用法,定时器函数传参以及清除定时器

    一.vue中定时器一般用法(举个例子) 显示当前时间, setInterval()方法会每秒执行一次函数,类似手表功能: <template><div class="use ...

  3. php中的point用法,php strnatcmp()函数的用法总结

    这篇文章主要是对php中strnatcmp()函数的用法进行了详细的总结介绍,需要的朋友可以过来参考下,希望对大家有所帮助 Definition and Usage 定义和用法The strnatcm ...

  4. oracle中的and用法,Oracle bitand( )函数简介

    Oracle bitand( )函数在Oracle数据库中是很常见的,下面就为您详细介绍Oracle bitand( )函数的用法,如果您感兴趣的话,不妨一看. Oracle bitand( )函数: ...

  5. 转:MFC中常用类,宏,函数介绍

    常用类 CRect:用来表示矩形的类,拥有四个成员变量:top left bottom right.分别表是左上角和右下角的坐标.可以通过以下的方法构造: CRect( int l, int t, i ...

  6. python中lower的用法_Python lower()函数

    Python中lower() 函数的作用是把一个字符串中所有大写形式的字符变为小写形式,并生成源字符串的一个副本. lower() 函数在很多场合起着重要的作用,如有时我们需要判断一个字符串中是否包含 ...

  7. python中len的用法_Python len函数用法

    1 在Python中,要知道一个字符串有多少个字符(以获得字符串的长度),或者一个字符串需要多少字节,可以使用len函数.len函数的基本语法格式如下: 2 其中string用于指定要计算长度的字符串 ...

  8. linux中strlen的用法,实现strlen()函数,strcmp()函数 const知识点

    实现strlen()函数,strcmp()函数 const知识点 发布时间:2020-08-03 05:49:13 来源:51CTO 阅读:576 作者:汇天下豪杰 1.strlen()函数的实现:# ...

  9. python中choice的用法_Python3 choice 函数

    choice() 方法从列表,元组或字符串中返回一个随机的项目. 语法 以下是 choice() 方法的语法: choice( seq ) 注:此函数无法直接访问,所以我们需要导入 random 模块 ...

最新文章

  1. 新书-JavaScript高级程序设计:第2版(预订中,估价)
  2. NanoPi NEO的Matrix库硬件编程
  3. Linux磁盘管理基础学习
  4. mongodb同时更新一条记录_MongoDB 存储和优化系列一
  5. PE文件格式和ELF文件格式(上)----PE文件
  6. HTTP协议容易犯的误区
  7. Matrix Subtraction(小米icpc邀请赛第一场)
  8. Nessus进行漏洞扫描的过程
  9. 有奖征文 | 蒋涛邀你悦评《UNIX传奇》新书,赢技术进阶好礼
  10. 按顺序读取选中的复选框
  11. 离散数学期末复习概念_复习第1部分中的基本概念
  12. 双色球选号--python
  13. 多媒体数据处理实验1:算术编码
  14. Android之高仿墨迹天气桌面组件(AppWidgetProvider)
  15. 非系统APK很多权限受限制,如何让APK成为系统APK
  16. transact sql mysql_Sql Server数据库常用Transact-SQL脚本(推荐)
  17. 自动抢红包-辅助功能的使用
  18. 高数 | 为什么f(x)从a到b的积分等于从b到a的积分的相反数?
  19. ShareSDK⭐一、QQ登陆、获取QQ用户信息
  20. 怎么用计算机算出一个人的生日,怎样才能在网上查到一个人的生日

热门文章

  1. 深度学习85—[深度学习] 感知器
  2. C#.NET常见问题(FAQ)-如何修改Form不能修改窗体大小
  3. LightOJ - 1179 Josephus Problem(约瑟夫环)
  4. TODO monkey笔记,PC端执行和手机端执行
  5. 第四代:大规模集成电路计算机
  6. 8、web入门回顾/ Http
  7. 【转】 (C#)利用Aspose.Cells组件导入导出excel文件
  8. python 之 字符编码 和 中文显示
  9. 彻底的卸载SQL Server2005
  10. ES6 new syntax of Default Function Parameters