c++ - 我怎样才能使 DirectWrite PadWrite 示例工作?

标签 c++ visual-studio-2012 directwrite

我正在尝试了解 DirectWrite API,这样我就可以获得一个灵活的解决方案来解决从任何文化中呈现文本的问题,并有可能使用它来将富文本编辑合并到一个比“固定的”编辑/显示文本的方式。

PadWrite sample看起来很棒,并展示了 API 的设计是多么的好——这是微软自己的截图:

Screenshot of PadWrite

示例文本包括以“混合脚本:”开头的一行 在源代码中,所有示例文本均由单个 C++ wchar_t[] 文字指定,并且混合脚本全部正确显示Visual Studio 2012 的代码编辑器。如果我将它们复制并粘贴到普通的 Windows 写字板中,它们也能正确显示。阿拉伯语从右到左的部分在这两个编辑器中都有正确的插入符号导航行为。

但是当我实际运行 PadWrite 示例时,这些都不起作用。相反,我看到了这个:

enter image description here

它几乎看起来像是被转换成 UTF-8 然后被误解了(这没有意义,因为它都是用 wchar_t 完成的。)

我运行的是 Windows 8.1。我需要做什么才能使 PadWrite 像写字板或 Visual Studio 2012 一样工作?它是来自从未更新过的 API 预发布版本的失效示例吗?

注意。第一个警告标志是 PadWrite 一开始甚至没有编译 - 在文件 EditableLayout.cppTextEditor.cpp 中我不得不在 #include 之后添加它 语句:

#undef max
#undef min

最佳答案

我在 MSDN forums 上得到了答案.问题在于,自创建示例以来,Visual C++ 编译器已更改,因此它不再能够检测 UTF-8 编码而不存在 UTF-8 签名,而 Visual Studio 仍然可以。并且创建了示例,因此源文件没有 UTF-8 签名。

因此,VS 的代码编辑器在源文件中正确显示字符,但在编译源文件时,字符被错误解释。

所以解决方案是使用另存为使用编码保存...,然后选择Unicode(带有签名的UTF-8) .

关于c++ - 我怎样才能使 DirectWrite PadWrite 示例工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20518040/

相关文章:

c++ - 根据多个条件对结构进行排序?

templates - 为什么 WiX 无法在 Visual Studio 2012 Express 中工作?

c++ - 具有 C++11 和线程支持的 Visual Express C++

c# - 为什么 Direct2D 和 DirectWrite 不使用传统的 COM 对象?

fonts - DirectWrite (CreateTextFormat) 如何选择后备字体?

c++ - Qt5 是否破坏了 QwtPlotRenderer postscript 支持?

c++ - 在没有 stdio 的情况下将数字转换为字符串 C

c++ - 查找矩形外的网格起点

visual-studio - Microsoft Help Viewer 2.0 在代理后不起作用