首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WINUI 3.0 -团结0.5视窗大小/

WINUI 3.0 -团结0.5视窗大小/
EN

Stack Overflow用户
提问于 2021-04-19 21:44:14
回答 4查看 4.6K关注 0票数 8

我刚开始学习WinUI 3.0,在谷歌或学习WinUI 3.0之类的书中找不到任何信息,如何设置应用程序的默认窗口大小。我知道在UWP里

代码语言:javascript
复制
ApplicationView.PreferredLaunchViewSize = new Size(480, 800);
ApplicationView.PreferredLaunchWindowingMode = ApplicationViewWindowingMode.PreferredLaunchViewSize;

但实际上它在WinUI中不起作用

EN

回答 4

Stack Overflow用户

发布于 2022-01-19 22:24:39

无需自行执行这些互操作调用,也不需要为此使用第三方包。

试试看这个三重奏:

代码语言:javascript
复制
// Use 'this' rather than 'window' as variable if this is about the current window.
IntPtr hWnd = WinRT.Interop.WindowNative.GetWindowHandle(window);
var windowId = Microsoft.UI.Win32Interop.GetWindowIdFromWindow(hWnd);
var appWindow = Microsoft.UI.Windowing.AppWindow.GetFromWindowId(windowId);

然后,您最终可以用以下方式设置大小:

代码语言:javascript
复制
appWindow.Resize(new Windows.Graphics.SizeInt32 { Width = 480, Height = 800 });

请注意,AppWindow对象还有其他几个函数,如MoveAndResizeShowHide和修改标题栏的特性。

票数 8
EN

Stack Overflow用户

发布于 2021-09-29 10:17:09

看看这个存储库dotMorten/WinUIEx

它包含一个设置窗口大小和位置的方法。

代码语言:javascript
复制
myWindow.SetWindowPositionAndSize(100, 100, 1024, 768);

我还在WinUI3样本中找到了一个示例,我在这里添加了相关代码,以便于参考

代码语言:javascript
复制
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);
}
票数 7
EN

Stack Overflow用户

发布于 2022-02-11 01:44:26

我还不能对答案发表评论,但是要添加到Jonas的答案中,您可以将他的答案放在主窗口代码的类构造函数(其中this.InitializeComponent()是)中,或者放在App.cs的OnLaunched方法中。我相信,对很多人来说,这是显而易见的,但对于那些来自其他语言/平台的人来说,情况可能并非如此。示例:

代码语言:javascript
复制
    public MainWindow()
    {
        this.InitializeComponent();
        
        IntPtr hWnd = WinRT.Interop.WindowNative.GetWindowHandle(this); // m_window in App.cs
        WindowId windowId = Win32Interop.GetWindowIdFromWindow(hWnd);
        AppWindow appWindow = AppWindow.GetFromWindowId(windowId);

        var size = new Windows.Graphics.SizeInt32();
        size.Width = 480;
        size.Height = 800;

        appWindow.Resize(size);
    // or like Jonas said:
    // appWindow.Resize(new Windows.Graphics.SizeInt32 { Width = 480, Height = 800 });
    }
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67169712

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档