2010-01-25 41 views
6

我在想如何Visual Studio聯繫MFC CDialog派生類與其對應的對話框資源。我對運行時的連接方式不感興趣(如here),而是在設計時。visual studio如何將mfc對話框類與對話框資源相關聯?

當我將消息處理程序添加到對話框時,它如何知道要將處理程序添加到哪個類。 另外,是否有可能有幾個CDialog派生類與相同的對話框資源相關聯,反之亦然?

...我已經尋找了IDD_SOMEDIALOG字符串的項目目錄,但只發現它在SomeDialog.hresource.hProject.rc在預期的地方,所以我想它在某種程度上推斷,從這些文件中SomeDialog.h連接,最有可能的枚舉:

// in class CSomeDialog: 
    enum { IDD = IDD_SOMEDIALOG }; 

我這樣問,主要是出於好奇。

回答

4

這取決於dev studio的版本。

在VS6中它全部保存在CLW(類嚮導文件)中。

在新版本的開發工作室它不再使用CLW,我不知道具體如何知道,但我懷疑它是一個實時解析,而不是使用緩存的CLW。

至於有多個派生的對話使用相同的資源,它可以手動完成。您可以複製創建的類文件並重命名它們,並從頭中刪除枚舉,並將源文件中IDD枚舉的使用編輯爲實際的對話資源ID(IDD_SOMEDIALOG)。

AFAIK Dev Studio一次只能「愉快地」處理一個類到一個對話框。根據我的經驗,嘗試重新使用這樣的對話資源,最終只會在與MFC & Dev Studio的爭鬥中結束,因爲他們不打算這樣做。

+0

這看起來確實如此,請參閱我的更新以獲取更多詳細信息。 – 2010-01-26 09:17:32

2

爲了增加紅潤的回答是:

我發現我的一些對話框類中,我更換了enum { IDD }static const int IDD沒有任何再與其對話資源相關聯。恢復到枚舉重新關聯它們。所以Visual Studio似乎會解析源代碼來確定關係。

至於資源共享,對於哪個類應該接收事件處理程序代碼將是不明確的。類似共享似乎是不可能的,因爲它依賴於IDD,它不能同時分配給IDD_SOMETHINGIDD_SOMETHING_ELSE