MFC对话框向主窗体传递消息机制
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
对话框向主窗体传递消息,在视图中显示
现举例说明对话框向主窗体传递消息,以及主窗体响应消息的过程。我们拿单文档来说明,我们要实现下列功能:通过对话框,在文本框中输入字符串,在视图中显示刚才输入的字符串。
1、在应用程序向导中选择单个文档,然后完成。我这里的项目名称为mybook
2、在资源视图中,插入一对话框,对话框名称为dlg_wzm。
3、在刚才生成的对话框中插入一文本框,设置好相应的类和变量。为确认按钮生成响应函数。同时在mybook.cpp的BOOL CMyBookApp::InitInstance()函数中让该对话框启动,也就是加入CDlg_wzm dlg; dlg.DoModal();两行程序,当然在前面的要加入#include "dlg_wzm.h"。(详细过程略)
4、下面重点在于点击该对话框的确认按钮向主窗体发送消息。要现定义一个消息名称。
在stdafx.h文件中加入一行:
#define WM_MYMESSAGE WM_USER+100
5、在CMainFrame的pulic申明中加入一变量CString wzmstr。目的是为了保存对话框中的字符串的值。在对话框的Onok()函数中:
void CDlg_wzm::OnOK()
{
// TODO: Add extra validation here
this->UpdateData(true);
CMainFrame* pWnd=(CMainFrame*)AfxGetMainWnd(); //得到父窗体的指针
pWnd->wzmstr=this->m_input_edit;
ASSERT(pWnd!=NULL);
::SendMessage(pWnd->GetSafeHwnd(), WM_MYMESSAGE,0,0); //发送消息
//注意WM_MYMESSAGE就是我们前面定义的消息。
//CDialog::OnOK();
}
6、下面我们看看主窗体怎么接受消息。我们要在主窗体中设置消息映射。
在mainfrm.h的protected声明中:
afx_msg void OnMyMessage(WPARAM wParam, LPARAM lParam);
在mainfrm.cpp文件中,
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
//{{AFX_MSG_MAP(CMainFrame)
// NOTE - the ClassWizard will add and remove mapping macros here.
// DO NOT EDIT what you see in these blocks of generated code !
ON_WM_CREATE()
ON_MESSAGE(WM_MYMESSAGE,OnMyMessage) //这里是我们加入的。
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
然后在mainfrm.cpp的文件最下面加入一个函数:
void CMainFrame::OnMyMessage(WPARAM wParam, LPARAM lParam)
{
CView *pView=this->GetActiveView(); //得到视图指针
if(pView)
{
CClientDC dc(pView);
dc.TextOut(0,0,wzmstr);//向视图中写入对话框中的edit中的字符串。
}
}
7、完成调试。什么?不能通过。那你肯定是忘记在dlg_wzm.cpp的开头加入#include "mainfrm.h"了。呵呵,最终效果如下