对于Windows桌面应用程序,只需使用ClipCursor给出窗口的矩形:
RECT rect;
GetClientRect(mWindow, &rect);
POINT ul;
ul.x = rect.left;
ul.y = rect.top;
POINT lr;
lr.x = rect.right;
lr.y = rect.bottom;
MapWindowPoints(mWindow, nullptr, &ul, 1);
MapWindowPoints(mWindow, nullptr, &lr, 1);
rect.left = ul.x;
rect.top = ul.y;
rect.right = lr.x;
rect.bottom = lr.y;
ClipCursor(&rect);
Run Code Online (Sandbox Code Playgroud)
确保有办法逃避此模式,以便用户可以根据需要选择与其他窗口进行交互.通常情况下,ClipCursor(nullptr);
当您进入"暂停"菜单时,您可以通过这种方式退出"鼠标外观"行为.
您也可以在桌面应用程序中使用"原始"输入,请参阅利用高清鼠标移动.请记住,原始输入对于相对移动的"鼠标外观"行为非常有效,但是(a)它不能在远程桌面上工作,并且(b)你不会得到'指针 - 弹道'这是一个非线性移动速率,使鼠标更敏捷,所以你应该WM_MOUSE
在处理绝对移动时坚持传统的信息.
对于通用Windows平台,您不能使用"原始"输入,因为没有相应的
WM_INPUT
,但您MouseDevice.MouseMoved
通过该MouseDelta
属性从事件中获得高精度数据.您不需要ClipCursor
在UWP中使用相对移动,只需通过将CoreWindow.PointerCursor
属性设置为nullptr 来关闭光标将阻止跟踪系统鼠标位置.同样,您应该在"暂停"菜单中恢复系统光标.请参阅开发鼠标控件(DirectX和C++).
请参阅DirectX工具包 鼠标助手类,更重要的是实现文件.对于相对模式,它使用两者ClipCursor
并WM_INPUT
用于Windows桌面Win32实现.
归档时间: |
|
查看次数: |
1993 次 |
最近记录: |