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來區別這兩種情形。

下一章

編輯