光标样式不会保持更新

Joh*_*ane 7 c++ winapi coding-style cursor

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

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

ten*_*our 10

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

WNDCLASSEX wc = {0};
...
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
...
RegisterClassEx(&wc);
Run Code Online (Sandbox Code Playgroud)


Adr*_*thy 7

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

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

窗口可以通过调用SetCursor和返回来处理此消息.

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

(它实际上比这复杂一点,因为第DefWindowProc一个给父窗口一个机会进行干预.)

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

详情SetCursor请见.