【问题标题】:Cursor flashing on the non-client area when using IDirect3DDevice9::SetCursorProperties使用 IDirect3DDevice9::SetCursorProperties 时光标在非客户区闪烁
【发布时间】:2011-05-28 04:57:04
【问题描述】:

我有一个在 Direct3D9 下运行的应用程序。该应用程序使用 Direct3D 硬件光标 API (IDirect3DDevice9::SetCursorProperties 等) 来控制光标。几乎一切正常:

  • 在应用程序窗口内时,显示由 SetCursorProperties 指定的光标
  • 在应用程序窗口之外时,桌面或其他窗口根据需要显示正常的操作系统光标

问题出在窗口的非客户区(标题栏、屏幕边缘)。在非客户区移动时,会短暂显示该区域功能对应的光标,但一旦停止移动,SetCursorProperties中设置的光标又会显示出来。

使用IDirect3DDevice9::SetCursorProperties 以便在窗口非客户区获得默认操作系统光标的正确方法是什么?

【问题讨论】:

    标签: winapi cursor direct3d nonclient


    【解决方案1】:

    在尝试了各种事情之后,应用程序中的以下更改为我解决了这个问题:

    • 在窗口过程中,当收到WM_SETCURSOR 时,记住全局变量CursorInClient 中条件(lParam&0xffff)==HTCLIENT 的结果
    • 当全局变量CursorInClient为false时,避免调用IDirect3DDevice9::ShowCursor

    【讨论】:

    • 如果你要调用 showcursor,你最好收听 nc hit test 消息
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-31
    • 2017-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-30
    • 1970-01-01
    相关资源
    最近更新 更多