求自定义消息的处理方法。 如何自定义一个消息,并写出某个窗口对它的响函数。给一个短小的例子即可。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 ClassWizard不允许增加用户自定义消息,所以你必须手工输入。输入后,ClassWizard就可以象处理其它消息一样处理你自定义的消息了。下面是增加自定义消息的步骤:第一步:定义消息。开发Windows95应用程序时,Microsoft推荐用户自定义消息至少是WM_USER+100,因为很多新控件也要使用WM_USER消息。第二步:实现消息处理函数。该函数使用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_MSGDECLARE_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_MAPEND_MESSAGE_MAP()如果用户需要一个整个系统唯一的消息,可以调用SDK函数RegisterWindowMessage并使用ON_REGISTER_MESSAGE宏指令取代ON_MESSAGE宏指令,其余步骤同上。 在.h中加入:#define WM_PLAY_END WM_USER + 214在.CPP中的BEGIN_MESSAGE_MAP(CPlayVideo, CDialog)中加入:ON_MESSAGE(WM_PLAY_END,OnPlayEnd)在.h中加入函数:afx_msg void OnPlayEnd(WPARAM wParam, LPARAM lParam);在.CPP中加入函数代码:void CPlayVideo::OnPlayEnd(WPARAM wParam, LPARAM lParam){} #define TEST_MESSAGE WM_USER+301发消息:::SendMessage(m_hMyWnd,TEST_MESSAGE,wParam,lParam);//wParam和lParam是你感兴趣的值,会传给消息响应函数。PostMessage也行响应消息:头文件中定义afx_msg void OnTest(WPARAM wParam,LPARAM lParam);在CPP中:BEGIN_MESSAGE_MAP ON_MESSAGE(TEST_MESSAGE,OnTest)END_MESSAGE_MAP()实现void CMyDlg::OnTest(WPARAM wParam, LPARAM lParam){} 在要发送消息地方加BOOL PostMessage( HWND hWnd, // handle to destination window UINT Msg, // message WPARAM wParam, // first message parameter LPARAM lParam // second message parameter);或LRESULT SendMessage( HWND hWnd, // handle to destination window UINT Msg, // message WPARAM wParam, // first message parameter LPARAM lParam // second message parameter); 同意quanbaoxiao(永不言败)的方法 全局键盘钩子 如何避免被360之类的杀毒软件认定为病毒? 只是想截获快捷键而已。 如何获取QQ 聊天记录 怎样学好C++ API函数? CBitmap对象拷贝的问题(分享) 帮帮忙啊!! VC中如何调用带输入、输出参数的存储过程? 我的机器上装了mdac 2.6版本,原来用2.1ado写的程序用不了,怎么从2.6转到2.1 如何调用程序 关于使用GDI+重绘半透明颜色加深的问题 构造函数成员始化!! 奇怪的问题 delphi调用vc动态库,参数怎么变, 还有要不要在函数声明前声明类呀.
ClassWizard不允许增加用户自定义消息,所以你必须手工输入。输入后,ClassWizard就可以象处理其它消息一样处理你自定义的消息了。下面是增加自定义消息的步骤:第一步:定义消息。开发Windows95应用程序时,Microsoft推荐用户自定义消息至少是WM_USER+100,因为很多新控件也要使用WM_USER消息。第二步:实现消息处理函数。该函数使用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()如果用户需要一个整个系统唯一的消息,可以调用SDK函数RegisterWindowMessage并使用ON_REGISTER_MESSAGE宏指令取代ON_MESSAGE宏指令,其余步骤同上。
#define WM_PLAY_END WM_USER + 214在.CPP中的BEGIN_MESSAGE_MAP(CPlayVideo, CDialog)中加入:
ON_MESSAGE(WM_PLAY_END,OnPlayEnd)在.h中加入函数:
afx_msg void OnPlayEnd(WPARAM wParam, LPARAM lParam);在.CPP中加入函数代码:
void CPlayVideo::OnPlayEnd(WPARAM wParam, LPARAM lParam)
{
}
::SendMessage(m_hMyWnd,TEST_MESSAGE,wParam,lParam);//wParam和lParam是你感兴趣的值,会传给消息响应函数。PostMessage也行响应消息:
头文件中定义afx_msg void OnTest(WPARAM wParam,LPARAM lParam);
在CPP中:
BEGIN_MESSAGE_MAP
ON_MESSAGE(TEST_MESSAGE,OnTest)
END_MESSAGE_MAP()实现
void CMyDlg::OnTest(WPARAM wParam, LPARAM lParam)
{
}
BOOL PostMessage(
HWND hWnd, // handle to destination window
UINT Msg, // message
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
);
或
LRESULT SendMessage(
HWND hWnd, // handle to destination window
UINT Msg, // message
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
);