2010-01-21 25 views
3
HWND wndHandle; //global variable 

// code snipped 

WNDCLASSEX wcex; 

// code snipped 

wcex.lpszClassName = (LPCWSTR) "MyTitleName"; 

// code snipped 

wndHandle = CreateWindow(
      (LPCWSTR)"MyTitleName",  //the window class to use 
      (LPCWSTR)"MyTitleName",  //the title bar text 
... 
... 

Je suis un tutoriel pour l'application Win32 Window. Le code ci-dessus est utilisé pour définir le nom de la barre de titre de l'écran de la fenêtre. Le compilateur me crie: "Impossible de convertir 'const char [12]' en 'LPCWSTR'" alors d'accord, j'ai typé ma chaîne "MyTitleName" avec (LPCWSTR), et tout a bien été compilé. Cependant, pendant l'exécution, le titre de l'écran de la fenêtre s'avère être des caractères chinois. J'ai essayé de changer la corde autour et les caractères chinois changent toujours selon ma chaîne en quelque sorte. J'utilise XP Visual C++ 2008 Express Edition et j'ai l'anglais (États-Unis) comme paramètre pour les programmes non-Unicode. Je ne comprends pas. Comment se fait-il que la chaîne devienne chinoise?Création d'une application Windows Win32 avec barre de titre en anglais, mais la barre de titre devient chinois de nulle part. Comment venir?

Répondre

9

Votre application est en cours de compilation en tant qu'application Unicode (définie dans les paramètres du projet). Cela signifie que les chaînes que vous transmettez aux fonctions de l'API Windows doivent être des chaînes de caractères larges, spécifiées comme suit: L"MyTitleName". Vous ne pouvez pas transtyper en LPCWSTR car cela ne changera pas le type de chaîne, il essaiera simplement de passer la chaîne comme quelque chose qui ne l'est pas.

Ce code devrait fonctionner:

wcex.lpszClassName = L"MyTitleName"; 

// code snipped 

wndHandle = CreateWindow(
      L"MyTitleName",  //the window class to use 
      L"MyTitleName",  //the title bar text 
      ... 

Si vous voulez utiliser le code d'origine du tutoriel sans le modifier, vous pouvez désactiver le mode unicode: Dans les propriétés du projet allez à l'onglet « Général », et définir Character Set à Use Multi-Byte Character Set. Ne le faites pas pour n'importe quel programme qui pourrait avoir à supporter des langues supplémentaires un jour.

7

C'est à cause de votre distribution (LPCWSTR). Cela a juste fermé le compilateur, vous disant que vous avez fait quelque chose de mal. La chaîne n'est toujours pas une chaîne Unicode et n'est pas convertie par la distribution. Corrigé:

wcex.lpszClassName = L"MyTitleName"; 
wndHandle = CreateWindow(
       L"MyTitleName",  //the window class to use 
       L"MyTitleName",  //the title bar text