EVC/VC添加自定义消息的两种方法
2010-11-17 14:50
405 查看
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; …… |
相关文章推荐
- 在VC中添加响应自定义的消息的代码方法
- 关于VC++中,两种自定义消息的发送与接收的方法实现进行说明。
- 关于VC++中,两种自定义消息的发送与接收的方法实现进行说明。
- 关于VC++中,两种自定义消息的发送与接收的方法实现进行说明
- 关于VC++中,两种自定义消息的发送与接收的方法实现进行说明
- VC中添加自定义消息的方法
- 关于VC++中,两种自定义消息的发送与接收的方法实现进行说明。
- vc自定义消息的发送与接收的方法实现
- VC中自定义消息的方法及步骤
- C#自定义项目模板(即VC自定义向导)的两种方法
- vc 添加自定义消息及消息处理函数分5步
- 在VC下手工为对话框添加自定义消息
- vc中使用SendMessage正确发送自定义消息的方法
- vc 修改MFC 消息循环的两种方法
- VC添加自定义消息
- 说说Android 两种为自定义组件添加属性的使用方法和区别
- vc中使用SendMessage正确发送自定义消息的方法
- 说说Android 两种为自定义组件添加属性的使用方法和区别
- IAR for MSP430 关于添加自定义头文件的两种方法 .
- 在VC中添加响应自定义的消息的代码步骤