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来区别这两种情形。

下一章 编辑