4

の構造は次のMSGとおりです。

typedef struct tagMSG {
  HWND   hwnd; 
  UINT   message; 
  WPARAM wParam; 
  LPARAM lParam; 
  DWORD  time; 
  POINT  pt; 
} MSG, *PMSG; 


メッセージ手順は次のとおりです。

long WINAPI WndProc(HWND hWnd, UINT iMessage, UINT wParam, LONG lParam)

私の質問POINT: メッセージ プロシージャで、変数をウィンドウ プロシージャに渡さない理由と、マウスのPOINT. によってGetCursorPos()? 私はいくつかの例がLOWORD(lParam), HIWORD(lParam)直接それを得るのを見つけます..それについての情報を教えてもらえますか? ありがとうございました...

誰かがこれを書いているのを見たことがありますが、そうですか? わからない:

RECT rect1;
long WINAPI WndProc(HWND hWnd,UINT iMessage,UINT wParam,LONG lParam)
{
    HDC hDC;        
    WORD x,y;   
    PAINTSTRUCT ps;     

    x = LOWORD(lParam); 
    y = HIWORD(lParam);

    switch(iMessage)
    {
    case WM_LBUTTONDOWN:
        if(wParam&MK_CONTROL)
        {
            rect1.left = x; 
            rect1.top = y;
        }
        else if(wParam&MK_SHIFT)
        {
            rect1.left = x; 
            rect1.top = y;
        }
        break;

    case WM_DESTROY:
        PostQuitMessage(0);
        return 0;
    default:
        return(DefWindowProc(hWnd,iMessage,wParam,lParam));
    }
    return 0;
}
4

2 に答える 2

8

プロセス関数で、プロセス関数に POINT 変数を渡さない理由と、マウスの POINT を見つける方法を教えてください。

本当に必要な場合は、その情報を取得する別の関数があります。ほとんどのメッセージ ハンドラーはマウス入力を処理しません。また、ほとんど使用しないメッセージ ハンドラーに追加の引数を渡しても意味がありません。(おそらくWndProc、 を取るように定義されていた可能性がありMSG*ます。その設計の理由はわかりませんが、MSG時間の経過とともにメンバーが構造に追加されたと思います。)

GetCursorPos() で?

No.はカーソルの現在のGetCursorPos位置を返します。これは、メッセージが生成されたときの位置とは異なる場合があります。代わりに が必要です。(これはvsに似ています。)GetMessagePosGetAsyncKeyStateGetKeyState

同様に、メッセージ ハンドラは を通じてメッセージ時間を取得できますGetMessageTime

于 2012-05-07T07:31:27.537 に答える
4

座標は消えません。彼らはにいlParamます。MSDN の WM_MOUSEMOVE メッセージを参照してください。

A window receives this message through its WindowProc function.
...
lParam

    The low-order word specifies the x-coordinate of the cursor.
The coordinate is relative to the upper-left corner of the client area.

    The high-order word specifies the y-coordinate of the cursor.
The coordinate is relative to the upper-left corner of the client area.
...
Use the following code to obtain the horizontal and vertical position:

xPos = GET_X_LPARAM(lParam);
yPos = GET_Y_LPARAM(lParam);
于 2012-05-07T06:10:22.223 に答える