에 출력하지 커서 위치 : 나는 실행할 때 이제수 나는 다음과 같은 코드를 사용하여 출력에 주어진 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);
이 방법으로 코드를 변경해도 결과 최적화 코드의 품질에는 영향을 미치지 않습니다.
즉 POINT
클래스의 변수의 유형과 차이가 없기 때문에 나는 심지어하는 LONG
에 OutputDebugString
에 전달 된 변수를 타입 캐스팅했습니다.
GET_X_LPARAM
및 GET_Y_LPARAM
을 통해 값을 디버그 콘솔로 전달하는 방법을 아는 사람이 있습니까? 감사합니다. .
완벽하게 작동했습니다. 감사. 나는 언어 들간에 앞뒤로 전환 해 왔고 그것을 문제로 여기지 않았다. – xec86
@ xec86 : 제대로 작동했다면 잘못된 컴파일러 설정을 사용하고있는 것입니다. ANSI 문자 인코딩을 사용할 이유가 절대적으로 없습니다. 모든 Windows 코드는 유니 코드를 사용하여 작성해야하며, 문자열을 사용하거나 생성하는 모든 API의 와이드 문자 버전을 호출하고,'char'에서'wchar_t'로 전환하고, 모든 문자열 리터럴을'L'로 시작해야합니다. 커맨드 라인 ('/ DUNICODE/D_UNICODE')에'UNICODE'와'_UNICODE' 전처리 기 심볼을 정의하면 컴파일러는주의가 필요한 위치를 알려줍니다. – IInspectable
팁 주셔서 감사. 나는 내가 구한 일부 코드 단편에서 앞에 붙어 있던 L이 왜 작동하지 않는지 궁금해했다. – xec86