MFC - 如何从菜单主机调用对话框
Posted
技术标签:
【中文标题】MFC - 如何从菜单主机调用对话框【英文标题】:MFC - How to call a dialog from the menu mainframe 【发布时间】:2012-03-08 21:31:38 【问题描述】:我在 Visual Studio 2010 中创建了一个 MFC SDI 应用程序,并希望从菜单主机中的自定义菜单项打开一个模式对话框。
创建对话框资源后,我向其中添加了一个名为 Dialog1 的类。它是从 CDialogEx 扩展而来的。然后我右键单击大型机/菜单栏中的自定义菜单条目并选择“添加事件处理程序”。在下面的窗口中,我选择将 COMMAND 和 UPDATE_COMMAND_UI 的函数添加到我的类对话框中。添加代码以调用对话框后,我的源文件(“Dialog1.cpp”)如下所示:
#include "stdafx.h"
#include "MFCtest.h"
#include "Dialog1.h"
#include "afxdialogex.h"
IMPLEMENT_DYNAMIC(Dialog1, CDialogEx)
Dialog1::Dialog1(CWnd* pParent /*=NULL*/)
: CDialogEx(Dialog1::IDD, pParent)
Dialog1::~Dialog1()
void Dialog1::DoDataExchange(CDataExchange* pDX)
CDialogEx::DoDataExchange(pDX);
BEGIN_MESSAGE_MAP(Dialog1, CDialogEx)
ON_COMMAND(ID_DIALOG_D1, &Dialog1::OnDialogD1)
ON_UPDATE_COMMAND_UI(ID_DIALOG_D1, &Dialog1::OnUpdateDialogD1)
END_MESSAGE_MAP()
void Dialog1::OnDialogD1()
Dialog1 dlg;
dlg.DoModal();
void Dialog1::OnUpdateDialogD1(CCmdUI *pCmdUI)
我知道我可能犯了一个愚蠢的错误。感谢您的帮助。
【问题讨论】:
【参考方案1】:您将处理程序添加到错误的类。您需要将它们添加到 CMainframe 类,而不是对话框类。
虽然您可能想从DoModal
捕获返回值以了解他们是否取消了对话框,但您用于调出对话框的代码看起来不错。
【讨论】:
以上是关于MFC - 如何从菜单主机调用对话框的主要内容,如果未能解决你的问题,请参考以下文章
新建一个MFC单文档程序含有菜单和工具栏,又建了一个对话框,如何直接显示对话框?