我正在开发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个显示器处于全屏模式时,我仍然可以将鼠标移动到另一个显示器上。在全屏模式下将分辨率设置为2048x1152,我将窗口矩形设置为1360x768,这就是它被裁剪到的内容。我确认使用GetClippedRect剪切它。
所以我有两个问题:
1)为什么鼠标没有被剪切到我的窗口所在的显示器?
2)为什么窗口矩形被测量为1360x768,当我知道监视器是2048x1152时,我的分辨率设置为2048x1152?
答案 0 :(得分:3)
事实证明,要使ClipCursor正常工作,您必须拥有所有DX11缓冲区并且窗口大小正确。我通过首先在全屏运行我的应用程序而没有切换到它来发现这一点,并且ClipCursor工作得很好,即使有多个显示器。有关ClipCursor何时失败的更多信息,请查看我在stackoverflow上的其他问题:Why is D3D10SDKLayers.dll loaded during my DX11 game?。
ClipCursor将永远失败我在这个问题中描述的情况出现。另外,在回答我的第二个问题时,由于我在链接问题中描述的情况,窗口大小不正确。
答案 1 :(得分:0)
不幸的是,根据对documentation(由用户)的评论,似乎这对多监视器设置不起作用。你可能想要开发一种方法,当鼠标离开屏幕时重新定位鼠标,关闭它的渲染,然后当你将光标移回窗口时将其重新打开(以检测鼠标是否离开窗口或不,有Windows消息)。