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

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

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

最佳答案

从我的角度来看,问题在于 L 扩展。代码应该在没有 L"..."前缀的情况下进行编译。

正如您的链接所示,该宏在 RC 编译器中工作没有问题

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

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

CAPTION STRINGIZE(CONCAT(Concat,Title))

但他们不使用 L"..."前缀

关于c++ - 连接资源文件中的字符串并将其传递给菜单项字符串(winapi)c++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52113487/

相关文章:

c++ - 提供按值和按引用都可用的函数版本

c++ - Eclipse报错 'Function ' MessageBoxA'无法解析'但还是编译成功?

html - CSS 自动边距不适用于绝对定位的元素

javascript - Dojo 菜单栏项目在页面关闭后保持焦点

cocoa - 同时打开多个文档,每个文档都有不同的菜单项状态

c++ - 在 C++ 中实现可用回调的好方法

c++ - 用于将数组转换为 vector 的 Memcpy

c++ - 如何将 int 转换为 LPARAM c/c++?

c# - 当我们使用 winapis 将字符串作为参数传递时如何将 c# 字符串转换为 c++ 字符串

c++ - 在构造函数中初始化静态数组 (C++)