Невозможно вывести местоположение курсора в строку отладки (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());
Другие вопросы по тегам