2008-12-08 105 views
8

我已經在一個已經存在的資源文件中定義了一個新對話框及其控件。我還創建了一個新文件,它將處理從此對話框中生成的事件。但我不知道如何連接這兩個。MFC>將對話框連接到對話框類

聲明enum { IDD=IDD_NEW_DIALOG };是否需要連接兩者?或者我們應該添加一些其他的聲明?

回答

14

這種通常在MFC中完成的方式是在資源編輯器中定義一個對話框模板(就像你所做的那樣),然後在C++中從CDialog派生一個類並將其與對話框模板關聯起來(它聽起來像你已經完成了 - 這並不完全清楚)。

實際上將兩者關聯的是CDialog代碼的構造函數。如果你看一下相關的對話框由MFC類嚮導代碼自動生成的,你會在構造函數中實現像這樣看:

CMyDlg::CMyDlg(CWnd* pParent /*=NULL*/) : CDialog(CMyDlg::IDD, pParent) 

其中的CMyDlg :: IDD與值定義爲枚舉您新的對話模板的標識符。正因爲如此,這一切才發生,而不是枚舉的聲明。你可以修改它

CMyDlg::CMyDlg(CWnd* pParent /*=NULL*/) : CDialog(IDD_NEW_DIALOG, pParent) 

,它仍然可以工作(假設IDD_NEW_DIALOG是您的對話框中的資源模板ID),因爲所有發生的事情是對話ID被傳遞到構造函數。

總而言之,儘管最初出現,但MFC並沒有通過編譯器魔法來綁定到Windows - 這一切都是用C++和一些宏完成的。

編輯:DIALOGEX和DIALOG聲明Windows可以理解的稍微不同的對話資源格式:前者比後者更新。然而,至少在Windows 95之後,兩者都已經存在,所以它不是一個非常重要的區別。

+0

感謝您的回覆。我從派生自CDialog的基類中派生類。所以我想這需要照顧的東西。 – Raghu 2008-12-09 05:27:11

0

使用類嚮導爲新創建的對話框創建一個類。 ctrl + w是UI資源視圖中的快捷鍵。

1

當您通過對話框類(非模式對話框的DoModal()Create)創建對話框時,這就是所需要的,這是常規方法。

你當然需要繼承CDialog,並添加一個消息映射將消息路由到你的ewvent處理函數。