2016-05-03 4 views
3

Sous Windows CE 6, j'utilise AddFontResource() pour charger arialuni.ttf (Arial Unicode MS, version 1.0.1) dans la liste des polices système, et tous nos supportés Les langues d'Extrême-Orient (japonais, coréen, chinois simplifié et traditionnel) apparaissent correctement lorsque le texte est affiché à l'écran en utilisant la police. La même technique ne produit pas de caractères extrême-orientaux sur l'écran sous Windows Compact 7. Je reçois des boîtes vides au lieu des caractères apparaissant à l'écran, ce que j'ai vu lorsque la police ne supporte pas le caractère nécessaire ensemble. J'utilise le même code pour les deux plates-formes et le même fichier de police. J'ai vérifié le code pour vérifier que a) Le système d'exploitation prétend que la police est réellement chargée dans la liste des polices système via AddFontResource(), b) Le système d'exploitation prétend que la police se charge dans le contexte de l'écran avant de dessiner le texte, et c) Les caractères réels d'Extrême-Orient sont dans le tampon que je passe à DrawText(). C'est exactement la même chose qui fonctionne sous CE6. Ce qui est curieux, c'est que nos langues d'Europe de l'Est supportées (russe, tchèque, bulgare) apparaissent correctement sur Windows Compact 7, que je charge arialuni.ttf ou non. Le registre dit que la police système par défaut est Tahoma, mais je ne pense pas que Tahoma supporte autre chose que les langues basiques d'Europe occidentale. Ce n'est pas sous CE6.Le texte en langue d'Extrême-Orient ne dessine pas dans Windows Compact 7

Je préfère ne pas ajouter ou utiliser d'autres polices. Arialuni.ttf supporte à peu près toutes les langues que nous sommes susceptibles de prendre en charge, et c'est déjà le seul et le seul que nous utilisons pour les langues non occidentales.

Plusieurs autres polices True-Type sont déjà installées, de sorte que l'option (et non les polices raster) est déjà présente dans notre système d'exploitation.

  1. Est-ce arialuni.ttf compatible avec Windows Compact 7?
  2. Y a-t-il quelque chose que vous devez intégrer dans l'image du système d'exploitation pour ajouter la prise en charge des langues d'Extrême-Orient pour que ce type de chargement de police et de dessin de texte fonctionne?
  3. Ai-je tort à propos de Tahoma et soutient-elle maintenant les langues de l'Europe de l'Est?
  4. Qu'est-ce qui me manque?

Merci pour toutes les idées.

+0

Qu'est-ce que vous utilisez pour créer votre application? Quel langage de programmation utilisez-vous? Sur quoi lancez-vous votre application? Je sais que Windows CE utilise Unicode par défaut. Est-il possible que vous deviez définir UNICODE dans votre projet pour Windows Compact 7? –

+0

Nous avons utilisé Visual Studio 2008 pendant des années avec succès sur CE 6 et continuons à l'utiliser avec succès avec Compact 7. Alors que nous avons des composants C#, celui en question est un exécutable C++. Nous avons toujours construit avec le soutien d'Unicode afin de prendre en charge les langues étrangères non occidentales telles que le russe, le bulgare, le tchèque, le japonais, le coréen et le chinois (traditionnel et simplifié). Comme je l'ai dit plus haut, seules les langues d'Extrême-Orient ne dessinent pas correctement, et je ne comprends pas pourquoi. – gozer61

Répondre

2
  1. Cette version de ARIALUNI.TTF est en effet compatible avec Windows Compact 7.

  2. Incertain. Quelque chose à propos des images du système d'exploitation a permis au mappeur de polices sous CE6 de mapper correctement nos requêtes, mais pas sous CE7. Non. Le tahoma.ttf par défaut intégré dans CE7 prend en charge les jeux de caractères d'Europe de l'Est mais pas les jeux de caractères Extrême-Orient.

  3. Notre programme appelle CreateFontIndirect() pour obtenir un handle pour une ressource de police GDI que nous pouvons sélectionner dans le contexte de périphérique de l'écran lors du dessin du texte à l'écran. Cet appel utilise une structure LOGFONT que nous remplissons avec les attributs d'une police que nous voulons, et dans les coulisses, le composant de mappeur de polices du système examine les polices dont il est conscient et renvoie celui qu'il pense être le meilleur.

    Initialement, nous ne spécifions que la hauteur, le poids et le nom de la famille de police. Par défaut, le jeu de caractères demandé était ANSI_CHARSET (0). Cela nous a toujours renvoyé une référence à la police arialuni.ttf sur notre plate-forme CE6. Sur notre plate-forme CE7, cependant, le mappeur de polices a mappé la requête au fichier tahoma.ttf.

    J'ai modifié le contenu de la structure LOGFONT pour inclure la demande du jeu de caractères japonais (LOGFONT.lfCharSet = SHIFTJIS_CHARSET). Sur les deux plates-formes, seul le fichier de police arialuni.ttf prend en charge cette langue. Par conséquent, les deux mappeurs de polices nous renvoient toujours une référence à la police souhaitée.

    Cette modification fonctionne sur les plates-formes CE6 et CE7. Les langues d'Europe de l'Ouest, d'Europe de l'Est et d'Extrême-Orient sont toutes correctement dessinées maintenant car arialuni.ttf supporte tous ces jeux de caractères, et plus encore.

On ne sait pas pourquoi la plate-forme CE6 a correctement mappé la police, contrairement à la plate-forme CE7. Nous contrôlons les polices intégrées dans nos appareils, nous pouvons donc garantir l'unicité du support des caractères japonais à juste arialuni.ttf. C'est apparemment suffisant pour que le mappeur de polices fasse ce que nous voulons.

+0

Est-ce que MS Mincho ne supporte pas le japonais? Et il était présent dans CE6, bien que je ne sois pas sûr de CE7 ... J'ai eu quelques problèmes semblables de texte affiché wierdly, bien que c'était pendant l'écriture dans le dossier, l'interface utilisateur s'est correctement affichée (c'était une interface japonaise). J'ai été conseillé de convertir le texte avant d'écrire, quelque chose comme ceci: // Pour Shift-JIS // cData est la donnée de texte à écrire dans le fichier. CStringA outputString = CW2A (cData, 932); cFichier.Write (outputString, :: strlen (outputString)); Que diriez-vous d'essayer un inverse de cela? – PRinCEKtd