-1

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;
}
4

2 に答える 2

1

2番目の引数としてバッファ長を忘れました。ドキュメントを参照してください

wchar_t displayMessage[100];
swprintf(displayMessage, 100, L"(%d, %d)", x, y);

更新:に使用%lldlong longます。

于 2013-03-15T22:09:44.610 に答える
0

%dの正しい識別子ではありませんlong long

どうしても C 言語を使用する場合はswprintf、変数を に変更してintください。または使用します%lld。または、以下のようにキャストします。

swprintf(displayMessage, 100, L"(%d, %d)", (int)x, (int)y);

編集:

C 言語が嫌いな場合は、このコンテキストで使用する必要はありません。

これは、使用されている整数型に関係なく機能します。

    std::wstringstream stream;
    stream << L"(" << x << L", " << y << L")";
    DrawText(hdc, stream.str().c_str(), -1, &rect, NULL);
于 2013-03-15T22:21:12.200 に答える