我有一个资源文件,需要使用连接宏和字符串创建字符串定义,类似这样
#define _STRINGIZE(n) #n
#define STRINGIZE(n) _STRINGIZE(n)
#define Word_ Word
100 DIALOGEX 0, 0, 172, 118
STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Hello"STRINGIZE(Word_)=>"Hello"Word"
但需要简单的" HelloWord"没有平均报价。
答案 0 :(得分:4)
对于任何关心的人:.rc文件是来自MFC项目的资源文件,用于定义UI元素,例如对话框布局。它使用与C ++相同的预处理器,但它不共享C ++的语法 - 并且在CAPTION字段的窗口中,两个字符串文字不会通过并置它们来连接。在字符串文字中,两个双引号实际上是一个生成一个双引号字符的转义序列。字面意思:
"Hello""World"
最终看起来像
Hello"World
在对话框窗口的标题中。
给出示例的问题:
CAPTION "Hello"STRINGIZE(Word_)
是否必须删除“Hello”末尾的双引号,但预处理器无法执行此操作。 但是,如果允许“Hello”包含在宏中,则可以进行连接。首先,我定义了这些宏:
#define CONCAT(a,b) a##b
#define STRINGIZE_(x) #x
#define STRINGIZE(x) STRINGIZE_(x)
然后,在对话框记录中:
...
EXSTYLE WS_EX_APPWINDOW
CAPTION STRINGIZE(CONCAT(Hello,World))
FONT 10, "Segoe UI Semibold", 600, 0, 0x0
...
有了这个,对话框的标题最终看起来像 HelloWorld - 没有杂散的引号或任何东西。 我希望你能使用这种技术。