Windows程式設計 讀書筆記 – 滑鼠。

來源:互聯網
上載者:User

一、檢測滑鼠:

判斷是否有滑鼠: GetSystemMetrics(SM_MOUSEPRESENT);//WINDOWS98後有效

判斷滑鼠幾個鍵:GetSystemMetrics(SM_CMOUSEBUTTONS);//WINDOWS98後有效

 

二、滑鼠訊息,總共21個:

客戶區訊息

#define WM_MOUSEMOVE                    0x0200
#define WM_LBUTTONDOWN                  0x0201
#define WM_LBUTTONUP                    0x0202
#define WM_LBUTTONDBLCLK                0x0203
#define WM_RBUTTONDOWN                  0x0204
#define WM_RBUTTONUP                    0x0205
#define WM_RBUTTONDBLCLK                0x0206
#define WM_MBUTTONDOWN                  0x0207
#define WM_MBUTTONUP                    0x0208
#define WM_MBUTTONDBLCLK                0x0209

非客戶去訊息
#define WM_NCMOUSEMOVE                  0x00A0
#define WM_NCLBUTTONDOWN                0x00A1
#define WM_NCLBUTTONUP                  0x00A2
#define WM_NCLBUTTONDBLCLK              0x00A3
#define WM_NCRBUTTONDOWN                0x00A4
#define WM_NCRBUTTONUP                  0x00A5
#define WM_NCRBUTTONDBLCLK              0x00A6
#define WM_NCMBUTTONDOWN                0x00A7
#define WM_NCMBUTTONUP                  0x00A8
#define WM_NCMBUTTONDBLCLK              0x00A9

 

#define WM_NCHITTEST                    0x0084

 

lParam 表示滑鼠位置,高位y,低位x。對客戶區訊息來講,是客戶區座標,對非客戶區訊息來說,是螢幕座標。

wParam 對客戶區訊息來說,表示滑鼠鍵及SHIFT和CTRL狀態。

  判斷如下:

  wParam & MK_LBUTTON

  wParam & MK_RBUTTON

  wParam & MK_MBUTTON

  wParam & MK_SHIFT

  wParam & MK_CONTROL

這些在處理MOUSEMOVE的時候比較有用,比如在移動中判斷是否按下按鈕,在移動中是否按著SHIFT或CTRL。

對非客戶區訊息來說,表示移動或者單擊的非客戶區位置。

 

三、滑鼠訊息的處理過程。

  關鍵:WM_NCHITTEST,點擊測試訊息。

    此訊息優於其他一切客戶訊息和非客戶滑鼠訊息。 lParam代表x,y螢幕座標。wParam沒用。

    window應用程式把這個訊息發送給DefWindowProc,然後產生基於滑鼠位置的所有其他滑鼠訊息。

    對非客戶訊息,DefWindowProc的傳回值作為wParam的參數,這個值可以是任何非客戶區訊息加上以下內容:

      HTCLIENT      客戶區  //如果是這個,會將螢幕座標轉化為客戶區左邊,然後產生客戶區訊息。

      HTNOWHERE     不在視窗中

      HTTRANSPARENT    視窗由另一個視窗覆蓋

      HRERROR      使DefWindowProc發出轟鳴聲。

    舉例:禁止視窗滑鼠事件:

      case WM_NCHITTEST:

        return (LRESULT)HTNOWHERE;

 

四、游標函數:

  LoadCursor

  SetCursor

  ShowCursor

  GetCursorPos

 

五,如果一個自訂視窗在定義的時候,不包含CS_DBLCLKS,那視窗不會接收到雙擊事件,只能是兩個單擊。

 

六、捕獲和釋放滑鼠。

  SetCapture(hwnd);

  ReleaseCapture();

  捕獲滑鼠後,不管滑鼠在什麼地方產生訊息,訊息都會以客戶區訊息的方式傳送給hwnd視窗。

 

七、滾動輪。

  滾動輪產生訊息:WM_MOUSEWHEEL

  wParam 表明滑鼠鍵及SHIFT\CTRL是否被按下

    wParam的高位表示轉動的方向,正為前,負為後,等於120或-120。40為一行,所以滾動一下前進或後退3行。

  lParam 擷取滑鼠的位置,是相對於螢幕左上方的,而不是客戶區的。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.