計算機法真的很快,我2年前的電腦現在就已經不怎麼行了,連一個殺毒軟件都算大型。。。雖然 Charles Petzold說,鼠標不是必需的。不過現在看來,沒有鼠標的電腦是沒有辦法想象的。可能一個程序不知此鍵盤沒有什麼人會抱怨,不過不支持鼠標就是天大的罪過了。畢竟,鼠標的出現讓電腦易用性大幅度提高,而計算機的普及纔是真正推動計算機發展的動力吧。。。。不然MONEY哪裏來呀。。
所以,在事實上,檢測鼠標是否存在的意義並不是很大,不過既然有這個函數,那就記錄把:
cButtons = GetSystemMetrics (SM_CMOUSEBUTTONS) ; //檢測鼠標按鍵數
fSwap=GetSystemMetrics (SM_SWAPBUTTON) ; //檢測是否反鍵
除了檢測外,還可以制定鼠標的圖標,在建立窗口的時候可以指定:
顯示區域鼠標消息
和其他的消息相同,鼠標消息也是從消息循環中取得的,它們的消息有:
鍵 |
按下 |
釋放 |
按下(雙鍵) |
左 |
WM_LBUTTONDOWN |
WM_LBUTTONUP |
WM_LBUTTONDBLCLK |
中 |
WM_MBUTTONDOWN |
WM_MBUTTONUP |
WM_MBUTTONDBLCLK |
右 |
WM_RBUTTONDOWN |
WM_RBUTTONUP |
WM_RBUTTONDBLCLK |
使用方法也和其他的相同,其中,鼠標的座標由lParam傳遞
y = HIWORD (lParam) ;
同時,可以通過位與(這個。。。我沒學好,忘記叫什麼了)的方式獲得是否在點擊的同時按下了SHIFT等按鍵:
MK_LBUTTON |
按下左鍵 |
MK_MBUTTON |
按下中鍵 |
MK_RBUTTON |
按下右鍵 |
MK_SHIFT |
按下Shift鍵 |
MK_CONTROL |
按下Ctrl鍵 |
例如,如果收到了WM_LBUTTONDOWN消息,而且值
是TRUE(非0),您就知道當左鍵按下時也按下了Shift鍵。
處理雙鍵的時候,需要在窗口樣式中指定支持:
既然知道了具體的怎麼實現,那麼就寫一個例子吧,書上的例子除了用到了鼠標消息外還有其他的一些知識。我比較懶,就直接寫了個單單關於鼠標消息的例子了:)
其他部分都是自動生成的,就貼出消息處理那部分好了,主要要提前定義變量就是了。
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;