WinUI3 앱 실행시 윈도우 사이즈 지정하기

한 일년만에 다시 WinUI3를 만지게 되서 “앱 시작 창크기 조절” 를 전에 했던거 보고 적용할려니…

PInvoke.User32 deprecated

PInvoke.User32 패키지가 버려졌으니 대신 CsWin32를 쓰라고 합니다. (참고로 CsWin32는 현재 prerelease 버전 밖에 없어서 위에 “include prerelease”에 체크 안하면 안나옵니다)

아무튼 CsWin32를 설치하면 바로 사용할 수 있는건 아니고 프로젝터 폴더에 NativeMethods.txt 파일을 만들고 그 안에 사용할 함수명을 적어줘야 합니다. (설명을 제대로 안 읽는 바람에 이걸 안해서 한참 삽질함)

GetDpiForWindow
SetWindowPos

윈도우 창 크기 조절하는데는 필요한 함수는 두개뿐입니다.

private void SetWindowSize(IntPtr hwnd, int width, int height) {
    var dpi = PInvoke.GetDpiForWindow((Windows.Win32.Foundation.HWND)hwnd);
    float scalingFactor = (float)dpi / 96;
    width = (int)(width * scalingFactor);
    height = (int)(height * scalingFactor);

    var HWND_TOP = new Windows.Win32.Foundation.HWND((IntPtr)0);
    var SWP_NOMOVE = Windows.Win32.UI.WindowsAndMessaging.SET_WINDOW_POS_FLAGS.SWP_NOMOVE;
    PInvoke.SetWindowPos((Windows.Win32.Foundation.HWND)hwnd,HWND_TOP,0, 0, width, height, SWP_NOMOVE);
}

App.xaml.cs 파일에 위 함수를 추가해줍니다. (윈도우 사이즈 조절 함수)

protected override void OnLaunched(Microsoft.UI.Xaml.LaunchActivatedEventArgs args)
{
    m_window = new MainWindow();
    //----------------------------------------------------------------------------
    //여기입니다.
    var hwnd = new Windows.Win32.Foundation.HWND(WinRT.Interop.WindowNative.GetWindowHandle(m_window));
    SetWindowSize(hwnd, 800, 600);
    //여기입니다.
    //----------------------------------------------------------------------------
    m_window.Activate();
}

그리고 App.xaml.cs 파일의 Onlaunched 함수에서 시작시 원하는 창 사이즈를 적어주면 됩니다.


Comments

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다