MFC - Как вызвать диалог из мейнфрейма меню - PullRequest
1 голос
/ 09 марта 2012

Я создал приложение MFC SDI в Visual Studio 2010 и хочу открыть модальное диалоговое окно из пользовательского пункта меню в мейнфрейме меню.

После создания ресурса диалога я добавил в него класс 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 Ответ

3 голосов
/ 09 марта 2012

Вы добавили обработчики в неправильный класс. Вам нужно добавить их в класс CMainframe, а не в класс диалога.

Ваш код для вызова диалогового окна выглядит нормально, хотя вы, возможно, захотите получить возвращаемое значение из DoModal, чтобы узнать, отменяли ли они диалог.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...