2013-09-30 93 views
2

這基本上是問題here的擴展。MFC資源ID唯一性

我正在一箇舊的MFC應用程序,它似乎resource.h文件已被手動編輯,並已變得混亂。我看到那裏有衝突的ID。

我只是想確認我們是否可以擁有兩個具有不同類型的相同ID的資源。 例如,我有類似

IDD_1  101 
IDS_2  101 

IDR_1  102 
IDS_2  102 

基本上,存在具有相同ID定義的資源,但不同的類型。

對原始問題的評論說Resources of the same type don't share identifiers。如果這是真的,它是否也適用於IDR_xxxx ID?

我在問,因爲我使用的是Resource ID Organiser,它似乎認爲所有ID都必須是唯一的。

回答

2

儘管不推薦它使用不同類型的工作。 API FindResource使用ID和類型來標識資源。您更可能遇到的問題圍繞MFC使用資源ID來引用其他資源的方式進行,例如,工具欄按鈕的幫助文本。這些錯誤可能非常耗時,因此您可能只想咬緊牙關並重新編號,以便您的資源ID唯一。

0

這取決於代碼如何使用控件。例如,如果控件是帶有重複ID的按鈕,那麼使用它就沒有問題。另一方面,如果控件是菜單的輸入,則當用戶單擊相關事件時,查找第一個可用ID。我認爲最好重新排列重複的ID。

0

聽起來像你需要一個資源重新編號工具。這裏有一個免費的&開源之一: https://sourceforge.net/projects/resrenum/

從幫助文件: 「ResRenum重新編號資源ID在Visual Studio C++項目這是一個控制檯應用程序,它專門用於集成到IDE中作爲一個外部工具。它與從MFC 6.0開始的任何Visual Studio版本兼容...資源在每種資源類型內按字母順序排序,資源類型按照Windows規則進行排序。「

請注意,如果您的資源ID堅持微軟約定此方法僅適用,例如對話ID應該與IDD_啓動等等,看TN020 ID命名和編號約定: https://msdn.microsoft.com/en-us/library/t2zechd4.aspx