Текст на Дальнем Востоке не отображается в 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 поддерживает практически все языки, которые мы, вероятно, будем поддерживать, и это уже единственный, который мы используем для не западноевропейских языков.

Уже установлено несколько других шрифтов истинного типа, поэтому этот вариант (а не растровые шрифты) уже есть в нашей сборке ОС.

  1. Совместим ли этот arialuni.ttf с Windows Compact 7?
  2. Что-то нужно встроить в образ ОС, чтобы добавить поддержку дальневосточных языков, чтобы этот тип загрузки шрифтов и рисования текста работал?
  3. Я не прав насчет Tahoma, и теперь он поддерживает восточноевропейские языки?
  4. Что мне не хватает?

Спасибо за любые идеи.

1 ответ

  1. Эта версия arialuni.ttf действительно совместима с Windows Compact 7.

  2. Неясно. Что-то в образах ОС позволило шрифтовому мапперу под CE6 правильно отображать наши запросы, но не под CE7.

  3. Нет. Стандартный файл tahoma.ttf, встроенный в CE7, поддерживает наборы символов для Восточной Европы, но не наборы символов для Дальнего Востока.

  4. Наша программа вызывает 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. Этого, по-видимому, достаточно, чтобы заставить средство отображения шрифтов делать то, что мы хотим.

Другие вопросы по тегам