Visual С++ 2012 RC, Win7
Китайский упрощенный
Свойства проектa > использовать многобайтовый набор символов
Когда я запускаю эту программу, заголовок окна показывает единственную букву "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 (Свойства проекта), сохраните исходный код без изменений, заголовок окна показывает "Пример", выглядит правильно.
Если я использую многобайтовый код, в исходном коде я использую WNDclass= {..., MyWindowClass} и RegisterClassA, сохраняйте CreateWindowExW без изменений, заголовок окна показывает слово "Пример", выглядит правильно.
Если я использую несколько байтов, в исходном коде я использую CreateWindowExA ( "MyWindowClass", "Sample" ), сохраняйте WNDCLASSW и RegisterClassW без изменений, заголовок окна показывает букву "S" .
Что заставляет показывать одиночный "S" , я что-то делаю неправильно?
Append
Если я сохраняю все неизменным, т.е. использую несколько байт, используйте код, показанный выше, заголовок окна показывает букву "S" .
(Если вы запустите эту программу и увидите "Образец" в заголовке окна, а не "S" , то это скорее определенная проблема в версии chs vС++ 2012 (или ОС)).