光标样式不会保持更新

时间:2010-12-21 20:18:53

标签: c++ coding-style cursor winapi

我有一个普通的Windows GUI应用程序(使用API​​,而不是MFC),当我在应用程序上移动鼠标时,鼠标会改变样式(比如当你将它移到边框上时,它会变为调整大小箭头等等)但有时它会“粘住”那种风格,这样我就可以移动鼠标,它会保持在调整大小的箭头或其他任何东西,即使它离开窗口边界。如果我将其移动到另一个控件上,它会自行修复。

这只是一个不便,但它看起来不专业,我想解决它。我怎样才能让它始终保持最新状态?

3 个答案:

答案 0 :(得分:9)

注册窗口类时设置有效的光标句柄。见WNDCLASSEX::hCursor。使用LoadCursor加载有效游标。像,

WNDCLASSEX wc = {0};
...
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
...
RegisterClassEx(&wc);

答案 1 :(得分:6)

tenfour的回答是正确的。这是一个更多的背景。

当鼠标在窗口内移动并且未捕获时,窗口将收到WM_SETCURSOR消息。消息名称可能有点令人困惑。它基本上是窗口设置光标的机会,而不是设置光标的指令。

一个窗口可以通过调用SetCursor并返回来处理此消息。

窗口也可以通过将消息传递给DefWindowProc来获取默认行为。默认行为是查看窗口hCursor中的WNDCLASS字段。这就是为什么tenfour的答案有效。

(实际上有点复杂,因为DefWindowProc首先让父窗口有机会进行干预。)

如果你想做一些动态的事情,比如根据某个状态变量选择一个游标,那么你应该处理WM_SETCURSOR,以便它用适当的光标调用SetCursor然后返回TRUE

有关详细信息,请参阅SetCursor

答案 2 :(得分:1)