Текст на Дальнем Востоке не отображается в Windows Compact 7
В Windows CE 6 я использую AddFontResource() для загрузки arialuni.ttf (Arial Unicode MS, версия 1.0.1) в список системных шрифтов, и появляются все наши поддерживаемые языки Дальнего Востока (японский, корейский, упрощенный и традиционный китайский) правильно, когда текст выводится на экран с использованием шрифта.
Эта же техника не создает дальневосточных символов на экране в Windows Compact 7. Вместо реальных символов, появляющихся на экране, я получаю пустые поля, что я видел, когда шрифт не поддерживает необходимый набор символов.
Я использую один и тот же код для обеих платформ и один и тот же файл шрифтов. Я отлаживал код, чтобы убедиться, что a) ОС утверждает, что шрифт действительно загружен в список системных шрифтов с помощью AddFontResource(), b) ОС утверждает, что шрифт загружается в контекст устройства экрана перед фактическим отображением текста. и c) Фактические дальневосточные символы находятся в буфере, который я передаю DrawText(). Это точно то же самое, что работает под CE6.
Странно то, что наши поддерживаемые восточноевропейские языки (русский, чешский, болгарский) правильно отображаются в Windows Compact 7 независимо от того, загружаю ли я arialuni.ttf. В реестре сказано, что системным шрифтом по умолчанию является Tahoma, но я не думаю, что Tahoma поддерживает что-либо, кроме основных западноевропейских языков. Это не под CE6.
Я бы предпочел не добавлять или использовать другие шрифты. Arialuni.ttf поддерживает практически все языки, которые мы, вероятно, будем поддерживать, и это уже единственный, который мы используем для не западноевропейских языков.
Уже установлено несколько других шрифтов истинного типа, поэтому этот вариант (а не растровые шрифты) уже есть в нашей сборке ОС.
- Совместим ли этот arialuni.ttf с Windows Compact 7?
- Что-то нужно встроить в образ ОС, чтобы добавить поддержку дальневосточных языков, чтобы этот тип загрузки шрифтов и рисования текста работал?
- Я не прав насчет Tahoma, и теперь он поддерживает восточноевропейские языки?
- Что мне не хватает?
Спасибо за любые идеи.
1 ответ
Эта версия arialuni.ttf действительно совместима с Windows Compact 7.
Неясно. Что-то в образах ОС позволило шрифтовому мапперу под CE6 правильно отображать наши запросы, но не под CE7.
Нет. Стандартный файл tahoma.ttf, встроенный в CE7, поддерживает наборы символов для Восточной Европы, но не наборы символов для Дальнего Востока.
Наша программа вызывает CreateFontIndirect(), чтобы получить дескриптор ресурса шрифта GDI, который мы можем выбрать в контексте устройства экрана при выводе текста на экран. Этот вызов использует структуру LOGFONT, которую мы заполняем атрибутами нужного нам шрифта, и за кулисами компонент системного сопоставления шрифтов просматривает шрифты, о которых он знает, и возвращает тот, который он считает наилучшим соответствием.
Изначально мы указали только рост, вес и имя семейства шрифтов. По умолчанию запрашиваемый набор символов был ANSI_CHARSET (0). Это всегда возвращало нам ссылку на шрифт arialuni.ttf на нашей платформе CE6. Однако на нашей платформе CE7 преобразователь шрифтов сопоставил запрос с файлом tahoma.ttf.
Я изменил содержание структуры LOGFONT, включив в него запрос японского набора символов (LOGFONT.lfCharSet = SHIFTJIS_CHARSET). На обеих платформах только файл шрифтов arialuni.ttf поддерживает этот язык, поэтому оба сопоставителя шрифтов теперь всегда возвращают нам ссылку на нужный шрифт.
Это изменение работает на платформах CE6 и CE7. Западноевропейские, восточноевропейские и дальневосточные языки теперь отображаются правильно, потому что arialuni.ttf поддерживает все эти наборы символов и многое другое.
Непонятно, почему платформа CE6 правильно сопоставила шрифт, а платформа CE7 - нет. Мы контролируем шрифты, встроенные в наши устройства, поэтому мы можем гарантировать уникальность поддержки японских символов только для arialuni.ttf. Этого, по-видимому, достаточно, чтобы заставить средство отображения шрифтов делать то, что мы хотим.