VC添加自定义消息
来源:互联网 发布:做条形码的软件 编辑:程序博客网 时间:2024/04/30 18:50
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,
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
m_progress.SetPos(50);
break;
}
default:
break;
}
return CFrameWnd::DefWindowProc(message, wParam, lParam);
}
- VC添加自定义消息
- VC添加自定义消息
- VC添加自定义消息
- VC添加自定义消息
- VC 添加自定义消息
- 图解VC添加自定义消息
- vc添加自定义消息响应
- VC添加自定义消息终级版
- VC中添加自定义消息的方法
- VC++中添加响应自定义消息
- 在VC中 添加响应自定义消息
- 在VC中 添加响应自定义消息
- VC++中添加自定义消息的响应 (BEGIN_MESSAGE_MAP ON_MESSAGE)
- 在VC中添加响应自定义的消息(转)
- vc 6.0和vs2008中添加自定义消息的区别
- 在VC下手工为对话框添加自定义消息
- VC++ 添加自定义消息响应函数以及发送消息SendMessage投递消息PostMessage的简单测试
- VC增加自定义消息
- 早买早享受
- 转载:oracle oci和thin的区别
- Android音频实时传输与播放(三):AMR硬编码与硬解码
- [遇到的问题]ubuntu 更新出错
- k Means clustering c++ implementation
- VC添加自定义消息
- 指针和数组
- 火爆天王,好看呀
- 《跟我学MFC教程》的附属品-消息机制
- Javascript Array和String的互转换
- IOS---基本控制流程
- MFC教程-应用程序的退出
- Javascript 严格模式详解
- Test__GUI__用java编写一个简单的记事本程序,打包成jar双击运行