WinUI3 Window Desktop 앱 시작시 창 크기 지정하기

WinUI3로 기본 앱을 만들어 실행하면 대충 위 스샷 처럼 앱 크기가 지정되서 나옵니다.
WPF 할때 처럼 당연히 Window 속성값으로 Width를 지정하면 될줄 알았는데… 없습니다.

그냥 생각이지만 WinUI3가 엑박이나 기타 장비에서도 돌아가야 하니 안드로이드 앱처럼 전체화면을 기본으로 깔고 가는게 아닐까 하는 생각입니다.

아무튼.. 윈도우용 앱을 만들건데 창 사이즈를 지정 못하면 뭔가 이상합니다.
그래서 검색해보고 작동하는것을 여기 올립니다.

Nuget 에서 “PInvoke.User32” 를 검색해서 설치합니다.

[ComImport]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
[Guid("EECDBF0E-BAE9-4CB6-A68E-9598E1CB57BB")]
internal interface IWindowNative {
    IntPtr WindowHandle { get; }
}
private void SetWindowSize(IntPtr hwnd, int width, int height) {
    var dpi = PInvoke.User32.GetDpiForWindow(hwnd);
    float scalingFactor = (float)dpi / 96;
    width = (int)(width * scalingFactor);
    height = (int)(height * scalingFactor);

    PInvoke.User32.SetWindowPos(hwnd, PInvoke.User32.SpecialWindowHandles.HWND_TOP,
                                0, 0, width, height,
                                PInvoke.User32.SetWindowPosFlags.SWP_NOMOVE);
}

App.xaml.cs파일에 위 코드를 넣어줍니다.

protected override void OnLaunched(Microsoft.UI.Xaml.LaunchActivatedEventArgs args) {
    m_window = new MainWindow();
    
    //이 부분에 넣어준다.
    var windowNative = m_window.As<IWindowNative>();
    var windowHandle = windowNative.WindowHandle;
    SetWindowSize(windowHandle, 800, 600);
    //

    m_window.Activate();
}

App.xaml.cs에 OnLaunched 부분에 위처럼 넣어줍니다.

창 크기가 조절되서 나옵니다.

이거 찾아서 해보다가 알게 된것인데 WinUI3 SDK 1.0 에서는 다중창 생성이 안됩니다.
새 창 띄우기 하면 앱이 그냥 죽길래 검색해보니 새 창 띄우는 코드는 preview 버전에서만 가능합니다 라고 공식 문서에 있더군요. UWP 관련해서 검색해보면 제한적으로 지원한다 라는 글이 있었는데 엑박기기나 기타 홀로렌즈던가? 이런거 통합하느라고 뭔가 만들다 만거 같은 느낌이 좀 있습니다.

난 그냥 윈도우10이나 11에서 제어판 윈도우 느낌이 나는 앱을 만들어 보고 싶어서 시작한건데 뭔가 맘에 안듭니다. 걍 WPF나 봐야 할듯 싶네요.


Comments

답글 남기기

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