滑鼠輸入函數(Mouse Input)
= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
= = = = = = = = = = = = = = = = = = = =
DragDetect
函數功能:該函數捕獲並跟蹤滑鼠的移動直到使用者鬆開左鍵、按下Esc。鍵或者將滑鼠移動到圍繞指定點的“拖動矩形”之外。拖動矩形的寬和高由函數GetSystemMetrics返回的SM_CXDRAG或SM_CYDRAG確定。
函數原型:BOOL DragDetect(HWND hwnd,POINT pt);
參數:
hwnd:接受滑鼠輸入的視窗的控制代碼。
pt:滑鼠在螢幕座標下的初始位置,此函數根據這個點來確定拖動矩形的座標。
傳回值:如果使用者在按著滑鼠左鍵時將滑鼠移出了拖動矩形之外,則返回非零值;如果使用者按著滑鼠左鍵在拖動內移動滑鼠,則傳回值是零。
備忘:拖動矩形的系統度量是可構造的,允許更大或更小的拖動矩形。
速查:Windows NT: 4.0及以上版本;Windows:95及以上版本;Windows
CE:不支援;標頭檔:winuser.h;輸入庫:user32.lib。
= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
= = = = = = = = = = = = = = = = = = = =
GetCapture
函數功能:該函數取得捕獲了滑鼠的視窗(如果存在)的控制代碼。在同一時刻,只有一個視窗能捕獲滑鼠;此時,該視窗接收滑鼠的輸入,無論游標是否在其範圍內。
函數原型:HWND GetCapture(VOID)
參數:無。
傳回值:傳回值是與當前線程相關聯的捕獲視窗的控制代碼。如果當前線程裡沒有視窗捕獲到滑鼠,則返回NULL。
備忘:返回NULL並不意味著系統裡沒有其他進程或線程捕獲到滑鼠,只表示當前線程沒有捕獲到滑鼠。
速查:Windows NT:4.0及以上版本;Wiodows:95及以上版本;Windows
CE:1.0及以上版本;標頭檔:winuser.h;輸入庫:user32.lib。
= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
= = = = = = = = = = = = = = = = = = = =
GetDoubleClickTime
函數功能:該函數取得滑鼠的當前雙擊時間。一次雙擊是指對滑鼠鍵的兩次連擊,第一次擊鍵後在指定時間內擊第二次。雙擊時間是指在雙擊中,第一次擊鍵和第二次擊鍵之間的最大毫秒數。
函數原型:UINT GetDoubleClickTime(VOID)
參數:無。
傳回值:返回是當前雙擊時間,按毫秒計算。
速查:Windows NT:4.0及以上版本;Windows:95及以上版本;Windows
CE:1.0及以上版本;標頭檔:winuser.h;輸入庫:user32.lib。
= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
= = = = = = = = = = = = = = = = = = = =
GetMouseMovePoints
函數原型:int GetMouseMovePoints(UINT cbSize,LPMOUSEMOVEPOlNT lppt,LPMOUSEMOVEPOINT
IpptBuf,int,nBufPoints,DWORD resolution);
參數:
cbSize:結構MOOSEMOVEPOINT的大小。
lppt:指向結構MOUSEMOVEPOINT的指標,該結構包含了有效滑鼠座標(螢幕座標)。也可以包含一個時間標記。
函數GetMouseMovePoints在滑鼠座標記錄中尋找一點。如果此函數查到該點,則返回包含提供點在內的在此之前的最後一個nBufPoints。如果應用程式提供一個時間標記,則函數GetMouseMovePoints將用它來區分記錄於不同時間的兩個相等的點。
應用程式使用從訊息WM_MOOSEMOVE中接收的滑鼠座標來調用此函數,並把它們轉換為螢幕座標。
lpptBut:將接收點的緩衝區的指標。其大小至少應為cbsze· nBuffPoints。
nBufPoints:指定將取得的點的個數。
resolution:指定希望的解析度。此參數可取下列值之一:
GMMP_USE_DISPLAY_POINTS:用顯示解析度取得點。
GMMP_USE_DRIVER_pOINTS:用磁碟機解析度取得點。在Windows
CE平台下,畫筆磁碟機的解析度高於顯示解析度。這樣,函數GetMouseMovePoints可被那些需要準確解析度的應用程式使用。(如手寫體識別軟體或電腦輔助設計軟體)。
傳回值:如果函數調用成功,傳回值是緩衝區裡的點的數目。否則,函數返回C1。若想獲得更多的錯誤資訊,請調用GetlastError函數。函數GetLastError可能返回下面的錯誤碼。
GMMF_ERR_POINT_NOT_FOUNQ由lPPt指定的點找不到或不再存在於系統緩衝區中。
備忘:系統至少保留著64個滑鼠座標及其時間標記。如果應用程式給GetMouseMovePoints提供了一個滑鼠座標,而該座標存在於系統中的滑鼠座標記錄中,則函數從曆史座標記錄取得指定個數的座標。也可以提供一個時間標記,用來區分記錄中相同的點。
函數GetMouseMonePoints將返回實際發送給調用線程和其他線程的點。
速查:Windows NT:5.0及以上版本;Windows:98及以上版本;Windows
CE:2.0及以上版本;標頭檔:winuser.h;輸入庫:user32.lib。
= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
= = = = = = = = = = = = = = = = = = = =
mouse_event
函數功能:該函數綜合滑鼠擊鍵和滑鼠動作。
函數原型:VOID mouse_event(DWORD dwFlags,DWORD dx,DWORD dwFlags,OWORD dx,DWORD
dy, DWORD dwData, DWORD dwExtralnfo);
參數:
dwFlags:標誌位集,指定點擊按鈕和滑鼠動作的多種情況。此參數裡的各位可以是下列值的任何合理組合:
MOOSE_EVENTF_ABSOLOTE:表明參數dX,dy含有正常化的絕對座標。如果不設定此位,參數含有相對資料:相對於上次位置的改動位置。此標誌可被設定,也可不設定,不管滑鼠的類型或與系統相連的類似於滑鼠的裝置的類型如何。要得到關於相對滑鼠動作的資訊,參見下面備忘部分。
MOOSEEVENTFMOVE:表明發生移動。
M00SEEVENTF_LEFTDOWN:表明接按下滑鼠左鍵。
M00SEEVENTF_LEFTUP:表明鬆開滑鼠左鍵。
MOOSEEVENTF_RIGHTDOWN:表明按下滑鼠右鍵。
MOOSEEVENTF_RIGHTUP:表明鬆開滑鼠右鍵。
MOOSEEVENTF_MIDDLEDOWN:表明按下滑鼠中鍵。
MOOSEEVENTF_MIDDLEUP:表明鬆開滑鼠中鍵。
MOOSEEVENTF_WHEEL:在Windows NT中如果滑鼠有一個輪,表明滑鼠輪被移動。移動的數量由dwData給出。
dx:指定滑鼠沿x軸的絕對位置或者從上次滑鼠事件產生以來移動的數量,依賴於MOOSEEVENTF_ABSOLOTE的設定。給出的絕對資料作為滑鼠的實際X座標;給出的相對資料作為移動的mickeys數。一個mickey表示滑鼠移動的數量,表明滑鼠已經移動。
dy:指定滑鼠沿y軸的絕對位置或者從上次滑鼠事件產生以來移動的數量,依賴於MOOSEEVENTF_ABSOLVTE的設定。給出的絕對資料作為滑鼠的實際y座標,給出的相對資料作為移動的mickeys數。
dwData:如果dwFlags為MOOSEEVENTF_WHEEL,則dwData指定滑鼠輪移動的數量。正值表明滑鼠輪向前轉動,即遠離使用者的方向;負值表明滑鼠輪向後轉動,即朝向使用者。一個輪擊定義為WHEEL_DELTA,即120。
如果dwFlagsS不是MOOSEEVENTF_WHEEL,則dWData應為零。
dwExtralnfo:指定與滑鼠事件相關的附加32位值。應用程式調用函數GetMessgeExtrajnfo來獲得此附加資訊。
傳回值:無。
備忘:如果滑鼠被移動,用設定MOUSEEVENTF_MOVE來表明,dX和dy保留移動的資訊。給出的資訊是絕對或相對整數值。
如果指定了MOWSEEVENTF_ABSOLOTE值,則dX和dy含有標準化的絕對座標,其值在0到65535之間。事件程式將此座標映射到顯示表面。座標(0,0)映射到顯示表面的左上方,(6553,65535)映射到右下角。
如果沒指定MOWSEEVENTF_ABSOLOTE,dX和dy表示相對於上次滑鼠事件產生的位置(即上次報告的位置)的移動。正值表示滑鼠向右(或下)移動;負值表示滑鼠向左(或上)移動。
滑鼠的相對移動服從滑鼠速度和加速度等級的設定,一個終端使用者用滑鼠控制台應用程式來設定這些值,應用程式用函數SystemParameterslnfo來取得和設定這些值。
在應用加速時系統對指定相對滑鼠移動提供了兩個測試。如果指定的沿X軸y軸的距離比第一個滑鼠閾值大,並且滑鼠的加速等級非零,則作業系統將距離加倍。如果指定的沿X軸或y軸的距離比第二個滑鼠閾值大,並且滑鼠的加速等級為2,則作業系統將從第一個閾測試得來的距離加倍。這樣就允許作業系統將指定滑鼠沿X軸或y軸的相對位移加到4倍。
一旦應用了加速,系統用期望的滑鼠速度換算合成的值。滑鼠速度的範圍是從1(最慢)到20(最快),並代表基於滑鼠移動的距離指示符移動的數量。預設值是10,表示對滑鼠的移動設有附加的修改。
函數mouse_event需要用的應用程式用來合成滑鼠事件。也被應用程式用來取得滑鼠位置和滑鼠按鍵狀態之外的滑鼠資訊。例如,如果輸入板製造商想將基於畫筆的資訊傳給自己的應用程式,可以寫一個直接與輸入板硬體通訊的動態鍵接庫(DLL),獲得附加的資訊,並儲存到一個隊列中。DLL然後調用mouse_event,用標準按鍵和x/y位置資料,並在參數dwExtralnfo設定排列的附加資訊的指標或索引。當應用程式需要附加資訊時,調用DLL(連同存貯在dwEXtralnfo中的指標或索引),則DLL返回附加資訊。
Windows CE:Windows CE不支援參數 dwFlags取MOOSE EVENTF WHEEL常數。
速查: Windows NT: 3.1及以上版本; Windows:95及以上版本;Windows
CE:不支援;標頭檔:winuser.h;輸入庫:user32.lib。
= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
= = = = = = = = = = = = = = = = = = =
ReleaseCapture
函數功能:該函數從當前線程中的視窗釋放滑鼠捕獲,並恢複通常的滑鼠輸入處理。捕獲滑鼠的視窗接收所有的滑鼠輸入(無論游標的位置在哪裡),除非點擊滑鼠鍵時,游標熱點在另一個線程的視窗中。
函數原型:BOOL ReleaseCapture(VOlD)
參數:無。
傳回值:如果函數調用成功,返回非零值;如果函數調用失敗,傳回值是零。若想獲得更多的錯誤資訊,請調用GetlastError函數。
備忘:應用程式在調用函數SetCaPture之後調用此函數。
Windows 95:調用ReleaseCapture會引起失去滑鼠捕獲的窗日接收一個WM_CAPTURECHANGED訊息。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本:Windows
CE:1.0及以上版本;標頭檔:winuser.h;輸入庫:User32.lib。
= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
= = = = = = = = = = = = = = = = = = =
SetCapture
函數功能:該函數在屬於當前線程的指定視窗裡設定滑鼠捕獲。一旦視窗捕獲了滑鼠,所有滑鼠輸入都針對該視窗,無論游標是否在視窗的邊界內。同一時刻只能有一個視窗捕獲滑鼠。如果滑鼠游標在另一個線程建立的視窗上,只有當滑鼠鍵按下時系統才將滑鼠輸入指向指定的視窗。
函數原型:HWND SetCapture(HWND hwnd);
參數:
hWnd:當前線程裡要捕獲滑鼠的視窗控制代碼。
傳回值:傳回值是上次捕獲滑鼠的視窗控制代碼。如果不存在那樣的控制代碼,傳回值是NULL。
備忘:只有前台視窗才能捕獲滑鼠。如果一個後台視窗想捕獲滑鼠,則該視窗僅為其游標熱點在該視窗可見部份的滑鼠事件接收訊息。另外,即使前台視窗已捕獲了滑鼠,使用者也可點擊該視窗,將其調入前台。當一個窗日不再需要所有的滑鼠輸入時,建立該視窗的線程應當調用函數ReleaseCapture來釋放滑鼠。此函數不能被用來捕獲另一進程的滑鼠輸入。
Windows 95:調用SetCaptune會引起失去滑鼠捕獲的視窗接收一個WM_CAPTURECHANGED訊息。
速查:標頭檔:Winuser.h:輸入庫:user32.lib。
= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
= = = = = = = = = = = = = = = = = = =
SetDoubleCIckTime
函數功能:該函數為滑鼠設定雙擊時間。
函數原型:BOOL SetDoubleCIckTime(UINT ulnterval);
參數:
ulnterval:指定在雙擊中第一次和第二次點擊之間的毫秒數。如果此參數設定為零則系統使用預設的雙擊時間,即500毫秒。
傳回值:如果函數調用成功,返回非零值。如果函數調用失敗,傳回值是零。若想獲得更多的錯誤資訊,請調用GetLastError函數。
備忘:函數SetDoubleClickTime為系統中所有的視窗修改雙擊時間。
速查:Windows NT 3.1及以上版本;Windows:95及以上版本;Windows
CE:不支援;標頭檔:winuser.h;輸入庫:user32.lib。
= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
= = = = = = = = = = = = = = = = = = = =
SwapMouseButton
函數功能:該函數反轉或恢複滑鼠左右鍵的含義
函數原型:BOOL SwapMouseButton(BOOL fSwap);
參數:
fSwap:指定滑鼠鍵的含義是否被反轉或恢複。如果此參數為TRUE,則左鍵產生右鍵訊息而右鍵產生左鍵訊息,如果此參數為FALSE,則恢複滑鼠鍵的最初含義。
傳回值:如果在函數調用之前滑鼠鍵的含義已被反轉,則返回非零值。如果滑鼠鍵的含義沒反轉,傳回值是零。
備忘:滑鼠鍵交換是為給那些用左手操作滑鼠的人提供方便。此函數通常只能由控制板調用。儘管一個應用程式能夠自由地調用此函數,但滑鼠是一種共用資源,其鍵的含義反轉會影響所有應用程式。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows
CE:不支援;標頭檔:winuser.h;輸入庫:user32.lib。
= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
= = = = = = = = = = = = = = = = = = =
TrackMouseEvent
函數功能:當在指定時間內滑鼠指標離開或盤旋在一個視窗上時,此函數寄送訊息。
函數原型:BOOL TrackMouseEvent(LPTRACKMOUSEEVENT lpEventTrack);
參數:
lpEventTrack;指向結構TRACKMOUSEEVENT的指標。
傳回值:如果函數調用成功,返回非零值;如果函數調用失敗,傳回值是零。若想獲得更多的錯誤資訊,請調用GetLastError函數。
此函數能寄送如下訊息:
WM_MOUSEHOVER:在上次調用TrackMouseEvent指定的時間裡,滑鼠盤旋在視窗的客戶區。當此訊息產生時,盤旋跟蹤停止。如果需要進一步的滑鼠盤旋跟蹤,應用程式應當再次調用TrackMouseEvent。
WM_MOUSELEAVE:滑鼠離開上次調用TrackMouseEvent時指定的視窗客戶區。當此訊息產生時,所有由TrackMouseEvent要求的跟蹤都被取消。當滑鼠再次進入視窗,並且要求進一步的滑鼠盤旋跟蹤時,應用程式必須調用TrackMouseEvent。
備忘:當滑鼠指標在指定時間內停留在指定矩形內,就被認為是處於盤旋狀態。調用函數
SystemParameterslnfo並使用SPI_GETMOUSEAOVERWIDTH,SPI_GETMOUSEHOVERAEIGHT和
SFI_GETMOOSEAOVERTIME值來取得矩形的大小和時間。
速查:Windows NT 4.0及以上版本;Windows 98及以上版本;Windows
CE:1.0及以上版本;標頭檔:winuser.h;輸入庫:user32.lib。