使用 AfxGetMainWnd()
和消息映射
这种方法适用于 CResumeManagementSystemView
是主框架窗口的一部分的情况。你可以使用 AfxGetMainWnd()
获取主窗口指针,然后发送消息给它。如果你的视图是从 CView
或 CFormView
派生的,可以通过主窗口找到视图并发送消息。
实现步骤:
- 定义自定义消息:在
CResumeManagementSystemView
中定义一个自定义消息常量。
- 发送消息给主窗口:在对话框按钮的响应函数中使用
PostMessage
向主窗口发送消息。
- 转发消息到视图:在主窗口中捕获消息并将它转发给
CResumeManagementSystemView
。
- 处理视图中的消息:在
CResumeManagementSystemView
中添加消息映射以处理接收到的消息。
示例代码:
在 CResumeManagementSystemView
中定义自定义消息:
1 2
| #define WM_USER_RESUME_ADDED (WM_USER + 100)
|
在对话框按钮的响应函数中发送消息:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| void CResumeInfoDlgAdd::OnBnClickedOk() { UpdateData(TRUE);
CMainFrame* pMainFrame = (CMainFrame*)AfxGetMainWnd(); if (pMainFrame != NULL) { pMainFrame->PostMessage(WM_USER_RESUME_ADDED, 0, 0); }
OnOK(); }
|
在另一个窗口中捕获消息并转发给视图:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| BEGIN_MESSAGE_MAP(CMainFrame, CFrameWndEx) ON_MESSAGE(WM_USER_RESUME_ADDED, &CMainFrame::OnUserResumeAdded) END_MESSAGE_MAP()
LRESULT CMainFrame::OnUserResumeAdded(WPARAM wParam, LPARAM lParam) { CView* pActiveView = GetActiveView(); if (pActiveView && dynamic_cast<CResumeManagementSystemView*>(pActiveView)) { pActiveView->PostMessage(WM_USER_RESUME_ADDED, wParam, lParam); } return 0; }
|
在 CResumeManagementSystemView
中处理消息:
1 2 3 4 5 6 7 8 9 10 11 12 13
| BEGIN_MESSAGE_MAP(CResumeManagementSystemView, CFormView) ON_MESSAGE(WM_USER_RESUME_ADDED, &CResumeManagementSystemView::OnUserResumeAdded) END_MESSAGE_MAP()
LRESULT CResumeManagementSystemView::OnUserResumeAdded(WPARAM wParam, LPARAM lParam) { AfxMessageBox(_T("简历已添加!"));
return 0; }
|