共用方式為


關於游標

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)
對角線調整大小 1
IDC_SIZENESW
MAKEINTRESOURCE(32643)
對角線調整大小 2
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) 箭頭 cd 游標。

如需使用標準游標的相關資訊,請參閱 指導方針

每個標準游標都有一個與之相關聯的預設影像。 使用者或應用程式可以隨時取代與任何標準游標相關聯的預設影像。 應用程式會使用 SetSystemCursor 函式來取代預設映像。

應用程式可以使用 GetIconInfo 函式來擷取數據指標的目前影像,並使用 drawIconEx函式繪製數據指標。

自定義游標是專為特定應用程式設計,並且可以是開發人員所定義的任何設計。 下圖顯示數個自定義游標。

自定義游標,包括手、香蕉、鼓、手上的手錶、節拍器

游標可以是單色或彩色,也可以是靜態或動畫。 特定電腦系統上所使用的游標類型取決於系統的顯示器。 VGA 之類的舊顯示器不支援色彩或動畫游標。 新的顯示器,其顯示驅動程式使用與裝置無關的點陣圖(DIB)引擎,確實支持它們。

游標和圖示很類似,而且在許多情況下可以互換使用。 它們之間的唯一差異在於,指定為游標的影像必須以顯示器可支援的格式。 例如,對於 VGA 顯示器,游標必須是單色的。

本概觀提供下列主題的相關信息:

熱點

在游標中,稱為 作用點的圖元 會標示受滑鼠事件影響的確切螢幕位置,例如按下滑鼠按鈕。 通常,熱點是游標的焦點。 系統會追蹤並將這個點辨識為游標的位置。 例如,典型的熱點是箭形游標的頂端圖元,以及十字形游標中間的圖元。 下列影像顯示繪圖程式中的兩個游標,其中熱點與筆刷尖和油漆十字線相關聯。

在兩個指標游標上出現熱點

發生滑鼠輸入事件時,滑鼠驅動程式會將事件轉譯為包含作用點座標的適當滑鼠訊息。 系統會將滑鼠訊息傳送至包含作用點的視窗,或傳送至擷取滑鼠輸入的視窗。 如需詳細資訊,請參閱 滑鼠輸入

滑鼠和游標

系統會藉由相應移動螢幕上的游標來反映滑鼠的移動。 當游標移到視窗的不同部分或移至不同的視窗時,系統(或應用程式)會變更游標的外觀。 例如,當游標越過超連結時,系統會將游標從箭號變更為手部。

當游標移動到超連結標準游標會變成手形游標。

如果系統沒有滑鼠,則只有在用戶選擇特定系統命令時,系統才會顯示並移動游標,例如用來調整或移動視窗。 若要為使用者提供在無法使用滑鼠時顯示和移動游標的方法,應用程式可以使用游標函式來模擬滑鼠移動。 鑒於此模擬功能,用戶可以使用箭頭鍵來移動游標。

游標建立

由於標準游標已預先定義,因此不需要建立它們。 若要使用標準游標,應用程式會使用 LoadCursor LoadImage 函式來取得游標句柄。 游標控制碼 是識別標準或自定義游標的 HCURSOR 型別的唯一值。

若要為應用程式建立自定義數據指標,您通常會使用圖形應用程式,並在應用程式的資源定義檔案中包含數據指標作為資源。 在執行時,呼叫 LoadCursor 來擷取游標句柄。 游標資源包含多種不同顯示裝置的資料。 LoadCursor 函式會自動選取目前顯示裝置最適當的數據。 從 .CUR 或 .ANI 檔案直接載入游標,請使用 LoadCursorFromFile 函式。

您也可以使用 CreateIconIndirect 函式,在運行時間建立自定義數據指標,此函式會根據 ICONINFO 結構的內容來建立數據指標。 GetIconInfo 函式會以有關相關遮罩和色彩的熱點座標和資訊填滿此結構。

應用程式應實作自定義數據指標作為資源,並使用 LoadCursorLoadCursorFromFileLoadImage,而不是在運行時間建立數據指標。 使用數據指標資源可避免裝置依賴、簡化當地語系化,並讓應用程式共用數據指標設計。

CreateIconFromResourceEx 函式可讓應用程式根據資源數據建立圖示和數據指標。 CreateIconFromResourceEx 根據其他可執行檔.exe或 DLL 的二進位資源資料來建立游標。 它之前必須呼叫 LookupIconIdFromDirectoryEx 函式,以及數個資源函式。 LookupIconIdFromDirectoryEx 識別目前顯示裝置最適當的游標數據。 如需資源函式的詳細資訊,請參閱 Resources

游標位置和外觀

系統會自動顯示滑鼠的游標,並更新其在畫面上的位置。 您可以分別 使用 getCursorPosSetCursorPos 函式,取得游標目前的螢幕座標,並將游標移至螢幕上的任何位置。

您也可以使用 GetCursor 函式來擷取目前游標的控制碼,也可以使用 SetCursor 函式來設定游標。 呼叫 SetCursor之後,游標的外觀不會變更,直到滑鼠移動、游標明確設定為不同的游標,或執行系統命令為止。

當用戶移動滑鼠時,系統會在新的位置重新繪製游標。 系統會自動重新繪製與游標指向的視窗相關聯的游標設計。

您可以使用 showCursor 函式來隱藏和重新顯示數據指標,而不需變更數據指標設計。 此函式會使用內部計數器來判斷何時要隱藏或顯示游標。 嘗試顯示游標會使計數器遞增;嘗試隱藏游標會使計數器遞減。 只有當這個計數器大於或等於零時,才會顯示游標。

GetCursorInfo 函式會取得全域游標的下列資訊:游標是隱藏或顯示,游標的句柄,以及游標的座標。

游標限制

您可以使用 ClipCursor 函式,將游標限制在螢幕上的矩形區域。 當用戶必須回應矩形限制區域內的特定事件時,這非常有用。 例如,您可以使用 ClipCursor 將游標限制為強制回應對話方塊,以防止使用者與其他窗口互動,直到對話框關閉為止。

GetClipCursor 函式會擷取游標暫時限制之矩形區域的螢幕座標。 當需要限制游標時,您也可以使用此函式來儲存游標可以移動的原始區域座標。 然後,當不再需要新的限制時,您可以將游標還原到原始區域。

游標破壞

您可以銷毀游標控制柄,並釋放游標所使用的記憶體,透過呼叫 DestroyCursor 函式。 不過,此函式對共享游標沒有任何作用。 只要載入它的模組仍保留在記憶體中,共用游標就是有效的。 下列函式會取得共用游標:

當您不再需要使用 CreateIconIndirect 函式建立的游標時,您應該銷毀該游標。 DestroyIcon 函式會終結游標指標,並釋放游標所使用的任何記憶體。 只有在使用 CreateIconIndirect建立的游標上使用此函式。

游標複製

CopyCursor 函式會複製游標處理程序。 這可讓應用程式或 DLL 程式代碼取得另一個模組所擁有的游標控制代碼。 然後,如果釋放另一個模組,複製游標的模組仍然可以使用游標設計。

如需如何在可執行檔案中新增、移除或取代資料指標資源的資訊,請參閱 Resources

視窗類別游標

當您使用 RegisterClass 函式註冊視窗類別時,您可以指派一個稱為 類別游標的預設游標。 應用程式註冊視窗類別之後,該類別的每個視窗都有指定的類別游標。

若要覆寫類別游標,請處理 WM_SETCURSOR 訊息。 您也可以使用 SetClassLong 函式來取代類別指標。 此函式會變更指定類別之所有視窗的預設窗口設定。 如需詳細資訊,請參閱 類別游標