永久更改光标

时间:2013-04-22 17:16:34

标签: c++ api winapi

我正在尝试将光标永久更改为其他光标。

当我这样做时,我得到的是新光标,直到我再次移动光标。

  case WM_RBUTTONDOWN:
      cursor = LoadCursor (NULL, IDC_CROSS) ;
      SetCursor(cursor);
      break;

如何更改它以使其永久化..我知道它与wndclass有关..

当我在wndproc中创建窗口时,我说wndclass.hIcon为IDC_ARROW,但我无法在WM_RBUTTONDOWN中调用wndclass ..

任何帮助?

3 个答案:

答案 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);