Visual C++ 2012 RC、Win7
中国語(簡体字
プロジェクトのプロパティ > マルチバイト文字セットを使用
このプログラムを実行すると、ウィンドウのタイトルに「Sample」という単語全体ではなく、1 文字の「S」が表示されます。
#pragma comment(linker, "/SubSystem:Windows")
#include <windows.h>
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, PSTR, int) {
WNDCLASSW wc = { 0 };
wc.style = CS_VREDRAW | CS_HREDRAW;
wc.hInstance = hInstance;
wc.hIcon = LoadIcon(nullptr, IDI_APPLICATION);
wc.hCursor = LoadCursor(nullptr, IDC_ARROW);
wc.hbrBackground = reinterpret_cast<HBRUSH>(GetStockObject(WHITE_BRUSH));
wc.lpszClassName = L"MyWindowClass";
wc.lpfnWndProc = [](HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
if (uMsg - WM_DESTROY)
return DefWindowProc(hWnd, uMsg, wParam, lParam);
else {
PostQuitMessage(0);
return HRESULT();
}
};
RegisterClassW(&wc);
CreateWindowExW(0, L"MyWindowClass", L"Sample",
WS_OVERLAPPEDWINDOW | WS_VISIBLE, CW_USEDEFAULT, SW_SHOW, CW_USEDEFAULT, 0,
nullptr, nullptr, hInstance, nullptr);
for (MSG msg; GetMessage(&msg, nullptr, 0, 0); DispatchMessage(&msg));
}
Unicode (プロジェクト プロパティ) を使用し、ソース コードを変更しない場合、ウィンドウ タイトルは "Sample" と表示され、正しく表示されます。
マルチバイトを使用する場合、ソース コードで WNDCLASS = { ..., "MyWindowClass" } と RegisterClassA を使用し、CreateWindowExW を変更せず、ウィンドウ タイトルに "Sample" という単語が表示され、正しいように見えます。
マルチバイトを使用する場合、ソース コードで CreateWindowExA("MyWindowClass", "Sample") を使用し、WNDCLASSW と RegisterClassW を変更せずに、ウィンドウ タイトルに文字 "S" を表示します。
単一の「S」が表示される理由は何ですか? 何か間違っていますか?
追加
すべてを変更しない場合、つまり、マルチバイトを使用し、上記のコードを使用すると、ウィンドウのタイトルに文字「S」が表示されます。
(このプログラムを実行して、ウィンドウ タイトルに "S" ではなく "Sample" が表示される場合は、vc++ 2012 (または OS) の chs バージョンに固有の問題である可能性が高くなります)。