dialog中,
方法1,手动关联消息及处理函数,用ON_MESSAGE( , )
1.在CxxDlg的h文件中定义消息
#define WM_MY_DOSOME WM_USER+1 // do something
在CxxDlg的h文件中的AFX_MSG中加入一行消息处理函数的声明,afx_msg LRESULT DoSomeThing(WPARAM iParam1,LPARAM iParam2);如下
//{{AFX_MSG(CTestmessageDlg)
afx_msg LRESULT DoSomeThing(WPARAM iParam1,LPARAM iParam2);
//}}AFX_MSG
2.在CxxDlg的cpp文件中的AFX_MSG_MAP中加入一行消息与消息处理函数的映射,ON_MESSAGE(WM_MY_DOSOME,DoSomeThing),如下
//{{AFX_MSG_MAP(CTestmessageDlg)
ON_MESSAGE(WM_MY_DOSOME,DoSomeThing)//消息WM_MY_DOSOME与消息处理函数DoSomeThing关联
//}}AFX_MSG_MAP
在CxxDlg的cpp文件中加入消息处理函数的定义,
LRESULT CTestmessageDlg::DoSomeThing(WPARAM iParam1,LPARAM iParam2)
{
MessageBox("收到消息了,我要开始做一些事情了。","收到",MB_OK);
//可以运用iParam1,iParam2 来做一些事情。
return 0;
}
在CxxDlg的cpp文件中的需要的地方加入发送消息的代码,
::SendMessage(this->m_hWnd, WM_MY_DOSOME, (WPARAM) 0, (LPARAM) 0);
//this->m_hWnd接收者句柄
//WM_MY_DOSOME发送的消息
//0,0 参数
方法2.利用已有的虚函数WindowProc窗口函数来接收消息并处理
1.在CxxDlg的h文件中定义消息
#define WM_MY_DOSOME WM_USER+1 // do something
2.ctrl+w为CxxDlg类增加虚函数WindowProc,填充函数体如下
LRESULT CTestmessage1Dlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
// TODO: Add your specialized code here and/or call the base class
if (message==WM_MY_DOSOME)
{
AfxMessageBox("i got it");
}
return CDialog::WindowProc(message, wParam, lParam);
}
3.在CxxDlg的cpp文件中的需要的地方加入发送消息的代码,
::SendMessage(this->m_hWnd, WM_MY_DOSOME, (WPARAM) 0, (LPARAM) 0);
当然也可以发送系统预定义的一些消息,某些消息一经有预定义的处理函数
比如向窗口发送关闭消息即可关闭窗口
void CtseT1Dlg::OnBnClickedButton1()
{
//::SendMessage(this->m_hWnd, WM_CLOSE, (WPARAM) 0, (LPARAM) 0);
SendMessageW( WM_CLOSE, (WPARAM) 0, (LPARAM) 0);
}
refer to http://www.cnblogs.com/wqj1212/archive/2008/03/03/1089298.html