UE4代码比较奇怪的是SWindow可以支持OnWindowMoved事件,却不支持OnWindowResized事件,想要在窗口大小变化,而窗口位置不变时时进行界面布局处理就很受限。
当然也可以通过GameViewPort的大小变化绕道实现,不过也会存在问题,比如GameViewport本身不随窗口变化而变化。为了在程序中自定义处理窗口OnSize事件,需要修改引擎源码。
首先,在SWindow.h中添加事件代理
/** Notification that a window has been resized */
DECLARE_DELEGATE_OneParam(FOnWindowResized, const TSharedRef<SWindow>&);
定义好代理设置函数
/** Sets the delegate to execute right after the window has been moved--Add by Taody */
void SetOnWindowResized(const FOnWindowResized& InDelegate);
为SWindow添加成员变量:
/** Invoked when the window is resized--Add by Taody */
FOnWindowResized OnWindowSized;
其次,在SWindow.cpp中实现调用逻辑
/** Sets the delegate to execute right after the window has been moved */
void SWindow::SetOnWindowResized(const FOnWindowMoved& InDelegate)
{
OnWindowSized