По какой-то причине, когда я пытаюсь вывести положение курсора мыши в данном окне 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
, на консоль отладки? Спасибо.
работал отлично. Благодарю. Я переключался между языками и не замечал этого как проблему. – xec86
@ xec86: Если это сработало для вас, вы используете неправильные настройки компилятора. Нет абсолютно никакой причины использовать кодировку символов ANSI. Весь код Windows должен быть написан с использованием Unicode, вызывая широкоформатную версию всех API, которые потребляют или производят строки, переходя от 'char' к' wchar_t' и добавляя все строковые литералы с помощью 'L'. Ваш компилятор укажет на нужные вам места, как только вы определите символы препроцессора UNICODE и '_UNICODE' в командной строке ('/DUNICODE/D_UNICODE'). – IInspectable
Спасибо за подсказку. Мне было интересно, почему предыдущие L, которые у меня были в некоторых фрагментах кода, которые я сохранил, не работали. – xec86