连接资源文件中的字符串并将其传递给菜单项字符串(winapi)c ++

问题描述 投票:0回答:1

我正在使用winapi编写一个win32应用程序,我想在我的资源文件中连接一个字符串,并将mixng作为它应该显示的字符串给我的menuitem。当我想把它给它一个控件它就像一个魅力,但当我想将它用于menuItem我得到一个错误信息。这可能是因为预处理器没有将连接看作字符串?

有没有人知道我可以尝试什么?有一些我试图遵循的类似帖子 - 但它给了我相同的结果......

其他帖子如此:

Concatenate string and constant in resource file in C++ (MFC)

Concate define and string in resources

C/C++ Macro string concatenation

当我按照这些回答时,我得到了“ID_ABOUT_STR”作为我的输出,而不是大多数时间的值...而且我得到了错误......

我希望问题很清楚,并提前感谢你的努力:)

.rc文件:

IDR_MENU1 MENU
BEGIN
    POPUP L"System"
    BEGIN
        MENUITEM ID_EXIT_STR, ID_SYSTEM_EXIT
        MENUITEM SEPARATOR
        MENUITEM ID_ABOUT_STR, ID_SYSTEM_ABOUT //here i want to give it the ID_ABOUT_STR which is in the resource file... 
    END
END

resource.h:VER_PRODUCTNAME_STR,另一个只包含字符串

#define ID_ABOUT_STR                 L"About" VER_PRODUCTNAME_STR L" " VER_FILE_DESCRIPTION_STR

这是我得到的错误:

Error       RC2122  unknown menu subtype                PRO-PRODUCITON      C:\XXX.rc       195 
Error       RC2125  expected ID value for menu item     PRO-PRODUCITON      C:\XXX.rc       195 
c++ winapi menuitem string-concatenation resource-files
1个回答
0
投票

从我的角度来看问题是L扩展。代码应该在没有L“...”前缀的情况下编译。

正如你的链接所示,这个宏在RC编译器中没有问题

#define CONCAT(a,b) a##b
#define STRINGIZE_(x) #x
#define STRINGIZE(x) STRINGIZE_(x)

作为示例,这适用于对话框中的标题

CAPTION STRINGIZE(CONCAT(Concat,Title))

但他们不使用L“...”前缀

© www.soinside.com 2019 - 2024. All rights reserved.