MFC-如何从菜单主机调用对话框

MFC - How to call a dialog from the menu mainframe

本文关键字:主机 调用 对话框 菜单 MFC-      更新时间:2023-10-16

我在Visual Studio 2010中创建了一个MFC SDI应用程序,并希望从菜单大型机中的自定义菜单项打开模式对话框。

创建对话框资源后,我添加了一个名为Dialog1的类。它是从CDialogEx扩展而来的。然后,我右键单击大型机/菜单栏中的自定义菜单项,并选择"添加事件处理程序"。在下面的窗口中,我选择将COMMAND和UPDATE_COMMAND_UI的函数添加到我的类Dialog中。添加调用对话框的代码后,我的源文件("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)
{
}

我知道我犯了一个愚蠢的错误。谢谢你的帮助。

您将处理程序添加到了错误的类中。您需要将它们添加到CMainframe类,而不是对话框类。

虽然您可能希望从DoModal中捕获返回值,以了解他们是否取消了对话框,但用于打开对话框的代码看起来很好。