我有一个普通的Windows GUI应用程序(使用API,而不是MFC),当我在应用程序上移动鼠标时,鼠标会改变样式(比如当你将它移到边框上时,它会变为调整大小箭头等等)但有时它会“粘住”那种风格,这样我就可以移动鼠标,它会保持在调整大小的箭头或其他任何东西,即使它离开窗口边界。如果我将其移动到另一个控件上,它会自行修复。
这只是一个不便,但它看起来不专业,我想解决它。我怎样才能让它始终保持最新状态?
答案 0 :(得分:9)
注册窗口类时设置有效的光标句柄。见WNDCLASSEX::hCursor
。使用LoadCursor
加载有效游标。像,
WNDCLASSEX wc = {0};
...
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
...
RegisterClassEx(&wc);
答案 1 :(得分:6)
当鼠标在窗口内移动并且未捕获时,窗口将收到WM_SETCURSOR
消息。消息名称可能有点令人困惑。它基本上是窗口设置光标的机会,而不是设置光标的指令。
一个窗口可以通过调用SetCursor
并返回来处理此消息。
窗口也可以通过将消息传递给DefWindowProc
来获取默认行为。默认行为是查看窗口hCursor
中的WNDCLASS
字段。这就是为什么tenfour的答案有效。
(实际上有点复杂,因为DefWindowProc
首先让父窗口有机会进行干预。)
如果你想做一些动态的事情,比如根据某个状态变量选择一个游标,那么你应该处理WM_SETCURSOR
,以便它用适当的光标调用SetCursor
然后返回TRUE
。
有关详细信息,请参阅SetCursor
。
答案 2 :(得分:1)