WinAPI / WPF:仅为应用程序设置系统光标

WinAPI / WPF: Set system cursor only for application

我有一个应用程序,其 UI 是使用主题自定义呈现的。我还想添加新的非默认光标(如用户打算调整 window 大小时的调整大小光标)以匹配该主题。

使用 WinAPI 函数 SetCursor 我只能更改应用程序的默认指针,但这还不够,所以我查找了 SetSystemCursor,它工作得很好。问题是:后一个版本在系统范围内永久更改了游标,但我只想为我的应用程序更改它们。

我考虑过在执行 SetSystemCursor 之前复制以前的游标并在应用程序退出时重新设置它们,但即使我实现了终止处理程序,如果进程(例如),它也可能不会被调用。只是崩溃。此外,只要应用程序正在运行,游标仍会在系统范围内更改。

特别是对于调整大小的游标,我可以放弃 window 样式,制作一个无边界的 window,并且 render/implement 调整大小的手柄和逻辑我自己(然后我可以挂钩鼠标悬停事件),但这真的只是我最后的手段 - 我想知道在我完成这个繁琐的任务之前是否有可能实现我的目标......

对于任何有兴趣的人:UI 是用 WPF 呈现的,但 WPF 也不提供此功能(同样,他们有,但仅用于默认指针)。如果必须的话,我可以使用 WinAPI 或其他 "low-level" 调用,但目前似乎没有一个能满足我的需要:(

因此,如果有人知道如何仅针对我的应用程序更改 WPF 或 WinAPI 中的其他系统游标(不是默认指针),而不必为此对我的 window 实施自定义游标逻辑,您会让我开心。

我不知道如何在 WPF 中实现它,但如果您想将光标设置为默认值以外的值,那么您的 window 过程应该处理 WM_SETCURSOR 消息。

http://msdn.microsoft.com/en-us/library/windows/desktop/ms648382(v=vs.85).aspx