天天看點

寫了個VC++ MFC小工具,一鍵整理Resource.h檔案,重新排序并去重複ID(★firecat推薦★)

一般MFC開發的時候,如果有些資源是從其他工程中移植到本工程的,而在資源移植的時候都要将對應的資源ID複制到本工程的resource.h檔案中。此時不管你在不在本工程中添加資源ID,resource.h檔案中的ID可能都有重複的,一般再添加資源ID後,肯定有重複的。此外,随着界面越來越多,各種控件對話框的ID都堆積在一起,令人看得鬧心。

今天我自己整理了一個小工具,可以打開Resource.h檔案進行轉換,即可解決此問題。重新排序并去重複ID。

寫了個VC++ MFC小工具,一鍵整理Resource.h檔案,重新排序并去重複ID(★firecat推薦★)

1、使用說明

(1)本程式将MFC資源檔案Resource.h中的ID重新整理和排序;按照字母順序排序,拒絕重複ID;

(2)怕引發意外問題,程式不會改動原MFC的預設資源序号,例如:

#define IDR_MAINFRAME 128

維持現狀不變

(3)要求resource.h檔案的編碼必須是Windows系統預設的ANSI,否則會出現亂碼;

(4)MFC工程如果使用了ribbon工具欄,需要手動把res檔案夾下的ribbon.mfcribbon-ms檔案删除重建,否則MFC工程啟動會報錯;因為ribbon檔案裡的ID已經重新排序了,ID錯位會導緻消息映射混亂。

如何删除重建ribbon.mfcribbon-ms?

先進入VS資源視圖->*.rc->Ribbon->IDR_RIBBON,輕按兩下打開ribbon工具欄;

然後再去res路徑删除ribbon.mfcribbon-ms檔案;(注意删除之前一定先完成第1步,在資源視圖打開ribbon工具欄,否則ribbon.mfcribbon-ms檔案删除之後就再也打不開工具欄了)

回到ribbon工具欄,随便修改裡面的一個菜單文本或圖示,然後點選儲存,就會自動重新生成ribbon.mfcribbon-ms檔案。

(5)另外,請注意一點:文本打開res\*.rc檔案,跳轉到Icon欄目,微軟官方有說法:

// Icon with lowest ID value placed first to ensure application icon

// remains consistent on all systems.

就是說,目标檔案exe使用的圖示,優先考慮ID值最小的圖示檔案。

是以你需要确認IDR_MAINFRAME的數值是否比其他ico檔案的id小。

(6)謹慎起見,建議轉換前備份Resource.h和ribbon.mfcribbon-ms檔案

2、完整的源碼和可執行檔案請下載下傳:

https://download.csdn.net/download/libaineu2004/11221588

---引申閱讀,我從網上搜尋的教程得知的---

一、MFC如何删除未使用的資源符号?

1:打開資源視圖(ctrl+shift+e,或者從視圖選項中打開,或者輕按兩下資源檔案夾中的 .rc 檔案)

2:右擊資源視圖中的 .rc 檔案夾,打開 ID= 資源符号 項

3:在彈出的對話框中可以看到那些資源符号正在使用,那些未使用

4:可以删除未使用的資源符号 -- firecat注:個人感覺不靠譜,容易誤删。

寫了個VC++ MFC小工具,一鍵整理Resource.h檔案,重新排序并去重複ID(★firecat推薦★)

二、建立一個标準的MFC程式,留意到在Resource.h中預設有這樣一段宏定義

// Next default values for new objects  

//

#ifdef APSTUDIO_INVOKED

#ifndef APSTUDIO_READONLY_SYMBOLS

#define _APS_3D_CONTROLS 1

#define _APS_NEXT_RESOURCE_VALUE 130

#define _APS_NEXT_COMMAND_VALUE 32773

#define _APS_NEXT_CONTROL_VALUE 1000

#define _APS_NEXT_SYMED_VALUE 101

#endif

對照了一下自己初建的一個簡單的單文檔程式,找到了一些端倪,#define _APS_NEXT_CONTROL_VALUE 1000,那麼我就建立一個對話框,并在其中拉出一個控件,重新編譯,之後回到Resource.h中檢視,其ID值正是1000,其他幾項不用解釋相信大家已經知道怎麼使用了。

firecat注:這些宏就是指定了每次新增控件時,ID從哪裡開始算起。可以自行修改。