UE4+Window运行窗体操作

1、修改UE4运行窗口名字:(需要添加Slate,SlateCore模块)

if (GEngine && GEngine->GameViewport)
{
    FVector2D WindowPosition = position;

    GEngine->GameViewport->GetWindow()->SetTitle(FText::FromString(TEXT("1111")));
}

2、获取屏幕尺寸

const FVector2D ViewportSize = FVector2D(GEngine->GameViewport->Viewport->GetSizeXY())

3、使窗口可拖拽文件

#include "AllowWindowsPlatformTypes.h"

#include "shellapi.h"

#include "HideWindowsPlatformTypes.h"


HWND hwndd = GetActiveWindow();

DragAcceptFiles(hwndd, true);

4、移动Windows游戏窗口

if (GEngine && GEngine->GameViewport)
{
    FVector2D WindowPosition = position;

    GEngine->GameViewport->GetWindow()->MoveWindowTo(WindowPosition);
}

 

### 虚幻引擎中的 `SWindow` 使用教程 在虚幻引擎的 Slate UI 框架中,`SWindow` 是用于创建窗口的核心类之一。它允许开发者定义和管理自定义窗口的行为和外观[^1]。 #### 创建一个基本的 `SWindow` 要创建并显示一个新的 `SWindow` 实例,可以按照以下方式实现: ```cpp TSharedRef<SWindow> Window = SNew(SWindow) .Title(FText::FromString("My Custom Window")) .ClientSize(FVector2D(800, 600)) .SupportsMinimize(false) .SupportsMaximize(true); FSlateApplication& SlateApp = FSlateApplication::Get(); SlateApp.AddWindow(Window); ``` 上述代码片段展示了如何通过 `SNew` 构造函数来实例化一个新窗口,并设置其标题、大小以及最小化/最大化支持属性[^2]。 #### 设置窗口的内容 为了向窗口添加实际内容,可以通过 `.Content()` 方法指定子级组件。例如,下面是一个简单的按钮控件作为窗口的主要内容: ```cpp Window->SetContent( SNew(SVerticalBox) + SVerticalBox::Slot() .AutoHeight() .Padding(10.0f) [ SNew(SButton) .Text(FText::FromString("Click Me!")) .OnClicked_Lambda([]() { UE_LOG(LogTemp, Warning, TEXT("Button was clicked!")); return FReply::Handled(); }) ] ); ``` 此部分演示了如何利用垂直布局 (`SVerticalBox`) 和按钮 (`SButton`) 来构建更复杂的用户界面结构[^3]。 --- ### 常见问题及其解决方案 1. **无法关闭自定义窗口** 如果发现某些情况下窗口无法正常关闭,则需确认是否正确实现了窗口销毁逻辑。通常可通过调用 `RequestDestroyWindow()` 方法显式请求销毁当前活动窗口对象[^4]。 2. **调整窗口尺寸失败** 当遇到动态改变窗口大小不起作用的情况时,请核查是否有其他事件拦截器阻止默认行为或者未更新视图状态同步机制[^5]。 3. **跨线程访问引发崩溃** 若程序运行期间因多线程操作导致异常终止,应始终确保所有涉及 UI 的修改都在主线程上执行。借助任务调度工具如 `FTaskGraphInterface::Get().RunTask(...)` 可帮助安全地切换上下文环境[^6]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值