CreateWindowEx показывает тарабарщину вместо оригинального текста

У меня проблема. Я хотел задокументировать разработку своего инструмента, поэтому вместо того, чтобы писать дату поверх скриншота, я хотел, чтобы имя окна содержало данные о дате и времени. Но вместо строки у меня только китайские иероглифы.

тарабарщина

Вот мой код, где я хочу назначить строку для CreateWindowEx ():

char *wndName = "Asphyx V0.01 (Build Date: " __DATE__ " " __TIME__ ")\0";

hWnd = CreateWindowEx(NULL,
L"WindowClass",
(LPCWSTR)wndName,
WS_OVERLAPPEDWINDOW,
300,
300,
wr.right - wr.left,
wr.bottom - wr.top,
NULL,
NULL,
hInstance,
NULL);

РЕДАКТИРОВАТЬ: Ребята, я ценю ваши ответы, но все они дают мне это

Error 29 error C2308: concatenating mismatched strings

и единственное, что несколько сработало, — это еще удаленный ответ, но он дал мне следующее:

введите описание изображения здесь

он использовал этот код:

char title[256];
sprintf(title, "Asphyx V0.01 (Build Date:  %s - %s)", __DATE__, __TIME__);

hWnd = CreateWindowEx(NULL,
L"WindowClass",
title,
WS_OVERLAPPEDWINDOW,
300,
300,
wr.right - wr.left,
wr.bottom - wr.top,
NULL,
NULL,
hInstance,
NULL);

0

Решение

Согласно стандарту, если одна из строк имеет префикс кодирования, остальная часть строки, которая не имеет, будет обрабатываться как имеющая тот же префикс.

Это не относится к Visual Studio. Это ошибка.

Вы должны использовать широкую строку и префикс каждого строкового литерала с L в том числе макросы:

#define WSTR2( s ) L##s
#define WSTR( s ) WSTR2( s )

wchar_t *wndName = L"Asphyx V0.01" WSTR(__DATE__) L" " WSTR(__TIME__) L")";
4

Другие решения

проблема в том, что вы используете приведение для преобразования char в LPCWSTR, замените

char *wndName = "Asphyx V0.01 (Build Date: " __DATE__ " " __TIME__ ")\0";

в

 wchar_t *wndName = L"Asphyx V0.01 (Build Date: " __DATE__ " " __TIME__ ")";

Теперь вам не нужно больше приведений во втором параметре CreateWindowEx.

wchar_t *wndName = L"Asphyx V0.01 (Build Date: " __DATE__ " " __TIME__ ")";

hWnd = CreateWindowEx(NULL,
L"WindowClass",
wndName,
WS_OVERLAPPEDWINDOW,
300,
300,
wr.right - wr.left,
wr.bottom - wr.top,
NULL,
NULL,
hInstance,
NULL);
1

По вопросам рекламы [email protected]