-
MFC & CreateWindowEX
Bonjour,
J'ai un problème avec un projet dans lequel je mixe des chaines de caractères Unicode et ANSI.
Ce projet vient d'être porté de VC6 vers VC8.
J'essaie d'afficher une chaine de caractères Unicode dans un contrôle CStatic d'une CDialog, sans avoir défini les constantes _UNICODE et UNICODE :
Code:
SetDlgItemTextW(this->m_hWnd, IDC_STATIC_WEBSITE,szBuf);
Dans un projet de test, lui aussi porté de VC6 vers VC8, il n'y a aucun soucis. Je passe une chaine de caractères chinois à SetDlgItemTextW, et la vois bien s'afficher sur le CStatic. (Pas de définition de _UNICODE et UNICODE ici non plus).
1ère piste :
Je suppose que la création de CDialog et de n'importe quel contrôle avec les MFC fait appel "dans la cave" à CreateWindowEx. Je suppose aussi que pour afficher des caractères unicode sur mon contrôle, il faut qu'il ai été crée avec CreateWindowExW. (dites moi si j'ai faux jusqu'ici). Donc, si mon raisonnement est bon, avec un outil type IDA (desassembleur) je devrais trouver une trace de CreateWindowExW, dans le binaire pour lequel l'affichage de caractères unicode fonctionne ....
Ce n'est pas le cas, par contre je vois bien SetDlgItemTextW ...
Auriez-vous une explication ??
Et Deuxieme question comment pourrais-je forcer l'appel de CreateWindowExW pour la création des controles qui afficheront des caracteres unicode ??
++
Fred
-
D'après la doc de IsWindowUnicode(), le fait qu'une fenêtre soit unicode ou non ne dépend pas du CreateWindow[Ex](), mais du RegisterClass[Ex]().
Bref, c'est la classe de fenêtre qui est unicode ou non, pas la fenêtre elle-même : On ne peut avoir une fenêtre unicode et une fenêtre non-unicode de la même classe.
Pour les contrôles simples, on peut supposer qu'ils sont tous unicode sous un Windows moderne. D'autres, comme les RichEdit, ont deux classes.
-
Ca voudrait dire que mon problème serait plutôt une histoire de mapping des bons glyphs pour les caracteres chinois dans ce cas ??
Sur cette piste, j'essaie de changer la police du controle par une police en chinois Traditionnel, mais ca ne marche pas non plus. Alors que les caracteres latins sont affichés correctement ...
-
c'est tombé en marche ....
La seule modif que j'ai faite est de passer mon fichier Rc en Unicode. Mais pour comprendre pourquoi cette soudaine tombée en marche, j'ai remis une version ANSI du fichier rc ... et ca marche toujours .... 8O
A comprends pas ?!?!?
La verite est ailleurs ....
To be continued !!