Как я могу получить образец DirectWrite PadWrite для работы?

Я пытаюсь узнать об DirectWrite API, чтобы получить гибкое решение проблемы рендеринга текста из любой культуры и, возможно, использовать его для включения редактирования расширенного текста в приложение с гораздо большим контролем, чем «стандартные» способы. редактирования / отображения текста.

Образец PadWrite выглядит великолепно и демонстрирует, насколько хорошо спроектирован API — это собственный скриншот Microsoft о том, как он должен выглядеть:

Снимок экрана PadWrite

Текст примера включает в себя строку, которая начинается «Смешанные сценарии:» В исходном коде весь образец текста определяется одним C ++ wchar_t[] литерала, и смешанные сценарии отображаются правильно в редакторе кода Visual Studio 2012. Если я копирую и вставляю их в обычный Windows WordPad, они также отображаются правильно. И арабская секция справа налево имеет правильное поведение каретки-навигации в обоих этих редакторах.

Но ничего из этого не работает, когда я на самом деле запускаю образец PadWrite. Вместо этого я вижу это:

введите описание изображения здесь

Похоже, что он конвертируется в UTF-8, а затем неправильно интерпретируется (что не имеет смысла, потому что все это делается с wchar_t.)

Я использую Windows 8.1. Что мне нужно сделать, чтобы PadWrite работал так же, как WordPad или Visual Studio 2012? Это несуществующий пример из предварительной версии API, которая так и не была обновлена?

NB. первым предупреждающим знаком было то, что PadWrite даже не компилировался сначала — в файлах EditableLayout.cpp а также TextEditor.cpp Я должен был добавить это после #include заявления:

#undef max
#undef min

1

Решение

Я получил ответ на Форумы MSDN. Проблема в том, что с момента создания образца компилятор Visual C ++ был изменен, так что он больше не может обнаруживать кодировку UTF-8 без присутствия сигнатуры UTF-8, тогда как Visual Studio все еще может. И образец был создан таким образом, чтобы исходные файлы не имели подписи UTF-8.

В результате редактор кода VS правильно отображает символы в исходном файле, но при компиляции исходного кода символы интерпретируются неправильно.

Таким образом, решение заключается в использовании Сохранить как, Сохранить с кодировкой … а затем выбрать Юникод (UTF-8 с подписью).

2

Другие решения

Для сборки с VS 2013 позвольте Visual Studio преобразовать файлы проекта и решения. В Common.h удалите эти строки:

#if (_MSC_VER >= 1200) // want to use std::min and std::max
#undef min
#undef max
#define min(x,y) _cpp_min(x,y)
#define max(x,y) _cpp_max(x,y)
#endif

Компилятор также будет жаловаться на недоступный код в catch (...) блок в EditableLayout :: Clear. Просто закомментируйте однострочное тело блока catch. Я думаю, что есть некоторая путаница между исключениями в стиле C ++ и исключениями SEH.

0

По вопросам рекламы [email protected]