2012-03-08 56 views
1

我已經在Visual Studio 2010中創建了一個MFC SDI應用程序,並且想要從菜單主框架中的自定義菜單項中打開一個模式對話框。MFC - 如何從菜單主框架調用對話框

創建對話框資源後,我向它添加了一個名爲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) 
{ 
} 

我知道我proably犯了一個愚蠢的錯誤。謝謝你的幫助。

回答

3

您將處理程序添加到了錯誤的類。您需要將它們添加到CMainframe類中,而不是對話框類。

雖然您可能想要從DoModal中捕獲返回值,以確定是否取消了對話框,但用於調出對話框的代碼看起來很好。

+0

謝謝,這有很大的幫助。 – 2012-03-09 05:47:46