《Windows程序設計》讀書筆記------------->>鼠標基礎和顯示區域鼠標消息

計算機法真的很快,我2年前的電腦現在就已經不怎麼行了,連一個殺毒軟件都算大型。。。雖然 Charles Petzold說,鼠標不是必需的。不過現在看來,沒有鼠標的電腦是沒有辦法想象的。可能一個程序不知此鍵盤沒有什麼人會抱怨,不過不支持鼠標就是天大的罪過了。畢竟,鼠標的出現讓電腦易用性大幅度提高,而計算機的普及纔是真正推動計算機發展的動力吧。。。。不然MONEY哪裏來呀。。

所以,在事實上,檢測鼠標是否存在的意義並不是很大,不過既然有這個函數,那就記錄把:

fMouse = GetSystemMetrics (SM_MOUSEPRESENT) ;        //檢測鼠標是否存在

cButtons 
= GetSystemMetrics (SM_CMOUSEBUTTONS) ;      //檢測鼠標按鍵數

fSwap
=GetSystemMetrics (SM_SWAPBUTTON) ;       //檢測是否反鍵

除了檢測外,還可以制定鼠標的圖標,在建立窗口的時候可以指定:

wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;

顯示區域鼠標消息

和其他的消息相同,鼠標消息也是從消息循環中取得的,它們的消息有:

按下

釋放

按下(雙鍵)

WM_LBUTTONDOWN

WM_LBUTTONUP

WM_LBUTTONDBLCLK

WM_MBUTTONDOWN

WM_MBUTTONUP

WM_MBUTTONDBLCLK

WM_RBUTTONDOWN

WM_RBUTTONUP

WM_RBUTTONDBLCLK

使用方法也和其他的相同,其中,鼠標的座標由lParam傳遞

= LOWORD (lParam) ;        
= HIWORD (lParam) ;

同時,可以通過位與(這個。。。我沒學好,忘記叫什麼了)的方式獲得是否在點擊的同時按下了SHIFT等按鍵:

MK_LBUTTON

按下左鍵

MK_MBUTTON

按下中鍵

MK_RBUTTON

按下右鍵

MK_SHIFT

按下Shift鍵

MK_CONTROL

按下Ctrl鍵

例如,如果收到了WM_LBUTTONDOWN消息,而且值

wparam & MK_SHIFT

是TRUE(非0),您就知道當左鍵按下時也按下了Shift鍵。

 

處理雙鍵的時候,需要在窗口樣式中指定支持:

wndclass.style = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS ;

 

既然知道了具體的怎麼實現,那麼就寫一個例子吧,書上的例子除了用到了鼠標消息外還有其他的一些知識。我比較懶,就直接寫了個單單關於鼠標消息的例子了:)

其他部分都是自動生成的,就貼出消息處理那部分好了,主要要提前定義變量就是了。

 

    case WM_LBUTTONDOWN:
        x
=LOWORD(lParam);
        y
=HIWORD(lParam);
        count
++;
        InvalidateRect(hWnd,NULL,
0);
        
break;
    
case WM_PAINT:
        hdc 
= BeginPaint(hWnd, &ps);
        
// TODO: 在此添加任意繪圖代碼...
        MoveToEx(hdc,p.x,p.y,NULL);
        
if(count==1)MoveToEx(hdc,x,y,0);
        LineTo(hdc,x,y);
        p.x
=x;
        p.y
=y;
        EndPaint(hWnd, 
&ps);
        
break;

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章