-
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 !!