Win32 응용 프로그램에서 마우스의 X 및 Y 값을 표시하는 방법으로이 함수를 사용하려고합니다. x 값을 대체하지만 y 값은 0으로 설정합니다. 나는 이유를 알 수 없으며 응용 프로그램에서 중단 점을 설정했습니다. Y가 0이 아닙니다.swprintf 값을 변환하지 않습니다.
편집 데이터 형식을 int로 변경했는데, 현재 작동 중입니다. 필자는 입력을 다르게 처리하고 있기 때문에 원래는 오랜 시간이 걸렸으며 함수에는 해당 데이터 유형이 필요했습니다. 나는 그것을 다시 잊었다. 왜 오래 오래 사용할 수 없었는지 나는 잘 모르겠다.
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int wmId, wmEvent;
PAINTSTRUCT ps;
HDC hdc;
static long long x = -1, y = -1;
switch (message)
{
case WM_MOUSEMOVE:
{
x = LOWORD(lParam);
y = HIWORD(lParam);
InvalidateRect(hWnd, 0, TRUE);
break;
}
case WM_COMMAND:
wmId = LOWORD(lParam);
wmEvent = HIWORD(wParam);
// Parse the menu selections:
switch (wmId)
{
case IDM_ABOUT:
DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
break;
case IDM_EXIT:
DestroyWindow(hWnd);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
break;
case WM_PAINT:
{
hdc = BeginPaint(hWnd, &ps);
RECT rect;
rect.left = x + 20;
rect.top = y - 20;
rect.right = x + 200;
rect.bottom = y + 200;
wchar_t displayMessage[100];
swprintf(displayMessage, 100, L"(%d, %d)", x, y);
DrawText(hdc, displayMessage, -1, &rect, NULL);
EndPaint(hWnd, &ps);
break;
}
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
코드를 변경했습니다. y는 여전히 0으로 반환됩니다. – Emrys90
'displayMessage'의 값이 "(123, 0)"과 같은 것을 의미합니까? 'y'가 완전한 데이터인지 확인하십시오. 실제로는 0이 아닙니다. – Mikhail
나는 그랬다. 실행 중에 값이 무엇인지 알기 위해 중단 점을 설정합니다. 0이 아닙니다. – Emrys90