一个关于#include的问题
来源:互联网 发布:公共卫生论文知乎 编辑:程序博客网 时间:2024/05/16 01:35
一个关于#include的问题 |
赵湘宁 |
问题: 我试图将一个头文件包含在工程的资源文件中。为此在.rc文件中添加了如下一行代码: #include "MyFile.h" 虽然运行没有问题,但是每次在Visual Studio中打开资源时,它都把这一行代码删除掉了。我之所以要包含这个头文件是因为想使用第三方定义的菜单项ID号。 解答: 讨厌的IDE环境有时总是以刁难你的代码为乐趣,你说是不是?请不要怕,莫高一尺、道高一丈,对于这种问题总是有办法解决它的。在打开.rc文件的时候,App Studio(Visual Studio资源编辑器的老名称)自己要对这个文件作一些处理。在存储文件时,它并不重新产生这个文件并另存。特别是App Studio喜欢有一个而且只有一个头文件来包含所定义的全部资源符号。通常,这个文件叫resource.h,但是你可以通过在MyApp上单击右键并选择“Resource Includes”(资源包含)来改变这个文件的名字。当App Studio写入资源文件的时候,它产生一个而且只产生一个#include语句。任何用手东方式敲入的附加的#include都会像前面那样被删掉。 |
图八 对话框边空(Dialog Margins) |
是否能对它进行处理呢?当然可以。你可能注意到了App Studio将自己专用的信息嵌入到资源文件中。例如,你可能创建了一个带边空的对话框(如图八)。你是否知道App Studio将边空尺寸存在哪了吗?并没有存在对话框的语句中,因为它没有MARGINS选项。其实,App Studio将这些信息存在了一个特殊的段中: |
//#ifdef APSTUDIO_INVOKEDGUIDELINES DESIGNINFO DISCARDABLE BEGIN IDD_MYDIALOG, DIALOG BEGIN LEFTMARGIN, 8 RIGHTMARGIN, 502 TOPMARGIN, 8 BOTTOMMARGIN, 273 ENDEND#endif // APSTUDIO_INVOKED// |
APSTUDIO_INVOKED是在当App Studio 处理.rc文件时定义的,而不是在通常资源编译器编译它的时候定义的。资源编译器根本就不会明白“GUIDELINES”的意思;只有App Studio才会明白。为什么#include的问题会牵扯到“GUIDELINES”呢?因为这个问题的答案依赖于APSTUDIO_INVOKED。你要做的全部工作只是将要包含的文件一下面的形式#include就可以了: |
//#ifndef APSTUDIO_INVOKED // if NOT defined#include "MyOtherHeader.h"#endif// |
App Studio在运行时,因为定义了APSTUDIO_INVOKED,所以它忽略掉你的#include。但当没有定义APSTUDIO_INVOKED时,RC编译器就会编译你#include的文件。此外——也是最重要的一点——App Studio在它存储你的.rc文件时会保护你的#include语句。它识别: “这里的这个#ifndef块不是我的,所以我想最好还是不删除它...” 如果你的好奇心想知道为什么App Studio总是要删除开始那样添加的代码——那是另外一个故事! 我们下次再讲吧。 |
- 一个关于#include的问题
- 一个关于#include的问题
- 一个关于#include的问题
- 一个关于#include的问题
- 一个关于#include的问题
- 一个关于#include的问题
- 关于include的一个困惑
- include 的一个小问题
- 关于jsp include文件时的一个乱码解决的问题
- 一个简单的jsp include问题
- 关于#include "GdiplusMem.h"的问题
- 关于android include标签的细节问题
- 关于freemarker include文件路径的问题
- 关于freemarker include文件路径的问题
- 关于include里加入根目录的问题
- 关于结构指针类型数组做函数参数的一个问题#include<stdio.h>typede
- 关于#include的应用
- 关于jsp的include
- 企业服务性能优化之使用 COM 可封送的参数
- Tip: execute ad-hoc JavaScript through eval function
- 对话:关于架构、设计与需求
- 李开复:21世纪7种人才最抢手
- 1.3 项目管理的角色
- 一个关于#include的问题
- (转)Google地图API之优劣分析
- 通过编程来让企业服务以服务程序方式运行
- Tip - SQL报表打印的空白页问题
- 《Web性能测试实战》签名赠书活动&加盟光芒国际传媒的好机会
- IIS5 UNICODE 编码漏洞的利用心得
- 1.2 web开发,厨房,急诊室
- 从表达式到函数:表面的简洁
- 使用Grid来对WPF页面进行布局排版