Невозможно вывести местоположение курсора в строку отладки (WIN32)
По какой-то причине, когда я пытаюсь вывести местоположение курсора мыши в заданном окне WIN32, используя следующий код:
//Global Variable
POINT cursorLocation;
// Win32 Windowing subsystem code redacted
LRESULT CALLBACK WindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam){
cursorLocation.x = GET_X_LPARAM(lParam);
cursorLocation.y = GET_Y_LPARAM(lParam);
switch(message){
case WM_MOUSEMOVE:
// mouse movement handle
OutputDebugString(cursorLocation.x + "," + cursorLocation.y);
OutputDebugString("\n");
// WM_MOUSEMOVE break
break;
}
}
Теперь, когда я запускаю программу и перемещаю мышь, в консоль записывается следующий текст:
меньший тип данных вызвал потерю данных.
Если это было преднамеренно, вы должны замаскировать источник приведения с соответствующей битовой маской.
Например: char c = (i & 0xFF);
Изменение кода таким образом не повлияет на качество полученного оптимизированного кода.
Я даже пытался типизировать переменные, переданные OutputDebugString
к LONG
потому что это тип переменных в POINT
класс и разницы не было.
Кто-нибудь знает, как передать значения через GET_X_LPARAM
а также GET_Y_LPARAM
к консоли отладки? Благодарю.
2 ответа
Это не конкатенация строк, а добавление .x
а также .y
указывать на ","
:
cursorLocation.x + "," + cursorLocation.y
Вместо этого попробуйте, например:
char s[256];
sprintf_s(s, "%d,%d", cursorLocation.x, cursorLocation.y);
OutputDebugStringA(s); // added 'A' after @IInspectable's comment, but
// using UNICODE and wchar_t might be better indeed
Конкатенация строк не работает с целыми числами. Попробуйте использовать std::ostringstream
:
std::ostringstream out_stream;
out_stream << cursorLocation.x << ", " << cursorLocation.y;
OuputDebugString(out_stream.str().c_str());