일지

유니티 화면 비율 고정 처리...17

niamdank 2021. 11. 2. 22:58

화면 사이즈 변경 처리 방법

코드를 보면 사이즈를 변경한 뒤 직접 사이즈를 설정하는 게 아니라 원래의 WinProc에 변경된 사이즈를 가지고 이벤트를 넘겨주는 방식으로 사이즈를 변경하도록 만들고 있다.

 

이렇게 한 이유는 기존 WinProc에서 진행되어야 할 이벤트를 빼먹지 않고 진행하도록 하기 위한 것으로 보인다.

 

wndProc

            // Write back changed window parameters.
            Marshal.StructureToPtr(rc, lParam, true);
        }

        // Call original WindowProc function.
        return CallWindowProc(oldWndProcPtr, hWnd, msg, wParam, lParam);

 

또, WinProc의 등록은 단순히 SetWindowLong에서 GWLP_WNDPROC를 플래그러 넘기면서 새로운 WinProc을 등록하고 있는 것으로 보이며 종료 시 기존 값으로 다시 복원시키기 위해 기존 WinProc 값을 저장해 두고 있다.

 

SetWindowLong

        wndProcDelegate = wndProc;
        newWndProcPtr = Marshal.GetFunctionPointerForDelegate(wndProcDelegate);
        oldWndProcPtr = SetWindowLong(unityHWnd, GWLP_WNDPROC, newWndProcPtr);