-1

私はこのボードを持っています(0,0は左上です):

ブロックの高さと幅が LABEL_SIZE であるとしましょう。赤と青のドットがマウスクリックだとしましょう。このボードには 2 次元配列があり、マウスでクリックしたセル (青または赤の点) にアクセスしたいと考えています。そのため、列にアクセスするために ptCursor.x / LABEL_SIZE を計算し、行に ptCursor.y / LABEL_SIZE を計算する単純なロジックのように見えます。しかし、これを試すと、別のセルにアドレス指定されます(数マイル離れた場所など)。

どうしたの?

#define LABEL_SIZE 40
#define XLOCATION  ptCursor.x / LABEL_SIZE
#define YLOCATION  ptCursor.y / LABEL_SIZE

case WM_LBUTTONDOWN:
        ptCursor.x = LOWORD(lParam);
        ptCursor.y = HIWORD(lParam);
        return 0;

case WM_KEYDOWN:
    if (wParam >= VK_NUMPAD0 && wParam <= VK_NUMPAD9)
    {
        wsprintf(szWndText, szFormat, wParam - VK_NUMPAD0);
        SetWindowText(hwndLabels[XLOCATION][YLOCATION],
                      szWndText);
    }
    return 0;
4

1 に答える 1

1

これを読んでください:http://msdn.microsoft.com/en-us/library/windows/desktop/ms645607(v=vs.85).aspx

LOWORDおよびHIWORDマクロを使用してカーソル位置を抽出しないことをお勧めします。

システムに複数のモニターがある場合、座標が負になる可能性があり、それらのマクロはそれを処理しません。代わりに、 と を使用GET_X_LPARAMGET_Y_LPARAMます。

于 2013-01-16T22:52:17.873 に答える