消息映射、循环机制是Windows程序运行的基本方式。VC++ MFC 中有许多现成的消息句柄,可当我们需要完成其它的任务,需要自定义消息,就遇到了一些困难。在MFC ClassWizard中不允许添加用户自定义消息,所以我们必须在程序中添加相应代码,以便可以象处理其它消息一样处理自定义消息。通常的做法是采取以下步骤:
第一步:定义消息。
推荐用户自定义消息至少是WM_USER+100,因为很多新控件也要使用WM_USER消息。
#define WM_MY_MESSAGE (WM_USER+100)
第二步:实现消息处理函数。该函数使用WPRAM和LPARAM参数并返回LPESULT。
LPESULT CMainFrame::OnMyMessage(WPARAM wParam, LPARAM lParam)
{
// TODO: 处理用户自定义消息
...
return 0;
}
第三步:在类头文件的AFX_MSG块中说明消息处理函数:
class CMainFrame:public CMDIFrameWnd
{
...
// 一般消息映射函数
protected:
// {{AFX_MSG(CMainFrame)
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
afx_msg void OnTimer(UINT nIDEvent);
afx_msg LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
}
第四步:在用户类的消息块中,使用ON_MESSAGE宏指令将消息映射到消息处理函数中。
BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWnd)
//{{AFX_MSG_MAP(CMainFrame)
ON_WM_CREATE()
ON_WM_TIMER()
ON_MESSAGE(WM_MY_MESSAGE, OnMyMessage)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
第五步:发送消息。
//---- use the Frame pointobject
CMDIFrameWnd *pFrame = (CMDIFrameWnd*)AfxGetApp()->m_pMainWnd;
pFrame->PostMessage( WM_MY_MESSAGE,0,0);
//--
订阅:
博文评论 (Atom)
我的简介
博客归档
-
▼
2007
(24)
-
▼
十二月
(20)
- 获得Cxxxview指针
- 取得文件的 Version information
- VC++动态链接库
- Payback Coupons, gültig bis 31.03.2008
- create()替代DoModal()打开Dialog
- 关闭程序前询问,强行结束进程
- 获取命令行参数 -s -x...
- lstrcat,连结两个LPTSTR 字符串
- 高速上险些追尾,魂都吓掉了。。。。只差几厘米
- MFC中自由使用自定义消息
- MFC中消息拦截
- 通过OnSysCommand关闭程序控制
- RGB color codes
- 发送button Onclick 消息
- 改变窗口标题
- 调出主窗口
- CreateThread
- 几种控件的绑定
- CreateProcess 能够返回错误码
- MFC中窗体的控制
-
▼
十二月
(20)
没有评论:
发表评论