您的位置:首页 > 其它

MFC在不同的类窗体之间传递消息

2017-10-24 15:45 411 查看
接收消息窗体,CMainFrame 

1 首先在头中定义消息:例如
#indefine WM_MYMESSAGE (WM_USER+100)

WM_MYMESSAGE是定义的宏:


定义消息处理函数。 

消息处理函数为消息目标类的成员函数。首先应该在.h 文件中声明。这里以主窗口类为例,主窗口类名 CMainFrame,则首先在CMainFrame.h声明消息处理函数。

public: 

afx_msg LRESULT OnCurTaskChanged(WPARAM wParam, LPARAM lParam);

3.在CMainFrame.cpp中实现消息处理函数
LPESULT CMainDialog::OnCurTaskChanged(WPARAM wParam, LPARAM lParam)
{
// TODO: 处理用户自定义消息
m_bIsOpen = false;

return 0;
}


4.在CMainFrame.cpp中映射消息ID和消息处理函数
BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWnd)
//{{AFX_MSG_MAP(CMainFrame)
ON_WM_CREATE()
ON_WM_TIMER()
ON_MESSAGE(WM_MY_MESSAGE, OnCurTaskChanged)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()


5、在CMainFrame中创建非模态对话框,通过按钮Click::OnDialogtest
void CMainFrame::OnDialogtest()
{
m_bIsOpen = false;
Cam_TestDlg *dlg = new Cam_TestDlg();
if (!m_bIsOpen)
{
dlg->Create(IDD_DIALOG_TEST, GetDesktopWindow());
dlg->ShowWindow(SW_SHOW);
m_bIsOpen = !m_bIsOpen;
m_bIsOpen = true;
}
//TODO: Add your command handler code here
}


在对话框Cam_TestDlg中发送消息
CMainFrame *pFrame;
pFrame = (CMainFrame*)AfxGetMainWnd();
PostMessageW(pFrame->m_hWnd,  WM_MY_MESSAGE,  NULL , NULL);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息