关于光标 - Win32 apps

关于光标 - Win32 apps

Windows 提供了一组可供应用程序使用的标准光标。 WinUser.h 中定义了以下光标标识符:

含义

IDC_ARROWMAKEINTRESOURCE(32512)

正常选择

IDC_IBEAMMAKEINTRESOURCE(32513)

文本选择

IDC_WAITMAKEINTRESOURCE(32514)

忙碌

IDC_CROSSMAKEINTRESOURCE(32515)

精度选择

IDC_UPARROWMAKEINTRESOURCE(32516)

备用选择

IDC_SIZENWSEMAKEINTRESOURCE(32642)

对角线调整大小 1

IDC_SIZENESWMAKEINTRESOURCE(32643)

对角线调整大小 2

IDC_SIZEWEMAKEINTRESOURCE(32644)

水平调整大小

IDC_SIZENSMAKEINTRESOURCE(32645)

垂直调整大小

IDC_SIZEALLMAKEINTRESOURCE(32646)

移动

IDC_NOMAKEINTRESOURCE(32648)

不可用

IDC_HANDMAKEINTRESOURCE(32649)

链接选择

IDC_APPSTARTINGMAKEINTRESOURCE(32650)

在后台工作

IDC_HELPMAKEINTRESOURCE(32651)

帮助选择

IDC_PINMAKEINTRESOURCE(32671)

位置选择

IDC_PERSONMAKEINTRESOURCE(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 显示器,光标必须是单色的。

此概述提供有关以下主题的信息:

热点

鼠标和光标

光标创建

光标位置和外观

光标限制

光标销毁

光标重复

Window 类光标

热点

在光标中,称为热点的像素标记受鼠标事件影响的确切屏幕位置,例如单击鼠标按钮。 通常,热点是光标的焦点。 系统跟踪并识别此点作为光标的位置。 例如,典型的热点是箭头形光标尖端的像素和十字形光标中间的像素。 下图显示了绘图程序中的两个光标,其中热点与画笔尖和涂料的十字准线相关联。

当鼠标输入事件发生时,鼠标驱动程序将该事件转换为适当的鼠标消息,其中包括热点的坐标。 系统将鼠标消息发送到包含热点的窗口或捕获鼠标输入的窗口。 有关详细信息,请参阅鼠标输入。

鼠标和光标

系统通过相应地在屏幕上移动光标来反映鼠标移动。 当光标移动到窗口的不同部分或移动到不同的窗口时,系统(或应用程序)会更改光标的外观。 例如,当光标越过超链接时,系统将光标从箭头更改为手。

如果系统没有鼠标,则只有当用户选择某些系统命令(例如用于调整窗口大小或移动窗口的命令)时,系统才会显示和移动光标。 为了向用户提供在鼠标不可用时显示和移动光标的方法,应用程序可以使用光标功能来模拟鼠标移动。 鉴于此模拟功能,用户可以使用箭头键移动光标。

光标创建

由于标准光标是预定义的,因此无需创建它们。 若要使用标准光标,应用程序使用 LoadCursor 或 LoadImage 函数检索光标句柄。 光标句柄是用于标识标准光标或自定义光标的 HCURSOR 类型的唯一值。

若要为应用程序创建自定义光标,通常使用图形应用程序,并将光标作为资源包含在应用程序的资源定义文件中。 在运行时,调用 LoadCursor 以检索光标句柄。 光标资源包含多个不同显示设备的数据。 LoadCursor 函数会自动为当前显示设备选择最合适的数据。 使用 LoadCursorFromFile 函数直接从 .CUR or .ANI 文件加载光标。

还可以使用 CreateIconIndirect 函数在运行时创建自定义光标,该函数基于 ICONINFO 结构的内容创建光标。 GetIconInfo 函数使用有关关联掩码和颜色的热点坐标和信息填充此结构。

应用程序应实现自定义光标作为资源,并使用 LoadCursor、LoadCursorFromFile 或 LoadImage,而不是在运行时创建光标。 使用光标资源可以避免对设备的依赖,简化本地化,并使应用程序能够共享光标设计。

CreateIconFromResourceEx 函数使应用程序能够基于资源数据创建图标和光标。 CreateIconFromResourceEx 基于来自其他可执行文件 (.exe) 文件或 DLL 的二进制资源数据创建光标。 它之前必须调用 LookupIconIdFromDirectoryEx 函数以及多个资源函数。 LookupIconIdFromDirectoryEx 标识当前显示设备最合适的光标数据。 有关资源函数的详细信息,请参阅资源。

光标位置和外观

系统会自动显示鼠标的光标,并更新其在屏幕上的位置。 可以分别使用 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 代码能够检索另一个模块拥有的光标的句柄。 这样,如果另一个模块被释放,那么复制光标的模块仍然可以使用光标设计。

有关如何在可执行文件中添加、删除或替换光标资源的信息,请参阅资源。

Window 类光标

使用 RegisterClass 函数注册窗口类时,可以为其分配一个默认光标,称为类光标。 应用程序注册窗口类后,该类的每个窗口都具有指定的类光标。

若要覆盖类光标,请处理 WM_SETCURSOR 消息。 还可以使用 SetClassLong 函数替换类光标。 此函数用于更改指定类的所有窗口的默认窗口设置。 有关详细信息,请参阅类光标。

相关推荐

退役球星——魔兽德罗巴,三道杠的男人
365bet取款要多久到账

退役球星——魔兽德罗巴,三道杠的男人

📅 06-27 👁️ 1181
中国十大著名作家
国内365bet登录网址

中国十大著名作家

📅 06-30 👁️ 8798
温馨提示!9月有这些考试,别错过→
123656的网站怎么打开

温馨提示!9月有这些考试,别错过→

📅 08-21 👁️ 188