小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

[VC] 鼠標(biāo)事件的響應(yīng)

 @IT小小鳥@ 2012-02-16


鼠標(biāo)鍵包括左鍵、右鍵和中鍵(滾輪),每個(gè)鍵都有三種事件消息,一是被按下,二是被釋放,三是雙擊。下表列出了鼠標(biāo)操作、消息名稱及處理函數(shù)名。
 鼠標(biāo)操作 消息名稱  處理函數(shù)名 
 左鍵按下  WM_LBUTTONDOWN  OnLButtonDown
 左鍵釋放  WM_LBUTTONUP  OnLButtonUp
 左鍵雙擊  WM_LBUTTONDBCLK  OnLButtonDbClk
 右鍵按下  WM_RBUTTONDOWN  OnRButtonDown
 右鍵釋放  WM_RBUTTONUP  OnRButtonUp
 右鍵雙擊  WM_RBUTTONDBCLK  OnRButtonDbClk
 鼠標(biāo)移動(dòng)  WM_MOUSEMOVE  OnMouseMove
 滾輪移動(dòng)  WM_MOUSEWHEEL  OnMouseWheel

下面說(shuō)一下幾個(gè)消息響應(yīng)函數(shù)的原型(MFC下的)
按鍵按下和釋放以及鼠標(biāo)移動(dòng)的原型是一樣的,參數(shù)的意義也都一樣,以左鍵按下為例。
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
nFlags表示鼠標(biāo)、Shift鍵和Ctrl鍵的狀態(tài)組合,可以有如下情況:
 標(biāo)識(shí)符  功能描述
 MK_CONTROL  Ctrl鍵被按下
 MK_LBUTTON  鼠標(biāo)左鍵被按下
 MK_MBUTTON  鼠標(biāo)中鍵被按下
 MK_RBUTTON  鼠標(biāo)右鍵被按下
 MK_SHIFT  Shift鍵被按下

當(dāng)鍵被按下時(shí),對(duì)應(yīng)的標(biāo)識(shí)符的值就為真。例如,在左鍵按下的響應(yīng)中,如果Ctrl鍵同時(shí)被按下了,那么MK_CONTROL值為真,這樣可以通過(guò)與操作及或操作來(lái)定義任意的按鍵組合。
point包含了無(wú)懈可擊當(dāng)前位置相對(duì)于屏幕左上角的X和Y坐標(biāo)值。
滾輪的響應(yīng)函數(shù)與上面的響應(yīng)函數(shù)略有不同。
afx_msg void OnMouseWheel(UINT nFlags, short zDelta, CPoint pt);
nFlags和pt參數(shù)的含義同前面的nFlags和point,只說(shuō)一下zDelta。
zDelta表示滾輪滾動(dòng)的距離,是WHEEL_DELTA(被設(shè)定為120)的倍數(shù),正數(shù)時(shí),表示滾輪向前運(yùn)動(dòng)(離開用戶的方向,我們通常說(shuō)的向上),負(fù)數(shù)時(shí)則相反。
這個(gè)WHEEL_DELTA是動(dòng)作能否被響應(yīng)的一個(gè)閾值。滾輪每滾過(guò)一個(gè)這樣的距離才能響應(yīng)一次。之所以設(shè)定WHEEL_DELTA,是為適應(yīng)將來(lái)可能出現(xiàn)的高分辨率的甚至是可以自由滾動(dòng)的滾輪而設(shè)計(jì)的。
 
再說(shuō)一下關(guān)于鼠標(biāo)的捕獲
在上面的介紹中,我們提到了鼠標(biāo)的按下和釋放。如果我們?cè)诔绦虻拇翱趨^(qū)按下鼠標(biāo),移出窗口后再釋放鼠標(biāo),這時(shí)這個(gè)釋放鼠標(biāo)的操作就會(huì)丟失。就是說(shuō),如果沒(méi)有采用鼠標(biāo)捕獲的話,當(dāng)鼠標(biāo)在你的客戶區(qū)內(nèi)的時(shí)候,你可以得到鼠標(biāo)的消息,當(dāng)它移出你的客戶之后,你就得到到鼠標(biāo)的消息了。為防止這種情況的發(fā)生,可以采用鼠標(biāo)捕獲的技術(shù)。
在鼠標(biāo)開始使用時(shí)用SetCapture函數(shù)捕獲鼠標(biāo),當(dāng)鼠標(biāo)退出是用ReleaseCapture函數(shù)釋放捕獲。通常會(huì)在OnLButtonDown里捕獲鼠標(biāo),在OnLButtonUp里釋放捕獲。
使用鼠標(biāo)捕獲時(shí)還必須注意的一點(diǎn)是系統(tǒng)中只能有一個(gè)程序調(diào)用SetCapture,在不使用時(shí)必須調(diào)用ReleaseCapture釋放。而GetCapture可以知道當(dāng)前哪個(gè)窗口調(diào)用了SetCapture。
void SetCapture();
void ReleaseCapture();
調(diào)用ReleaseCapture時(shí)會(huì)產(chǎn)生一個(gè)WM_CAPTURECHANGED的消息

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多