ClipCursor不起作用

我正在开发DX11游戏,我想在全屏模式下将光标剪辑到全屏窗口。 我使用这种方法

void MyClass::_SetupCursor( BOOL bFullscreen ) { // Clip cursor if requested if( bFullscreen ) { if(m_bShowCursorWhenFullscreen) { ShowCursor(m_bShowCursorWhenFullscreen); } if(m_bClipCursorWhenFullscreen) { // Confine cursor to full screen window RECT windowRect; GetWindowRect( m_hWnd, &windowRect ); ClipCursor( &windowRect ); } } else { ShowCursor( TRUE ); ClipCursor( NULL ); } } 

但是,当我使用2台显示器进行全屏模式时,仍然可以将鼠标移动到另一台显示器上。 在全屏模式下将分辨率设置为2048×1152,我得到的窗口矩形为1360×768,这就是它被剪辑的内容。 我确认它是使用GetClippedRect剪切的。

所以我有两个问题:

1)为什么鼠标不能被剪辑到我的窗口所在的显示器上?

2)为什么当我知道监视器是2048×1152,并且我的分辨率设置为2048×1152时,测量的窗口矩形为1360×768?

事实证明,为了使ClipCursor正常工作,您必须拥有所有的DX11缓冲区和正确的窗口大小。 我通过全屏运行我的应用程序,而不是切换到它,ClipCursor工作得很好,即使有多个显示器,我发现了这一点。 有关ClipCursor何时失败的更多信息,请查看我在stackoverflow上的其他问题: 为什么D3D10SDKLayers.dll在我的DX11游戏中加载? 。

在这个问题中,ClipCursor将会失败。 另外,针对我的第二个问题,由于我在链接问题中描述的情况,窗口大小不正确。

不幸的是,根据文档 (用户)的评论,这似乎不适用于多监视器设置。 您可能需要开发一种方法,在鼠标离开屏幕时重新定位鼠标,关闭鼠标的旋转方向,然后在将光标移回窗口时将其重新打开(以检测鼠标是否移出窗口或不,有消息的窗口)。