У меня проблема. Я хотел задокументировать разработку своего инструмента, поэтому вместо того, чтобы писать дату поверх скриншота, я хотел, чтобы имя окна содержало данные о дате и времени. Но вместо строки у меня только китайские иероглифы.
Вот мой код, где я хочу назначить строку для 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);
Согласно стандарту, если одна из строк имеет префикс кодирования, остальная часть строки, которая не имеет, будет обрабатываться как имеющая тот же префикс.
Это не относится к 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")";
проблема в том, что вы используете приведение для преобразования 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);