VC添加自定义消息(转)
2011年04月14日
VC的ClassWizard不允许增加用户自定义消息,所以你必须手工进行添加。当你添加了自定义的消息以后,ClassWizard就可以像处理其它消息一样处理你定义的消息了。
一、VC6添加自定义消息
1、定义消息。在Windows中,所有的消息都用一个特定的整数值来表示,为了避免自定义消息与已存在的其他消息发生冲突,应该利用Windows提供的一个常量:WM_USER,小于这个常量的是系统保留的。即用户自定义的消息至少为WM_USER+1,注意最后表示的消息的数值不要超过0x7FFF。在开发Windows95应用程序时,Microsoft推荐用户自定义消息至少是WM_USER+100,因为很多新控件也要使用WM_USER消息。
#define UM_PROGRESS WM_USER + 100
2、在类头文件的AFX_MSG块中声明消息处理函数:
class CMainFrame:public CFrameWnd{
protected:
//{{AFX_MSG(CMainFrame)
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
afx_msg void OnTimer(UINT nIDEvent);
afx_msg LRESULT OnProgress(WPARAM wParam, LPARAM lParam);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
3、在类的实现文件中,使用ON_MESSAGE宏指令将消息映射到消息处理表中。
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
//{{AFX_MSG_MAP(CMainFrame)
ON_WM_CREATE()
ON_WM_TIMER()
ON_MESSAGE(UM_PROGRESS, OnProgress)//注意这条语句的后面没有分号
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
4、实现消息处理函数。该函数使用WPRAM和LPARAM参数并返回LPESULT。
LPESULT CMainFrame::OnProgress(WPARAM wParam,LPARAM lParam){
CRect rect;
m_wndStatusBar.GetItemRect(2,&rect); //获得窗格区域
//创建进度栏,注意第三个参数为CWnd* pParentWnd,根据情况选择父窗体
m_progress.Create(WS_CHILD|WS_VISIBLE|PBS_VERTICAL,rect,this,123);
m_progress.SetPos(50);
return 0;
}
5、在适当的时候发送自定义消息,进行消息处理。需要注意使用SendMessage还是PostMessage进行处理:SendMessage是消息处理完毕后再返回;而PostMessage则是把消息放到消息队列后立即返回。
SendMessage(UM_PROGRESS);
PostMessage(UM_PROGRESS);
如果用户需要整个系统唯一的消息,可以调用SDK函数RegisterWindowMessage并使用ON_REGISTER_MESSAGE宏指令取代ON_MESSAGE宏指令,其余步骤同上。
二、VC2003添加自定义消息
在VC2003中添加自定义消息和VC6基本一致。需要注意的是VC6处理的消息可以没有参数,但VC2003消息处理的函数必须带有两个参数wParam和lParam,并且其返回值类型为LRESULT。这里,还有另一种方法可以实现地定义消息的处理(VC6和VC2003均适用):
1、定义消息:#define UM_PROGRESS WM_USER + 100
2、重载CMainFrame的DefWindowProc函数,然后添加对用户自定义消息处理:
LRESULT CMainFrame::DefWindowProc(UINT message, WPARAM wParam,
LPARAM lParam){
switch(message){
case UM_PROGRESS:{
//通过指定资源ID获得相应的索引
int index = m_wndStatusBar.CommandToIndex(IDS_PROGRESS);
CRect rect;
m_wndStatusBar.GetItemRect(index,&rect);
m_progress.Create(WS_CHILD|WS_VISIBLE,rect,&m_wndStatusBar
,123);
m_progress.SetPos(50);
break;
}
default:
break;
}
return CFrameWnd::DefWindowProc(message, wParam, lParam);
}
发表评论
-
XP 下Python / C++混合编程 之初体验
2012-01-20 09:39 1629XP 下Python / C++混合编程 之初体验 2011 ... -
用Py2exe打包Python脚本简单介绍
2012-01-20 09:38 790用Py2exe打包Python脚本简 ... -
Python 2.7 Tutorial ―― 模块
2012-01-20 09:38 647Python 2.7 Tutorial ―― 模块 2010 ... -
Python 2.7 Tutorial ―― 浮点数
2012-01-20 09:38 773Python 2.7 Tutorial ―― 浮点数 201 ... -
Python与Perl不能说的秘密
2012-01-20 09:38 726Python与Perl不能说的秘密 ... -
谷歌找客户的方法
2012-01-19 14:41 485谷歌找客户的方法 2011年12月16日 Wind怎么利 ... -
Delphi7 windows 消息处理机制
2012-01-17 04:27 915Delphi7 windows 消息处理机 ... -
消息分流器(HANDLE_MSG)
2012-01-17 04:27 604消息分流器(HANDLE_MSG) 20 ... -
【转】 消息分流器-HANDLE_MSG
2012-01-17 04:27 630【转】 消息分流器-HANDLE_MSG 2011年05月3 ... -
处理 WM_NCHITTEST 消息实现 WPF 无边框窗体改变大小和移动
2012-01-17 04:27 1321处理 WM_NCHITTEST 消息实现 WPF 无边框窗体改 ... -
销售商务礼仪
2012-01-16 03:17 633销售商务礼仪 2011年12月01日 礼仪的起源 ( ... -
精美诗词
2012-01-16 03:17 1271精美诗词 2011年12月30日 我的最爱――精美诗词 ... -
2012-1-2
2012-01-16 03:16 6632012-1-2 2012年01月02日 资源介绍: ... -
成功女人的必修课-会说话的女人最出色之八
2012-01-16 03:16 807成功女人的必修课-会说 ... -
朋友,如果你也热爱销售,喜欢销售,请你认真阅读,相信你会有更多的收获!
2012-01-16 03:16 808朋友,如果你也热爱销售,喜欢销售,请你认真阅读,相信你会有更多 ...
相关推荐
VC中添加响应自定义的消息的代码步骤,简单四步搞定
VC 消息映射与处理\创建和使用自定义消息
在VC项目中使用自定义资源 的 Code
一个漂亮的、厉害的自定义表格类,大部分函数都加了翻译和注释,为了便于使用,自己添加了几个函数。初始化表格只要一个函数就搞定。 里面附有自己做的一个简单的例子。
VC2010使用自定义树列表视图控件示例代码,自己写的,有待完善。
本例用C++实现了在系统右键菜单中添加自定义菜单项和删除该自定义菜单项,内附源代码和可执行的release的exe文件。
Windows 应用程序是靠消息驱动的,在VC中我们通过 Classwizard 可以为某窗口类添加消息处理函数,Classwizard将为你添加消息映射...本文针对VS.NET 2003 境下的C#简单地介绍 Windows 消息以及自定义消息的处理方法.zip
本文实例讲述了VC自定义消息响应函数postmessage的用法。分享给大家供大家参考。具体实现步骤如下: 1. 在 resource.h文件添加如下代码 定一个自己的消息 代码如下:#define WM_MY_MESSAGE WM_USER + 100 //——...
一个增强型的VC.net CSortListCtrl,VC.NET自定义支持选择功能的CSortListCtrl列表组件,在默认的控件状态中,没有这种自由选择的功能,这是根据我自己的需求添加的,或许会有不少朋友对此功能是比较感兴趣的,你...
Autodesk Inventor二次开发时最先考虑的就是要在运行的软件界面上添加自定义的命令按钮或菜单,结合API帮助及网上的例子,本文采用VC#2015在INV2018的界面(无文档环境、零件环境、部件环境、FILE文件菜单)添加了...
VC 设置打印纸大小,自定义打印纸的长度和宽度,单位为像素值,在文本框中输入对应值点击确定按钮即可。
VC6.0编写的自定义WORD工具栏,实现了两个按钮,响应了一个按钮的事件。
3. 打开VC6,右击工具栏,自定义… -> 附加项和宏文件,选中 FileTool Developer Studio Add-in 附加项 这个时候就会出现 A 和 O 的文件栏按钮 1.Add File To Project 2.Open 4. 打开VC6->工程->定制->编辑器...
摘要:VC/C++源码,界面编程,自定义菜单 一个VC++自定义菜单实例,在系统菜单中添加自定义的菜单项,直接用VC6打开编译源文件,运行Debug目录中的文件即可看到效果,请点击窗体标题栏最左边的小图标,即可看到在系统...
基于MFC写的时间轴控件,可添加背景图片等,有兴趣的可以看看
在vc开发中经常用到自定义标题栏,但是通常不清楚如何更改里面的内容,比如如何覆盖标题栏的背景,如何添加自定义的放大,缩小、关闭按钮并添加相应的响应函数,如何放入自定义的图标,如何在标题栏上绘制曲线,我的...
一个漂亮的、厉害的自定义表格类,大部分函数都加了翻译和注释,为了便于使用,自己添加了几个函数 。初始化表格只要一个函数就搞定。 里面附有自己做的一个简单的例子。
在openxml时代之前,customxml是很容易添加的,但是在新版本中却根本找不到友好的方式来添加(目前我只知道可以借助sharepoint2010来实现,shrepoint2007没有试验过)。 基于这种现状,我做了一个小工具。考虑再三,...
Windows 应用程序是靠消息驱动的,在VC中我们通过 Classwizard 可以为某窗口类添加消息处理函数,Classwizard将为你添加消息映射...本文针对VS.NET 2003 境下的C#简单地介绍 Windows 消息以及自定义消息的处理方法.zip