MFC使用PostMessage与SendMessage发消息
1. 在Resource.h中添加自定义消息ID:
#define WM_USER_TREE (WM_USER+400)//WM_USER+num,num至少为100
2. 定义消息处理函数的函数声明:
afx_msg LRESULT MsgTree(WPARAM wpa, LPARAM lpa);
3. 在类的消息映射表中添加该消息的消息映射入口项:
ON_MESSAGE(WM_USER_TREE, &CTreeTestDlg::MsgTree)
4. 在类实现中添加消息处理函数的函数实现:
LRESULT CTreeTestDlg::MsgTree(WPARAM wpa, LPARAM lpa)
{
AfxMessageBox(_T("MsgTree响应成功!"));
return lpa;
}
5. 在需要该消息的地方发送出消息(此步中的句柄HWND很关键,句柄是否正确影响着消息是否能够发出,以下为我试验成功的案例):
HWND hwnd;
CString str = _T("TreeTest");
hwnd = ::FindWindow(NULL, str);
if (hwnd)
{
//::SendMessage(hwnd, WM_USER_TREE, 0, 0);//SendMessage在此效果相同
::PostMessage(hwnd, WM_USER_TREE, 0, 0); //向caption为TreeTest的对话框发送消息
}
/************************************分界线***********************************/
HWND MainHwnd = AfxGetMainWnd()->m_hWnd;
if (MainHwnd)
::PostMessage(MainHwnd, WM_MAINFRM_TREE, 0, 0);//向主框架发送消息
/************************************分界线***********************************/
CMainFrame *pFrame = (CMainFrame*)AfxGetApp()->GetMainWnd();
CTestView *pView = (CTestView *)pFrame->GetActiveView();
HWND hwnd = pView->GetSafeHwnd();
if (hwnd)
::PostMessage(hwnd, WM_USER_TREE, 0, 0);//向view类发送消息