ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 유니티 화면 비율 고정 처리...24
    일지 2021. 12. 14. 17:30

    최대화 처리

    최대화 처리를 위해 먼저 화면에서 사용할 수 없는 영역을 제외한 최대 크기를 알 수 있어야 한다.

    이를 위해 윈도우 창의 border와 작업 표시줄의 크기를 가져와 해당 크기를 모니터의 사이즈에서 빼도록 한다.

    		// 윈도우 창 border 사이즈
    		RECT windowRect = new RECT();
    		RECT clientRect = new RECT();
    
    		GetWindowRect(m_hwnd, out windowRect);
    		GetClientRect(m_hwnd, out clientRect);
    
    		int windowBorderSizeX = (windowRect.Right - windowRect.Left) - (clientRect.Right - clientRect.Left);
    		int windowBorderSizeY = (windowRect.Bottom - windowRect.Top) - (clientRect.Bottom - clientRect.Top);
    
    		// 작업 표시줄 사이즈
    		RECT taskBarRect = new RECT();
    
    		IntPtr hTaskbar = FindWindow("Shell_TrayWnd", null);
    		GetWindowRect(hTaskbar, out taskBarRect);
    
    		int taskBarSizeX = Mathf.Abs(taskBarRect.Right - taskBarRect.Left);
    		int taskBarSizeY = Mathf.Abs(taskBarRect.Bottom - taskBarRect.Top);
    
    		// 작업 표시줄 위치 아래(위)인 경우
    		if (taskBarSizeX > taskBarSizeY)
    		{
    			taskBarSizeX = 0;
    		}
    		// 작업 표시줄 위치가 왼쪽(오른쪽)인 경우
    		else
    		{
    			taskBarSizeY = 0;
    		}
    
    		// 최대화 시 창 크기
    		m_maximizedSizeX = Display.main.systemWidth - windowBorderSizeX - taskBarSizeX;
    		m_maximizedSizeY = Display.main.systemHeight - windowBorderSizeY - taskBarSizeY;

     

    이후 Update에 최대화 시 처리를 추가한다.

    		if (!m_maximized && Maximized)
    		{
    			m_maximized = true;
    
    			StopAllCoroutines();
    
    			int width = Display.main.systemWidth;
    			int height = Display.main.systemHeight;
    			GetAdjustedSize(ref width, ref height, ResizeOption.Horizontal);
    
    			Screen.SetResolution(width, height, false);
    		}
    
    		if (!Maximized)
    		{
    			m_maximized = false;
    		}

     

    실행 결과는 다음과 같았다.

    최대화 처리 결과

     

    최초 처음으로 최대화를 한 경우 적절하게 처리가 되었으나 다시 최대화 버튼을 눌렀을 때 전체 화면으로 전환이 되는 것을 확인했다.

    이를 해결하려면 Maximized 처리를 m_maximized로 막는 부분을 제거해야 하는데 이렇게 될 경우 최대 크기와 창의 비율에 따른 최대화 시 크기가 동일한 경우 무한히 해당 루프를 타게 되는 문제가 있다.

    이를 막기 위해 고민을 해봐야 할 것 같다.

    댓글

Designed by Tistory.