Windows Programming/資源腳本
Windows平台SDK包含工具軟件rc.exe,即資源(腳本)編譯器(Resource Script Compiler)。資源腳本(Resource scripts)參見資源腳本參考。
什麼是資源腳本
編輯被資源編譯器處理的文件稱為資源腳本。資源腳本的內容包括GUI數據,編譯後可連結入可執行程序中。程序可以訪問包含在資源腳本中的數據。
資源的類型
編輯常見資源包括:
- 下拉菜單
- 彈出菜單
- 文本字符串
- 鍵盤加速鍵(按鍵組合,如[Ctrl]+[C]複製操作)
- 圖標(Icon)
- 位圖
- 對話框
- 版本信息
- 鼠標光標(Mouse Cursor)
生成一個資源腳本
編輯資源腳本的語法類似於C語言。因此,資源腳本編譯器使用標準的C預編譯器。大部分資源腳本使用宏值,因此通常在頭文件「resource.h」中定義宏並把這個頭文件包含在資源腳本中;該頭文件也被包含在主程序中。
使用資源腳本
編輯資源連結存入可執行程序中,視資源類型不同有不同的訪問資源的方法。例如,用LoadString函數訪問字符串資源,用LoadIcon函數訪問圖標資源。
要想訪問資源,必須有可執行程序的實例句柄(instance handle)。
例如:
HINSTANCE ghInstApp = AfxGetInstanceHandle();
HRSRC hRsrc = FindResource(ghInstApp, //实例句柄
MAKEINTRESOURCE(IDR_DATA1), //资源ID
RT_RCDATA); //资源类别
ASSERT(hRsrc);
DWORD len = SizeofResource(ghInstApp,hRsrc);
ASSERT(len);
HGLOBAL hGlobal = LoadResource(ghInstApp,hRsrc);
MAKEINTRESOURCE
編輯資源的名字可以是字符串,也可以是數值。如果是數值,不應超過無符號16位整數的表達範圍(0 至 65 535)。在邏輯地址空間,最開始的64K內存是保護的,用戶態程序不應該讀寫它。因此,向系統調用傳入一個值,如果小於64K,則可以推斷出不會是內存地址。系統相關的API統一接受數值或者字符串標識的資源的名字,通過判斷它是否小於64K來區別這兩種情形。