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

Win32 Window アプリケーションのチュートリアルに従っています。上記のコードは、ウィンドウ画面のタイトル バーの名前を設定するために使用されます。コンパイラは私に怒鳴ります:「'const char [12]' から 'LPCWSTR' に変換できません」ただし、実行時に、ウィンドウ画面のタイトルが漢字になります。文字列を変えてみましたが、どういうわけか、漢字は常に文字列に応じて変化します。XP Visual C++ 2008 Express Edition を使用していますが、非 Unicode プログラムの設定として英語 (米国) を取得しました。理解できません。文字列が中国語になるのはなぜですか?

4

2 に答える 2

11

アプリケーションは Unicode アプリケーションとしてコンパイルされています (これはプロジェクト設定で定義されています)。つまり、Windows API 関数に渡す文字列は、次のように指定されたワイド文字列である必要がありますL"MyTitleName"。実際には文字列型を変更しないため、LPCWSTR にキャストすることはできません。文字列をそうでないものとして渡そうとするだけです。

このコードは動作するはずです:

wcex.lpszClassName = L"MyTitleName";

 // code snipped

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

チュートリアルの元のコードを変更せずに使用する場合は、Unicode モードを無効にすることができます。プロジェクトのプロパティで [全般] タブに移動し、 に設定Character SetUse Multi-Byte Character Setます。いつか追加の言語をサポートしなければならない可能性のあるプログラムでは、これを行わないでください。

于 2010-01-21T17:33:57.667 に答える
7

それはあなたの (LPCWSTR) キャストによるものです。それはコンパイラをシャットダウンし、何か間違ったことをしたことを伝えます。文字列はまだ Unicode 文字列ではなく、キャストによって変換されません。修理:

wcex.lpszClassName = L"MyTitleName";
wndHandle = CreateWindow(
              L"MyTitleName",     //the window class to use
              L"MyTitleName",     //the title bar text
于 2010-01-21T17:35:37.007 に答える