4

我有一个资源文件,需要用连接宏和字符串创建字符串定义,像这样

#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”。

4

1 回答 1

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 —— 没有杂散的引号或任何东西。我希望你能使用这种技术。

于 2012-09-28T22:09:54.477 回答