ClipCursor无法正常工作

时间:2012-01-23 22:00:32

标签: windows visual-c++ cursor directx-11

我正在开发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?

2 个答案:

答案 0 :(得分:3)

事实证明,要使ClipCursor正常工作,您必须拥有所有DX11缓冲区并且窗口大小正确。我通过首先在全屏运行我的应用程序而没有切换到它来发现这一点,并且ClipCursor工作得很好,即使有多个显示器。有关ClipCursor何时失败的更多信息,请查看我在stackoverflow上的其他问题:Why is D3D10SDKLayers.dll loaded during my DX11 game?

ClipCursor将永远失败我在这个问题中描述的情况出现。另外,在回答我的第二个问题时,由于我在链接问题中描述的情况,窗口大小不正确。

答案 1 :(得分:0)

不幸的是,根据对documentation(由用户)的评论,似乎这对多监视器设置不起作用。你可能想要开发一种方法,当鼠标离开屏幕时重新定位鼠标,关闭它的渲染,然后当你将光标移回窗口时将其重新打开(以检测鼠标是否离开窗口或不,有Windows消息)。