c++ 如何在winui 3.0中创建多个窗口?

wixjitnu  于 2023-05-30  发布在  其他
关注(0)|答案(4)|浏览(212)

我想有一个按钮,创建另一个窗口。我正在构建你在VS2019预览版中获得的模板应用程序到目前为止,我已经创建了一个新的控件BlankWindow,只是默认的一个。我可以看到在App::OnLaunched中,创建了一个窗口:

window = make<MainWindow>();
window.Activate();

因此,在我的MainWindow.xaml.cs中,在我的按钮单击方法中,我将:

Window bWindow= make<BlankWindow>();
bWindow.Activate();

我检查了BlankWindow.idl文件,发现BlankWindow继承自Controls而不是Windows,所以我更改了它。现在它构建了,但是当我单击主窗口中的按钮时,我看到窗口 Flink 打开并立即关闭。这是怎么回事?

tuwxkamq

tuwxkamq1#

关于多窗口应用程序的工作正在进行中。它可作为预览功能。
https://learn.microsoft.com/en-us/windows/apps/winui/winui3/#preview-features

mklgxw1f

mklgxw1f2#

您可以在“在新线程上创建新窗口”的子标题下为Windows UI库(WinUI)定义Window Class中找到此问题的解决方案。把这一节放在上下文中,这将有助于阅读整个网页。没那么长

46scxncf

46scxncf3#

我们能够为目标子窗口包含xaml. h,并使用make template函数显示窗口。
请注意,成员变量中保存的类型和指定给make模板函数的类型是不同的。
(我使用的是DeepL的翻译,所以文本可能有点不正确。

#include "pch.h"
#include "MainWindow.xaml.h"
#if __has_include("MainWindow.g.cpp")
#include "MainWindow.g.cpp"
#include "Window_Sub.xaml.h"
#endif
winrt::App1::Window_Sub _subWindow{ nullptr };
void MainWindow::ShowSubWindowButton_Clicked(winrt::Windows::Foundation::IInspectable const& sender, winrt::Microsoft::UI::Xaml::RoutedEventArgs const& e)
{  
    if (_subWindow == nullptr) {
        _subWindow = make<App1::implementation::Window_Sub>();
        _subWindow.Closed([](winrt::Windows::Foundation::IInspectable const& sender, winrt::Microsoft::UI::Xaml::WindowEventArgs const& e){
            _subWindow = nullptr;
        });
    }
    _subWindow.Activate();
}
7fhtutme

7fhtutme4#

在Windows App SDK v1.1(2022年6月)中始终引入了对同一线程上多个窗口的支持。这里是Changelog。

相关问题