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 模块 ...
最新文章
- vue入门教程(二)
- java调用sap接口_(二)通过JAVA调用SAP接口 (增加一二级参数)
- addrinfo 结构
- 【博客项目】—数据分页(十)
- Maven的一些资源(配置方法、idea中toggle offline mode:切换脱机模式、idea中Toggle ‘Skip Tests’ Mode、 Dependencies 出现红色波浪线)
- Visual Studio Code 使用Git进行版本控制
- 小程序mpvue图片绘制水印_基于mpvue小程序使用echarts画折线图的方法示例
- 从零基础入门Tensorflow2.0 ----八、40. keras分布式实战
- uniapp uView u-picker组件三级联动Demo
- 如何使用 身份证归属地查询API
- android屏幕内容实时传输,在设备之间无缝传输内容
- jenkins(一)------Windows环境下jenkins下载和安装
- WORD自动生成目录,目录中页码链接到正文的页码
- android 进入recovery,安卓手机如何进入Recovery模式的通用方式详解
- MAC 下ifconfig看IP
- 如何在微信公众号图文中添加附件
- The inferior stopped because it received a signal from the Operating System.
- rpm包与deb包的制作过程
- 倍加福 vmt视觉识别软件应用
- 第十届蓝桥杯省赛题解+代码
热门文章
- linux查看告警日志,shell脚本,用于监视Linux中的消息日志(警告,错误和严重)...
- getplotlyoffline(‘http://cdn.plot.ly/plotly-latest.min.js‘)无法下载如何解决
- WebSocket 详解
- BZOJ 1800 [Ahoi2009]fly 飞行棋
- 移动端web自适应适配布局解决方案
- CSS浮动(三)---Float
- Python高级特性(一)
- MySql_5-7安装教程
- vuejs实现本地数据的筛选分页
- 第二次作业:王者荣耀软件分析