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

时间:2018-08-31 10:27:45

标签: c++ winapi menuitem string-concatenation resource-files

我正在使用winapi编写一个win32应用程序 而且我想在我的资源文件中连接一个字符串,并将stantng作为菜单项显示给我的菜单项。 当我想将其提供给控件时,它就像一个魅力,但是当我想要 将其用于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 

1 个答案:

答案 0 :(得分: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“ ...”前缀