Creazione di un'applicazione Win32 Finestra con barra del titolo inglese, ma la barra del titolo diventa cinese fuori dal nulla. Come mai?

StackOverflow https://stackoverflow.com/questions/2111368

Domanda

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

sto seguendo un tutorial per l'applicazione Win32 finestra. Il codice di cui sopra viene utilizzato per impostare il nome della barra del titolo della finestra dello schermo. Il compilatore mi grida: "non può convertire da 'const char [12]' a 'LPCWSTR'" "MyTitleName" così va bene, ho typecasted mia stringa con (LPCWSTR), e tutto compilato bene. Tuttavia, durante l'esecuzione, il titolo della finestra dello schermo risulta essere caratteri cinesi. Ho provato modificare la stringa intorno ed i caratteri cinesi a cambiare sempre secondo la mia stringa in qualche modo. Sto usando XP Visual C ++ 2008 Express Edition e ho ottenuto inglese (Stati Uniti) come impostazione per i programmi non Unicode. Io non capisco. Come mai la stringa di diventare cinese?

È stato utile?

Soluzione

L'applicazione viene compilato come applicazione unicode (questo è definito nelle impostazioni del progetto). Ciò significa che le stringhe si passa a funzioni API di Windows ha bisogno di essere stringhe di caratteri estesi, indicati in questo modo: L"MyTitleName". Non puoi lanciare a LPCWSTR perché non sarà effettivamente cambiare il tipo di stringa, sarà solo cercare di passare la stringa fuori come qualcosa che non è.

Questo codice dovrebbe funzionare:

wcex.lpszClassName = L"MyTitleName";

 // code snipped

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

Se si desidera utilizzare il codice originale dal tutorial senza modificarlo, è possibile disattivare la modalità unicode: Nel progetto proprietà vai alla scheda 'Generale', e impostare Character Set a Use Multi-Byte Character Set. Non fare questo per qualsiasi programma che potrebbe avere per supportare altre lingue, un giorno.

Altri suggerimenti

Questo è a causa della vostra (LPCWSTR) cast. Che appena chiuso il compilatore up, che ti dice che hai fatto qualcosa di sbagliato. La stringa non è ancora una stringa Unicode e non viene convertito dal cast. Correzione:

wcex.lpszClassName = L"MyTitleName";
wndHandle = CreateWindow(
              L"MyTitleName",     //the window class to use
              L"MyTitleName",     //the title bar text
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top