首页 > 其他 > 详细

unreal3窗口锁定鼠标开关

时间:2016-03-28 18:39:17      阅读:289      评论:0      收藏:0      [点我收藏+]

GameViewportClient中有个变量控制是否显示硬件鼠标:

var transient bool bDisplayHardwareMouseCursor

也就是系统的光标,一般通过该类中的函数来操纵:

simulated event SetHardwareMouseCursorVisibility(bool bIsVisible)
{
    local Vector2D ViewportSize;
    
    //If we are going to be turning on the hardware cursor when it was not already on, we will move the cursor to the middle of the screen
    if (bIsVisible && !bDisplayHardwareMouseCursor)
    {
        GetViewportSize(ViewportSize);
        SetMouse(ViewportSize.X/2,ViewportSize.Y/2);
    }
    bDisplayHardwareMouseCursor = bIsVisible;

    ForceUpdateMouseCursor(TRUE);
}

 

其中ForceUpdateMouseCursor是native函数,调用到UGameViewportClient::ForceUpdateMouseCursor,

在Windows上的实现类为FWindowsViewport,其成员函数

void FWindowsViewport::UpdateMouseLock( UBOOL bEnforceMouseLockRequestedFlag )

在每个tick中被调用,会对该控制变量进行检测:

    RECT ClipRect;
    UBOOL bIsHardwareCursorVisible = (GEngine && GEngine->GameViewport && GEngine->GameViewport->bDisplayHardwareMouseCursor);
    UBOOL bIsAnyCursorVisible = bIsSystemCursorVisible || bIsHardwareCursorVisible;
    UBOOL bClipRectValid = (::GetClipCursor( &ClipRect ) != 0);
    UBOOL bHasFocus = HasFocus();
    UBOOL bShouldMouseLock = bEnforceMouseLockRequestedFlag ? bMouseLockRequested : bHasFocus && (IsFullscreen() || !bIsAnyCursorVisible || bMouseLockRequested);

最后在bShouldMouseLock为TRUE时,调用::ClipCursor锁定鼠标。

 

unreal3窗口锁定鼠标开关

原文:http://www.cnblogs.com/wellbye/p/5330020.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!