void AMultiWindowsActor::CreateSpectatorWindow(FVector2D WindowSize, FVector2D WindowPosition, UUserWidget* showWidget, bool autoCenter)
{
//WindowMode = EWindowMode::WindowedFullscreen;
// Create and add window
SpectatorWindow = SNew(SWindow)
.ScreenPosition(WindowPosition)
.ClientSize(WindowSize)
.SizingRule(ESizingRule::UserSized)
.Title(FText::FromString(TEXT("Custom SpectatorWindow")))
.AutoCenter(autoCenter ? (EAutoCenter::PrimaryWorkArea) : (EAutoCenter::None))
.FocusWhenFirstShown(false)
.UseOSWindowBorder(true)
.UserResizeBorder(true)
.CreateTitleBar(true)
.SupportsTransparency(EWindowTransparency::PerWindow)
.InitialOpacity(1.0f)
.SupportsMaximize(true);
SpectatorWindow->SetViewportSizeDrivenByWindow(true);
//获取当前应用的实例
FSlateApplication& SlateApp = FSlateApplication::Get();
//添加新建的窗口到该实例中
SlateApp.AddWindow(SpectatorWindow.ToSharedRef(), true);
//新建一个内容画布
TSharedRef<SConstraintCanvas> ViewportWidget = SNew(SConstraintCanvas);
TSharedPtr<SWidget> SlateWidget = showWidget->TakeWidget();
// Add slate widget to window
// ViewportWidget->AddSlot()
// [
//放置添加内容的位置
// SlateWidget.ToSharedRef()
// ]
// ;
ViewportWidget->SetVisibility(EVisibility::Visible);
//内容设置
SpectatorWindow->SetContent(showWidget->TakeWidget());
SpectatorWindow->ShowWindow();
//设置窗口模式
SpectatorWindow->SetWindowMode(EWindowMode::Windowed);
bIsStandaloneGame = GetWorld()->WorldType == EWorldType::Game;
SpectatorWindow->SetOnWindowClosed(FOnWindowClosed::CreateLambda([=](const TSharedRef<SWindow>& WindowArg)
{
APlayerController* PlayerController = UGameplayStatics::GetPlayerController(this, 0);
UKismetSystemLibrary::QuitGame(this, PlayerController, EQuitPreference::Quit,true);
}));
}
void AMultiWindowsActor::DestroySpectatorWindow()
{
// Destroy window
if (SpectatorWindow.Get() != nullptr)
{
if (bIsStandaloneGame == false)
{
SpectatorWindow->RequestDestroyWindow();
}
else
{
SpectatorWindow->DestroyWindowImmediately();
}
}
}