MFC中SendMessage的用法与相应函数的添加
1. 先来个基本知识介绍
- 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;
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用法实例
- void CTScrollWinView::OnLButtonDblClk(UINT nFlags, CPoint point)
- {
- // TODO: 在此添加消息处理程序代码和/或调用默认值
- ::SendMessage(AfxGetMainWnd()->m_hWnd,WM_CHILDFRAMEDBCLK ,0,0);
- CScrollView::OnLButtonDblClk(nFlags, point);
- }
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. 在接收消息的窗体以及线程所在的头文件里定义:
- #define WM_CHILDFRAMEDBCLK WM_USER+1 // do something
#define WM_CHILDFRAMEDBCLK WM_USER+1 // do something
4. 然后接下来定义一个消息需要映射的函数,如下:
- afx_msg LRESULT OnChlidFrameDBClick(WPARAM wParam, LPARAM lParam);
afx_msg LRESULT OnChlidFrameDBClick(WPARAM wParam, LPARAM lParam);
注意格式必须是:两个参数必不可少,返回类型一定为LRESULT,网上很多文章都忽略了这两点,这也是网上文章普遍错误的地方。
5. 添加消息函数映射
- ON_MESSAGE(WM_CHILDFRAMEDBCLK,OnChlidFrameDBClick)
ON_MESSAGE(WM_CHILDFRAMEDBCLK,OnChlidFrameDBClick)
注意这里必须是ON_MESSAGE, 不能使用ON_COMMAND, 前者主要针对用户自定义消息,后者针对WM_COMMAND命令,比如菜单、工具栏等.
6. 实现消息函数:
我们在接收窗体里定义一个这样的事情(过程),
- LRESULT CMainFrame::OnChlidFrameDBClick(WPARAM wParam, LPARAM lParam)
- {
- CancelFullScreenWin(); // 这里调用了一个使子窗口全屏的自写函数,我就不贴出来了,以后专题将的时候会提到
- return 0;
- }
LRESULT CMainFrame::OnChlidFrameDBClick(WPARAM wParam, LPARAM lParam) { CancelFullScreenWin(); // 这里调用了一个使子窗口全屏的自写函数,我就不贴出来了,以后专题将的时候会提到 return 0; }
MFC中SendMessage的用法与相应函数的添加相关推荐
- MFC中CString.format用法
MFC中CString.Format的详细用法 收藏 在MFC程序中,使用CString来处理字符串是一个很不错的选择. CString既可以处理Unicode标准的字符串,也可以处理ANSI标准的 ...
- vue中定时器一般用法,定时器函数传参以及清除定时器
一.vue中定时器一般用法(举个例子) 显示当前时间, setInterval()方法会每秒执行一次函数,类似手表功能: <template><div class="use ...
- php中的point用法,php strnatcmp()函数的用法总结
这篇文章主要是对php中strnatcmp()函数的用法进行了详细的总结介绍,需要的朋友可以过来参考下,希望对大家有所帮助 Definition and Usage 定义和用法The strnatcm ...
- oracle中的and用法,Oracle bitand( )函数简介
Oracle bitand( )函数在Oracle数据库中是很常见的,下面就为您详细介绍Oracle bitand( )函数的用法,如果您感兴趣的话,不妨一看. Oracle bitand( )函数: ...
- 转:MFC中常用类,宏,函数介绍
常用类 CRect:用来表示矩形的类,拥有四个成员变量:top left bottom right.分别表是左上角和右下角的坐标.可以通过以下的方法构造: CRect( int l, int t, i ...
- python中lower的用法_Python lower()函数
Python中lower() 函数的作用是把一个字符串中所有大写形式的字符变为小写形式,并生成源字符串的一个副本. lower() 函数在很多场合起着重要的作用,如有时我们需要判断一个字符串中是否包含 ...
- python中len的用法_Python len函数用法
1 在Python中,要知道一个字符串有多少个字符(以获得字符串的长度),或者一个字符串需要多少字节,可以使用len函数.len函数的基本语法格式如下: 2 其中string用于指定要计算长度的字符串 ...
- linux中strlen的用法,实现strlen()函数,strcmp()函数 const知识点
实现strlen()函数,strcmp()函数 const知识点 发布时间:2020-08-03 05:49:13 来源:51CTO 阅读:576 作者:汇天下豪杰 1.strlen()函数的实现:# ...
- python中choice的用法_Python3 choice 函数
choice() 方法从列表,元组或字符串中返回一个随机的项目. 语法 以下是 choice() 方法的语法: choice( seq ) 注:此函数无法直接访问,所以我们需要导入 random 模块 ...
最新文章
- 新书-JavaScript高级程序设计:第2版(预订中,估价)
- NanoPi NEO的Matrix库硬件编程
- Linux磁盘管理基础学习
- mongodb同时更新一条记录_MongoDB 存储和优化系列一
- PE文件格式和ELF文件格式(上)----PE文件
- HTTP协议容易犯的误区
- Matrix Subtraction(小米icpc邀请赛第一场)
- Nessus进行漏洞扫描的过程
- 有奖征文 | 蒋涛邀你悦评《UNIX传奇》新书,赢技术进阶好礼
- 按顺序读取选中的复选框
- 离散数学期末复习概念_复习第1部分中的基本概念
- 双色球选号--python
- 多媒体数据处理实验1:算术编码
- Android之高仿墨迹天气桌面组件(AppWidgetProvider)
- 非系统APK很多权限受限制,如何让APK成为系统APK
- transact sql mysql_Sql Server数据库常用Transact-SQL脚本(推荐)
- 自动抢红包-辅助功能的使用
- 高数 | 为什么f(x)从a到b的积分等于从b到a的积分的相反数?
- ShareSDK⭐一、QQ登陆、获取QQ用户信息
- 怎么用计算机算出一个人的生日,怎样才能在网上查到一个人的生日
热门文章
- 深度学习85—[深度学习] 感知器
- C#.NET常见问题(FAQ)-如何修改Form不能修改窗体大小
- LightOJ - 1179 Josephus Problem(约瑟夫环)
- TODO monkey笔记,PC端执行和手机端执行
- 第四代:大规模集成电路计算机
- 8、web入门回顾/ Http
- 【转】 (C#)利用Aspose.Cells组件导入导出excel文件
- python 之 字符编码 和 中文显示
- 彻底的卸载SQL Server2005
- ES6 new syntax of Default Function Parameters