MFC对话框向主窗体传递消息机制

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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"了。呵呵,最终效果如下

相关文档
最新文档