【问题标题】:Cursor style doesn't stay updated光标样式不会保持更新
【发布时间】:2011-05-29 01:24:48
【问题描述】:

我有一个普通的 Windows GUI 应用程序(使用 API,而不是 MFC),当我将鼠标移入和移出应用程序时,鼠标会更改样式(例如,当您将其移到边框上时,它会更改为调整大小箭头等),但有时它会“粘”在那种风格中,这样我就可以移动鼠标,它会停留在调整大小的箭头或其他位置,即使在它离开窗口边框之后也是如此。如果我将它移到另一个控件上,它会自行修复。

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

【问题讨论】:

    标签: c++ winapi mouse-cursor


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      tenfour 的回答是正确的。这里有一点背景。

      当鼠标在窗口内移动,但未被捕获时,窗口将收到WM_SETCURSOR 消息。消息名称可能有点混乱。这基本上是窗口设置光标的机会,而不是设置光标的指令。

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

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

      (实际上比这复杂一点,因为DefWindowProc首先给了父窗口一个干预的机会。)

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

      详情请见SetCursor。

      【讨论】:

        猜你喜欢
        • 2015-08-07
        • 2011-03-18
        • 1970-01-01
        • 2014-10-02
        • 1970-01-01
        • 2014-09-11
        • 1970-01-01
        • 1970-01-01
        • 2011-08-04
        相关资源
        最近更新 更多