sendmessage 自定义消息----------------

来源:互联网 发布:适合程序员的输入法 编辑:程序博客网 时间:2024/05/17 03:51

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 classif (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



原创粉丝点击