2013-04-22 157 views
4

我试图将光标永久更改为其他光标。永久更改光标

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

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

我如何改变它,这样它会是永久性的。我知道它是与WNDCLASS ..

当我做出的WndProc窗口我说wndclass.hIcon到IDC_ARROW但我无法在WM_RBUTTONDOWN中调用wndclass ..

任何帮助?

回答

4

每个鼠标移动都会导致WM_SETCURSOR消息被发送到您的窗口;默认窗口过程将使用配置的光标进行响应。重写返回你的新光标。

+0

谢谢。这是我期待的答案! =)。 – 2013-04-22 17:30:12

+0

我确实相信Drew Dormann在这种情况下更为正确。虽然这两种解决方案都有效,但我确实相信将光标设置为一次(或者至少“当您执行某些操作时”)是正确的,而不是每次鼠标移动(在我使用的图形卡上,将光标设置为不是一项简单的操作 - 尽管如果您尝试像以前一样设置相同的设置,它仍然是“无操作”,但如果不是数千个时钟周期,只需要下到驱动程序并再次返回即可)。 – 2013-04-22 18:30:34

+0

@MatsPetersson,我不认为他的答案有效,因为一旦你离开当前窗口,光标就会自动重置,并且当你移动它时不会恢复。每当你得到它时,你都应该对WM_SETCURSOR做出响应。 – 2013-04-22 18:32:38

3

the documentation for SetCursor:

如果您的应用程序必须设置光标,而它在一个窗口中,确保该类光标指定的窗口的类设置为NULL。 如果类游标不是NULL,则系统每次移动鼠标时恢复类游标。

您需要从窗口类中删除任何指定的光标。

+0

感谢您的回答! – 2013-04-22 17:30:46