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