關於游標
Windows 提供一組 標準游標, 可供應用程式使用。 下列游標識別碼已在 WinUser.h 中定義:
價值 | 意義 |
---|---|
IDC_ARROW MAKEINTRESOURCE(32512) |
![]() |
IDC_IBEAM MAKEINTRESOURCE(32513) |
![]() |
IDC_WAIT MAKEINTRESOURCE(32514) |
![]() |
IDC_CROSS MAKEINTRESOURCE(32515) |
![]() |
IDC_UPARROW MAKEINTRESOURCE(32516) |
![]() |
IDC_SIZENWSE MAKEINTRESOURCE(32642) |
![]() |
IDC_SIZENESW MAKEINTRESOURCE(32643) |
![]() |
IDC_SIZEWE MAKEINTRESOURCE(32644) |
![]() |
IDC_SIZENS MAKEINTRESOURCE(32645) |
![]() |
IDC_SIZEALL MAKEINTRESOURCE(32646) |
![]() |
IDC_NO MAKEINTRESOURCE(32648) |
![]() |
IDC_HAND MAKEINTRESOURCE(32649) |
![]() |
IDC_APPSTARTING MAKEINTRESOURCE(32650) |
![]() |
IDC_HELP MAKEINTRESOURCE(32651) |
![]() |
IDC_PIN MAKEINTRESOURCE(32671) |
![]() |
IDC_PERSON MAKEINTRESOURCE(32672) |
![]() |
WinUser.h 中還有許多其他游標,這些游標並未在此文件中被定義標識碼(或被視為過時):
價值 | 意義 |
---|---|
MAKEINTRESOURCE(32631) |
![]() |
MAKEINTRESOURCE(32652) |
![]() |
MAKEINTRESOURCE(32653) |
![]() |
MAKEINTRESOURCE(32654) |
![]() |
MAKEINTRESOURCE(32655) |
![]() |
MAKEINTRESOURCE(32656) |
![]() |
MAKEINTRESOURCE(32657) |
![]() |
MAKEINTRESOURCE(32658) |
![]() |
MAKEINTRESOURCE(32659) |
![]() |
MAKEINTRESOURCE(32660) |
![]() |
MAKEINTRESOURCE(32661) |
![]() |
MAKEINTRESOURCE(32662) |
![]() |
MAKEINTRESOURCE(32663) |
![]() |
如需使用標準游標的相關資訊,請參閱 指導方針。
每個標準游標都有一個與之相關聯的預設影像。 使用者或應用程式可以隨時取代與任何標準游標相關聯的預設影像。 應用程式會使用 SetSystemCursor 函式來取代預設映像。
應用程式可以使用 GetIconInfo 函式來擷取數據指標的目前影像,並使用 drawIconEx函式繪製數據指標。
自定義游標是專為特定應用程式設計,並且可以是開發人員所定義的任何設計。 下圖顯示數個自定義游標。
游標可以是單色或彩色,也可以是靜態或動畫。 特定電腦系統上所使用的游標類型取決於系統的顯示器。 VGA 之類的舊顯示器不支援色彩或動畫游標。 新的顯示器,其顯示驅動程式使用與裝置無關的點陣圖(DIB)引擎,確實支持它們。
游標和圖示很類似,而且在許多情況下可以互換使用。 它們之間的唯一差異在於,指定為游標的影像必須以顯示器可支援的格式。 例如,對於 VGA 顯示器,游標必須是單色的。
本概觀提供下列主題的相關信息:
熱點
在游標中,稱為 作用點的圖元 會標示受滑鼠事件影響的確切螢幕位置,例如按下滑鼠按鈕。 通常,熱點是游標的焦點。 系統會追蹤並將這個點辨識為游標的位置。 例如,典型的熱點是箭形游標的頂端圖元,以及十字形游標中間的圖元。 下列影像顯示繪圖程式中的兩個游標,其中熱點與筆刷尖和油漆十字線相關聯。
在兩個指標游標上出現熱點
發生滑鼠輸入事件時,滑鼠驅動程式會將事件轉譯為包含作用點座標的適當滑鼠訊息。 系統會將滑鼠訊息傳送至包含作用點的視窗,或傳送至擷取滑鼠輸入的視窗。 如需詳細資訊,請參閱 滑鼠輸入。
滑鼠和游標
系統會藉由相應移動螢幕上的游標來反映滑鼠的移動。 當游標移到視窗的不同部分或移至不同的視窗時,系統(或應用程式)會變更游標的外觀。 例如,當游標越過超連結時,系統會將游標從箭號變更為手部。
當游標移動到超連結標準游標會變成手形游標。
如果系統沒有滑鼠,則只有在用戶選擇特定系統命令時,系統才會顯示並移動游標,例如用來調整或移動視窗。 若要為使用者提供在無法使用滑鼠時顯示和移動游標的方法,應用程式可以使用游標函式來模擬滑鼠移動。 鑒於此模擬功能,用戶可以使用箭頭鍵來移動游標。
游標建立
由於標準游標已預先定義,因此不需要建立它們。 若要使用標準游標,應用程式會使用 LoadCursor 或 LoadImage 函式來取得游標句柄。 游標控制碼 是識別標準或自定義游標的 HCURSOR 型別的唯一值。
若要為應用程式建立自定義數據指標,您通常會使用圖形應用程式,並在應用程式的資源定義檔案中包含數據指標作為資源。 在執行時,呼叫 LoadCursor 來擷取游標句柄。 游標資源包含多種不同顯示裝置的資料。 LoadCursor 函式會自動選取目前顯示裝置最適當的數據。 從 .CUR 或 .ANI 檔案直接載入游標,請使用 LoadCursorFromFile 函式。
您也可以使用 CreateIconIndirect 函式,在運行時間建立自定義數據指標,此函式會根據 ICONINFO 結構的內容來建立數據指標。 GetIconInfo 函式會以有關相關遮罩和色彩的熱點座標和資訊填滿此結構。
應用程式應實作自定義數據指標作為資源,並使用 LoadCursor、LoadCursorFromFile或 LoadImage,而不是在運行時間建立數據指標。 使用數據指標資源可避免裝置依賴、簡化當地語系化,並讓應用程式共用數據指標設計。
CreateIconFromResourceEx 函式可讓應用程式根據資源數據建立圖示和數據指標。 CreateIconFromResourceEx 根據其他可執行檔.exe或 DLL 的二進位資源資料來建立游標。 它之前必須呼叫 LookupIconIdFromDirectoryEx 函式,以及數個資源函式。 LookupIconIdFromDirectoryEx 識別目前顯示裝置最適當的游標數據。 如需資源函式的詳細資訊,請參閱 Resources。
游標位置和外觀
系統會自動顯示滑鼠的游標,並更新其在畫面上的位置。 您可以分別 使用 getCursorPos 和 SetCursorPos 函式,取得游標目前的螢幕座標,並將游標移至螢幕上的任何位置。
您也可以使用 GetCursor 函式來擷取目前游標的控制碼,也可以使用 SetCursor 函式來設定游標。 呼叫 SetCursor之後,游標的外觀不會變更,直到滑鼠移動、游標明確設定為不同的游標,或執行系統命令為止。
當用戶移動滑鼠時,系統會在新的位置重新繪製游標。 系統會自動重新繪製與游標指向的視窗相關聯的游標設計。
您可以使用 showCursor 函式來隱藏和重新顯示數據指標,而不需變更數據指標設計。 此函式會使用內部計數器來判斷何時要隱藏或顯示游標。 嘗試顯示游標會使計數器遞增;嘗試隱藏游標會使計數器遞減。 只有當這個計數器大於或等於零時,才會顯示游標。
GetCursorInfo 函式會取得全域游標的下列資訊:游標是隱藏或顯示,游標的句柄,以及游標的座標。
游標限制
您可以使用 ClipCursor 函式,將游標限制在螢幕上的矩形區域。 當用戶必須回應矩形限制區域內的特定事件時,這非常有用。 例如,您可以使用 ClipCursor 將游標限制為強制回應對話方塊,以防止使用者與其他窗口互動,直到對話框關閉為止。
GetClipCursor 函式會擷取游標暫時限制之矩形區域的螢幕座標。 當需要限制游標時,您也可以使用此函式來儲存游標可以移動的原始區域座標。 然後,當不再需要新的限制時,您可以將游標還原到原始區域。
游標破壞
您可以銷毀游標控制柄,並釋放游標所使用的記憶體,透過呼叫 DestroyCursor 函式。 不過,此函式對共享游標沒有任何作用。 只要載入它的模組仍保留在記憶體中,共用游標就是有效的。 下列函式會取得共用游標:
- LoadCursor
- LoadCursorFromFile
- LoadImage (如果您使用 LR_SHARED 旗標)
- CopyImage (如果您使用 LR_COPYRETURNORG 旗標和 hImage 是共用游標)
當您不再需要使用 CreateIconIndirect 函式建立的游標時,您應該銷毀該游標。 DestroyIcon 函式會終結游標指標,並釋放游標所使用的任何記憶體。 只有在使用 CreateIconIndirect建立的游標上使用此函式。
游標複製
CopyCursor 函式會複製游標處理程序。 這可讓應用程式或 DLL 程式代碼取得另一個模組所擁有的游標控制代碼。 然後,如果釋放另一個模組,複製游標的模組仍然可以使用游標設計。
如需如何在可執行檔案中新增、移除或取代資料指標資源的資訊,請參閱 Resources。
視窗類別游標
當您使用 RegisterClass 函式註冊視窗類別時,您可以指派一個稱為 類別游標的預設游標。 應用程式註冊視窗類別之後,該類別的每個視窗都有指定的類別游標。
若要覆寫類別游標,請處理 WM_SETCURSOR 訊息。 您也可以使用 SetClassLong 函式來取代類別指標。 此函式會變更指定類別之所有視窗的預設窗口設定。 如需詳細資訊,請參閱 類別游標。