错误 RC2104:未定义的关键字或键名:WS_EX_LAYOUTRTL

Posted

技术标签:

【中文标题】错误 RC2104:未定义的关键字或键名:WS_EX_LAYOUTRTL【英文标题】:error RC2104: undefined keyword or key name: WS_EX_LAYOUTRTL 【发布时间】:2013-10-10 13:52:50 【问题描述】:

我正在 VS 2012 中设计一个 RTL 对话框,我偶然发现了以下错误:

谷歌搜索结果为零,这非常罕见。

任何想法是什么问题以及如何解决?

在 .rc 对话框中定义 WS_EX_LAYOUTRTL 可以修复它,以及将 WS_EX_LAYOUTRTL 替换为 0x00400000L,但这些解决方案当然不会真正起作用,因为 .rc 文件是自动生成的并且更改会丢失。

【问题讨论】:

这篇 MS 开发中心文章可能对您有所帮助:How to Ensure Text is Displayed with the Correct Reading Direction。 你必须正确设置target Windows version,WINVER必须至少为0x0500。 我在 stdafx.h 中定义了 WINVER,但它似乎对 .rc 文件没有影响。在 .rc 文件中定义 WINVER 使其工作,但这不是解决方案。 ...在输入评论时,我发现 WINVER 应该包含在资源的流程定义中,这是解决方案属性中的一个单独选项卡。您可能想将其发布为答案,以便我接受。 如果您将#define 添加到资源文件的TEXTINCLUDE 部分,它将在自动生成中继续存在。这是一个奇怪的问题,我只是尝试在我的一个对话框中设置该标志并且它工作正常,而且我的资源文件似乎没有在任何地方定义WINVER 感谢@JonathanPotter。在看到您的评论之前,这实际上也是我解决它的方法。 Here's a minimal project 证明了这个问题。 VS 有一个从模板(带有窗口等)创建新项目的选项,它不会受到问题的影响,因为它包含一个“targetver.h”文件in it's TEXTINCLUDE 【参考方案1】:

答案是:您应该在 .rc 文件中定义适当的 WINVER 值。由于 .rc 文件是由资源编辑器自动生成的,因此您不能在任何地方定义它,因为它会被覆盖。您可以使用the TEXTINCLUDE section 来防止它被覆盖。

示例(第 5 行):

/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 2 resource.
//
#define WINVER 0x0500 // <-- ADDED
#include "afxres.h"

和(第 3 行):

2 TEXTINCLUDE 
BEGIN
    "#define WINVER 0x0500 // <-- ADDED\r\n"
    "#include ""afxres.h""\r\n"
    "\0"
END

【讨论】:

以上是关于错误 RC2104:未定义的关键字或键名:WS_EX_LAYOUTRTL的主要内容,如果未能解决你的问题,请参考以下文章

在 django 模板中显示字典索引或键名

编辑 rc 文件,然后在 VC 对话框向导中打开它时,由于 TBS_NOTIFYBEFOREMOVE 出现错误 RC2104

mfc 中的error RC2104 : undefined keyword or key name

Mongoose 变量键名

php数组指定位置键插入元素

对静态 constexpr 数据成员的未定义引用错误