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中怎样在一个基于对话框程序中添加菜单栏 急。。。!

MFC中菜单响应函数如何创建?

新建一个MFC单文档程序含有菜单和工具栏,又建了一个对话框,如何直接显示对话框?

MFC对话框中如何响应弹出式菜单事件 点击按钮 弹出菜单 菜单消息事件响应不了

如何让MFC对话框中的Menu菜单变灰或恢复

如何让MFC对话框中的Menu菜单变灰或恢复