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. vue入门教程(二)
  2. java调用sap接口_(二)通过JAVA调用SAP接口 (增加一二级参数)
  3. addrinfo 结构
  4. 【博客项目】—数据分页(十)
  5. Maven的一些资源(配置方法、idea中toggle offline mode:切换脱机模式、idea中Toggle ‘Skip Tests’ Mode、 Dependencies 出现红色波浪线)
  6. Visual Studio Code 使用Git进行版本控制
  7. 小程序mpvue图片绘制水印_基于mpvue小程序使用echarts画折线图的方法示例
  8. 从零基础入门Tensorflow2.0 ----八、40. keras分布式实战
  9. uniapp uView u-picker组件三级联动Demo
  10. 如何使用 身份证归属地查询API
  11. android屏幕内容实时传输,在设备之间无缝传输内容
  12. jenkins(一)------Windows环境下jenkins下载和安装
  13. WORD自动生成目录,目录中页码链接到正文的页码
  14. android 进入recovery,安卓手机如何进入Recovery模式的通用方式详解
  15. MAC 下ifconfig看IP
  16. 如何在微信公众号图文中添加附件
  17. The inferior stopped because it received a signal from the Operating System.
  18. rpm包与deb包的制作过程
  19. 倍加福 vmt视觉识别软件应用
  20. 第十届蓝桥杯省赛题解+代码

热门文章

  1. linux查看告警日志,shell脚本,用于监视Linux中的消息日志(警告,错误和严重)...
  2. getplotlyoffline(‘http://cdn.plot.ly/plotly-latest.min.js‘)无法下载如何解决
  3. WebSocket 详解
  4. BZOJ 1800 [Ahoi2009]fly 飞行棋
  5. 移动端web自适应适配布局解决方案
  6. CSS浮动(三)---Float
  7. Python高级特性(一)
  8. MySql_5-7安装教程
  9. vuejs实现本地数据的筛选分页
  10. 第二次作业:王者荣耀软件分析