错误 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的主要内容,如果未能解决你的问题,请参考以下文章
编辑 rc 文件,然后在 VC 对话框向导中打开它时,由于 TBS_NOTIFYBEFOREMOVE 出现错误 RC2104