我正在做一个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 );
}
}
但是,当我在全屏模式下使用两个监视器时,我仍然可以将鼠标移到另一个监视器上。在全屏模式下,分辨率设置为2048x1152,我得到的窗口矩形为1360x768,这就是它被裁剪的地方。我确认它是用getclippedrect剪裁的。
所以我有两个问题:
1)为什么鼠标没有被夹在我的窗口所在的监视器上?
2)当我知道监视器是2048x1152,并且分辨率设置为2048x1152时,为什么窗口矩形的测量值是1360x768?
最佳答案
事实证明,要让clipcursor工作,您必须拥有所有的dx11缓冲区和正确的窗口大小。我发现这一点,我的应用程序运行在全屏第一,没有切换到它,和clipcursor工作得很好,即使有多个显示器。有关clipcursor何时失败的更多信息,请查看stackoverflow上的其他问题:Why is D3D10SDKLayers.dll loaded during my DX11 game?。
当我在这个问题中描述的情况出现时,clipcursor将永远失败。另外,在回答我的第二个问题时,由于我在链接问题中描述的情况,窗口大小不正确。