Win32アプリケーションでマウスのX値とY値を表示する方法としてこの関数を使用しようとしています。x値を置き換えますが、yの場合はゼロに設定します。理由がわからず、アプリケーション中にブレークポイントを設定しました。Yは0ではありません。
編集データ型を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;
}