當前位置: 華文世界 > 數碼

【新書推薦】6.1 滑鼠基礎知識

2024-01-21數碼

第六章 滑鼠

Windows程式以其友好的使用者互動體驗著稱。鍵盤和滑鼠都是使用者與Windows程式互動的工具。鍵盤一般被當作用來輸入和管理文本數據的器材,滑鼠則被看作是用來繪制和處理圖形物件的器材。上一章我們已經講述了鍵盤知識,本章我們將詳細講解滑鼠知識及其具體套用。

本章學習知識概要:

滑鼠基礎知識

客戶區滑鼠訊息

非客戶區滑鼠訊息

程式測試

6.1 滑鼠基礎知識

本節我們講述滑鼠的一些基礎知識。

本節必須掌握的知識點:

滑鼠

6.1.1 滑鼠

滑鼠是1964年由Douglas Engelbart發明的,用來取代由鍵盤輸入的繁瑣指令,簡化電腦操作。早期的滑鼠是單鍵滑鼠,只有一個鍵,後來逐步改進為雙鍵滑鼠和帶滾輪的雙鍵滑鼠。

檢測滑鼠

我們可以使用GetSystemMetrics函數來判斷是否連線了滑鼠:

fMouse = GetSystemMetrics (SM_MOUSEPRESENT);

當滑鼠已被安裝時,fMouse的值為TRUE(非零),否則值為0。但是,在Windows98中,不論滑鼠是否連線上,該函數的返回值總是TRUE。在Windows NT中,該函數的返回值是正確的。

為了確定所安裝滑鼠的按鈕個數,可以利用以下語句:

cButtons = GetSystemMecrics (SM_CMOUSEBUTTONS);

若沒有安裝滑鼠,該函數的返回值為0。但是,在Windows 98下,該函數在沒有安裝滑鼠時還是返回2。

習慣用左手的使用者可以利用Windows控制台來切換滑鼠的按鈕。程式也可以透過檢 査是否呼叫了帶SM_SWAPBUTTON參數的GetSystemMetrics函數,判斷滑鼠的按鈕是否被切換,但是這種方法通常沒有必要。食指控制的按鈕被認為是左鍵,即使該按鈕在物理位置上位於滑鼠的右側。但是,在一個電腦培訓程式中,如果想在螢幕上畫出一個滑鼠, 在這種情況下可能需要知道滑鼠的按鈕是否己被切換。

●在控制台中,還可以設定滑鼠的其他參數,比如滑鼠雙擊的速度。從Windows套用 程式中呼叫SystemParametersinfo函數可以獲取或設定這個參數資訊。

SystemParametersInfo用於獲取或設定系統參數的資訊。它允許你查詢和修改各種系統設定,如桌面背景、螢幕分辨率、滑鼠速度等。

以下是 SystemParametersInfo 函數的原型:

BOOL SystemParametersInfo(

UINT uiAction, // 操作類別

UINT uiParam, // 相關參數

PVOID pvParam, // 相關數據

UINT fWinIni // 更新方式

);

返回值:

如果函數呼叫成功,返回值為非零值(TRUE)。

如果函數呼叫失敗,返回值為零(FALSE)。

SystemParametersInfo 函數的使用方法取決於所需的操作類別和參數。以下是一些常見的範例用法:

1.獲取桌面背景路徑:

WCHAR wallpaperPath[MAX_PATH];

SystemParametersInfo(SPI_GETDESKWALLPAPER, MAX_PATH, wallpaperPath, 0);

在這個範例中,SPI_GETDESKWALLPAPER 是操作類別,MAX_PATH 是緩沖區大小,wallpaperPath 是接收桌面背景路徑的緩沖區。

2.設定滑鼠速度:

int mouseSpeed = 10; // 設定滑鼠速度為 10

SystemParametersInfo(SPI_SETMOUSESPEED, 0, (PVOID)mouseSpeed, SPIF_UPDATEINIFILE);

在這個範例中,SPI_SETMOUSESPEED 是操作類別,(PVOID)mouseSpeed 是要設定的滑鼠速度值,SPIF_UPDATEINIFILE 指定更新系統設定。

請註意,具體的操作類別、參數和更新方式取決於你想要實作的具體功能。詳細的操作類別和參數值可以在相關的文件或參考資料中找到。

●獲取滑鼠位置:GetCursorPos

BOOL GetCursorPos(

LPPOINT lpPoint // 接收滑鼠位置的指標

);

該函數用於獲取當前滑鼠的螢幕座標位置,並將結果儲存在指定的 POINT 結構中。

●設定滑鼠位置:SetCursorPos

BOOL SetCursorPos(

int X, // 滑鼠的水平座標

int Y // 滑鼠的垂直座標

);

該函數用於設定滑鼠的螢幕座標位置。透過提供目標位置的水平糊垂直座標,可以將滑鼠移動到指定的位置。

滑鼠熱點

當Windows使用者移動滑鼠時,Windows系統會在顯示器材上移動一個位圖格式的小圖 標,稱為「滑鼠指標」。滑鼠指標具有一個單像素精度的「熱點」(hot spot)。熱點在顯示器材上指示了一個精確的位置。當我提到螢幕上滑鼠指標的位置時,實際上是指熱點的位罝。

Windows為程式提供了幾種預定義的滑鼠指標。最常用的是斜向箭頭,稱為 IDC_ARROW(定義在WINUSER.H表頭檔中的識別元)。

箭頭的頂點即為熱點。IDC_CROSS指標(被本章後面的BLOKOUT程式所采用)的熱點 位於十字形圖案的中心。IDC_WAIT指標呈沙漏形(不同的Windows版本會有所不同),一般用在程式中表示忙碌狀態。程式設計師還可以設計屬於自己的指標。本書會在第十章講述如何設計自訂滑鼠指標。對一個具體視窗來說,預設的滑鼠指標在定義視窗類結構時就被指定了。是否還記得初始化視窗類時指定的滑鼠位圖?例如:

wnd class.hCursor = LoadCursor (NULL, XDC_ARR0W);

在 Windows 平台上,可以使用以下函數來獲取和設定滑鼠熱點位置:

●獲取滑鼠熱點位置:GetIconInfo

BOOL GetIconInfo(

HICON hIcon, // 光標圖示控制代碼

PICONINFO piconinfo // ICONINFO 結構指標

);

該函數用於獲取光標圖示的資訊,包括光標熱點位置。透過傳遞光標圖示的控制代碼和指向 ICONINFO 結構的指標,可以獲取光標圖示的熱點位置。

●設定滑鼠熱點位置:SetCursor

HCURSOR SetCursor(

HCURSOR hCursor // 新的光標控制代碼

);

該函數用於設定當前光標。透過傳遞一個新的光標控制代碼,可以更改當前光標並指定新的熱點位置。

顯示和隱藏滑鼠

●顯示/隱藏滑鼠光標:ShowCursor

int ShowCursor(

BOOL bShow // 指定是否顯示滑鼠光標

);

該函數用於顯示或隱藏滑鼠光標。透過傳遞 TRUE 或 FALSE 來決定是否顯示滑鼠光標。

滑鼠訊息

滑鼠訊息是指在 Windows 系統中與滑鼠操作相關的訊息。當使用者與滑鼠進行互動時,系統會生成相應的滑鼠訊息,以通知應用程式有關滑鼠操作的資訊。

在 Windows 訊息迴圈中,可以透過檢查訊息的訊息類別來確定是否為滑鼠訊息,並進一步處理相應的操作。以下是一些常見的滑鼠訊息:

●WM_MOUSEMOVE:表示滑鼠移動訊息。當使用者移動滑鼠時,系統會發送該訊息,並包含當前滑鼠的螢幕座標。

●WM_LBUTTONDOWN:表示左鍵按下訊息。當使用者按下滑鼠左鍵時,系統會發送該訊息,並包含當前滑鼠的螢幕座標。

●WM_LBUTTONUP:表示左鍵釋放訊息。當使用者釋放滑鼠左鍵時,系統會發送該訊息,並包含當前滑鼠的螢幕座標。

●WM_RBUTTONDOWN:表示右鍵按下訊息。當使用者按下滑鼠右鍵時,系統會發送該訊息,並包含當前滑鼠的螢幕座標。

●WM_RBUTTONUP:表示右鍵釋放訊息。當使用者釋放滑鼠右鍵時,系統會發送該訊息,並包含當前滑鼠的螢幕座標。

●WM_MOUSEWHEEL:表示滑鼠滾輪訊息。當使用者捲動滑鼠滾輪時,系統會發送該訊息,並包含捲動的距離和方向。

這些訊息是在 Windows 訊息迴圈中使用的常見滑鼠訊息,你可以在應用程式的訊息處理過程中捕獲並響應這些訊息。使用訊息處理常式,如 WndProc,可以透過檢查訊息的訊息類別來處理相應的滑鼠操作。

本文摘自編程達人系列教材【Windows API每日一練】。