我正在尝试将光标永久更改为其他光标。
当我这样做时,我得到的是新光标,直到我再次移动光标。
case WM_RBUTTONDOWN:
cursor = LoadCursor (NULL, IDC_CROSS) ;
SetCursor(cursor);
break;
如何更改它以使其永久化..我知道它与wndclass有关..
当我在wndproc中创建窗口时,我说wndclass.hIcon为IDC_ARROW,但我无法在WM_RBUTTONDOWN中调用wndclass ..
任何帮助?
答案 0 :(得分:4)
每次鼠标移动都会导致WM_SETCURSOR
消息发送到您的窗口;默认窗口过程将使用配置的游标进行响应。覆盖以返回新光标。
答案 1 :(得分:3)
来自the documentation for SetCursor
:
如果您的应用程序必须在窗口中设置光标,请确保指定窗口类的类光标设置为NULL。 如果类光标不为NULL,则每次移动鼠标时系统都会恢复类光标。
您需要从窗口类中删除任何指定的光标。
答案 2 :(得分:0)
(我没有足够的声誉来发表评论)
我可能会遗漏一些东西,但是现有的解决方案对我而言并不奏效(覆盖WM_SETCUROSR
实现会在调整窗口大小时破坏光标的默认行为,例如,将默认光标设置为{{ 1}}似乎不适合我,在致电NULL
之前,我陷入了加载或调整游标大小的麻烦。)
这是一个简单的替代解决方案,为简洁起见,不进行错误处理。在窗口初始化代码中,我将默认光标设置为SetCursor
:
IDC_ARROW
然后在我的设置光标功能中:
global_window_class.hCursor = LoadCursor(NULL, IDC_ARROW);