MFC消息-自定义消息
转:http://blog.csdn.net/penpenandtongtong/article/details/18598907
像MFC的窗口发送消息,可以进行自定义的动作行为,因此很多时候非常有用。
1. 在MSGDlg.h或者其他头文件中增加自定义自定义消息:#define WM_COUNT_MSG WM_USER+100
2. 在MSGDlg.h头文件中添加消息处理函数的声明 afx_msg LRESULT OnCountMsg(WPARAM,LPARAM);
3. 在CMSGDlg类实现文件MSGDlg.cpp中的消息映射表中加入自定义消息映射:
BEGIN_MESSAGE_MAP(CMSGDlg, CDialog)
//{{AFX_MSG_MAP(CMSGDlg)
ON_WM_PAINT()
ON_MESSAGE(WM_COUNT_MSG,&CMSGDlg::OnCountMsg) // OnCountMsg是自定义的消息处理函数,可以在这个函数里面进行自定义的消息处理代码
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
4. 在需要发送消息的地方,添加下面这句话:this->SendMessage(WM_COUNT_MSG,0,0);
5.在CMSGDlg类实现文件MSGDlg.cpp中定义OnCountMsg消息响应
//自定义消息处理函数
LRESULT CMSGDlg::OnCountMsg(WPARAM wParam,LPARAM lParam)
{
this->SetDlgItemInt(IDC_EDIT,lParam);
return 1;
}
SendMessage函数的API原型为:
LRESULT SendMessage( HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam);
其中hWnd标识接收消息的窗口。
以下程序用来向记事本Notepad发送一个WM_CLOSE消息以关闭记事本窗口。
// TellToClose.cpp文件
//::FindWindow&::SendMessage
#include "stdafx.h"
#include <windows.h>
int main(int argc, char* argv[])
{
// 查找标题为“无标题- 记事本”的窗口
// 也可以使用类名来查找,如
// HWND hWnd =::FindWindow("Notepad", NULL);
HWND hWnd = ::FindWindow(NULL, "无标题- 记事本");
if(hWnd != NULL)
{
// 向目标窗口发送WM_CLOSE消息
::SendMessage(hWnd, WM_CLOSE, 0, 0);
}
return 0;
}
另外还有一个函数:
BOOL PostMessage( HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam);
注意SendMessage直到消息被处理完毕后才返回,而PostMessage是把一条消息投放到创建hWnd窗口的线程的消息队列中。函数不等消息被处理就立即返回。
如果开启了记事本程序,则运行以上程序记事本关闭。
另附PeekMessage和GetMessage的区别:
PeekMessage 返回 TRUE 的条件是有消息,如果没有消息返回 FALSE
GetMessage 返回 TRUE 的条件是有消息且该消息不为 WM_QUIT
返回 FALSE 的条件是有消息且该消息 为 WM_QUIT
在MFC中SendMessage函数封装到CWnd类中:
CWnd::SendMessage
LRESULT SendMessage( UINT message, WPARAM wParam = 0, LPARAM lParam = 0 );
返回值:消息处理的结果;它的值依赖于发送的消息。
参数:
message指定了要发送的消息;
wParam和lParam指定了与消息有关的附加信息。
wParam和lParam是Windows消息机制的两个最重要参数,整个Windows依靠这两个参数传递各种各样的消息。
首先是wParam,它表示此次的消息类型是什么。是键盘?是鼠标?键盘里又分按下还是抬起,鼠标里又分是单击还是双击,等等。
lParam是一个指针,它指向本条消息所存储的信息的内存区域的首地址,很显然,这个地址存放的东西是很灵活的,比如鼠标消息,那么这里可能存放的是各键的状态或者光标的X,Y座标。换成键盘消息,则是键码等等。
总之,在Windows系统消息处理中,wParam参数区分了类别,lParam参数存放了该类别所存储的信息。
对于自定义消息,我们把消息Msg投递(Send或Post)到 hWnd,其对应的消息处理函数一般为afx_msg LRESULT OnMsg(WPARAM,LPARAM);格式,故我们可以自定义这两个参数,以传递所需参数(一般为常规类型、结构或类的指针)到指定窗口线程。
例如: SendMessage(WM_MYMESSAGE,(WPARAM)lpMyData1,(LPARAM)lpMyData2
MFC消息-自定义消息的更多相关文章
- MFC编程入门之五(MFC消息映射机制概述)
在MFC软件开发中,界面操作或者线程之间通信都会经常用到消息,通过对消息的处理实现相应的操作.比较典型的过程是,用户操作窗口,然后有消息产生,送给窗口的消息处理函数处理,对用户的操作做出响应. 一.什 ...
- VS2010/MFC编程入门之五(MFC消息映射机制概述)
VS2010/MFC编程入门之五(MFC消息映射机制概述)-软件开发-鸡啄米 http://www.jizhuomi.com/software/147.html 上一讲鸡啄米为大家简单分析了MFC应用 ...
- MFC消息映射机制
1.MFC应用框架主要类之间的关系 MFC自动生成的框架中重要的类有:C-App.CMainFrame.C-Doc和C-View. 其他的类如CClassView.CFileView等都是在框架窗口( ...
- MFC发送自定义消息-PostMessage和SendMessage
PostMessage:把消息投放到线程的消息队列,不能消息被处理就立即返回SendMessage:消息被处理完后才返回 几种发送消息的写法: ::PostMessage(GetSafeHwnd( ...
- MFC消息映射机制以及画线功能实现
---此仅供用于学习交流,切勿用于商业用途,转载请注明http://www.cnblogs.com/mxbs/p/6213404.html. 利用VS2010创建一个单文档标准MFC工程,工程名为Dr ...
- 自制MFC消息响应定位器+原理分析
mfc里面有张消息映射表(MESSAGE_MAP),消息都是通过这张表来分发到相应函数里的. 这个是我自制的定位器,从vc6.0到现在的2013生成的mfc都可以用,全静态扫描并已处理动态基址. 下面 ...
- MFC消息响应机制 q
MFC消息响应机制分析 1 引言微软公司提供的MFC基本类库(Microsoft Foundation Classes),是进行可视化编程时使用最为流行的一个类 库.MFC封装了大部分Windows ...
- MFC消息映射与命令传递
题外话:刚开始学视窗程序设计的时候,我就打印了一本Windows消息详解,里面列举了各种已定义消息的意义和作用,共10多页,在编程的时候翻翻,有时觉得很受用.我发觉很多编程的朋友,虽然每天都面对消息, ...
- MFC技术内幕系列之(四)---MFC消息映射与消息传递内幕
//////////////////////////////////////////////////////////////////////////////////// ...
随机推荐
- strpos检测字符串是否包含元素
<?php echo strpos('https://www.baidu.com','https',0); ?> 默认的第三个参数就是0. 第三个参数表示查找的起始位置. 如果不存在的话, ...
- 一篇很好的java异常框架讲解
https://www.cnblogs.com/itcui/p/6400499.html 其实原作者是csdn的一名博主,实在受不了csdn的广告,所以就摘录这篇
- 学习笔记42—Win7下安装Linux双系统
1.下载Linux镜像:http://mirrors.163.com/ubuntu-releases/18.04.1/ 方法一: 1.用软通牒软件将Linux的镜像写入空的优盘中, 具体如下: 1) ...
- Ubuntu16.04 上安装MySQL5.7
Ubuntu版本:16.04.4 1.先更新最新的源 sudo apt-get update 2.查看是否已经安装过mysql sudo netstat -tap | grep mysq 如果没有安装 ...
- SVN下载项目导入到eclipse中出现错误解决办法:
首先要确定settings.xml配置路径正确 (下面是我自己的路径,设置自己的路径) 用客户端暴力解决方法: 1)把本地中工作空间中内容删除重新下载 2)导入到eclipse中 会出现一些问题 右键 ...
- Python Scrapy 爬虫框架实例(一)
之前有介绍 scrapy 的相关知识,但是没有介绍相关实例,在这里做个小例,供大家参考学习. 注:后续不强调python 版本,默认即为python3.x. 爬取目标 这里简单找一个图片网站,获取图片 ...
- iview使用的bug
1.table中排序和render方法不能共存,解决方法:保留render,然后排序不用提供的排序,自己写事件.
- 网络cmd命令
1.ping ip; 检测IP地址是否相通 ping命令的常用参数选项 ping IP -t:连续对IP地址执行ping命令,直到被用户以Ctrl+C中断. ping IP -l 2000:指定pin ...
- pandas删除行删除列,增加行增加列
创建df: >>> df = pd.DataFrame(np.arange(16).reshape(4, 4), columns=list('ABCD'), index=list(' ...
- 框架中如何根据fileupload工具包实现文件上传功能
工具包 Apache-fileupload.jar – 文件上传核心包. Apache-commons-io.jar – 这个包是fileupload的依赖包.同时又是一个工具包. 代码 servle ...