SimpleWindow
载入中...
搜索中...
未找到
Window.h
1#pragma once
2
3#include "Color.h"
4#include "Cursor.h"
5#include "IDialog.h"
6#include "Layer.h"
7#include "Menu.h"
8#include "Screen.h"
9#include "UIElement.h"
10
11namespace sw
12{
16 enum class WindowState {
17 Normal, // 普通窗口
18 Minimized, // 最小化窗口
19 Maximized, // 最大化窗口
20 };
21
25 enum class WindowStartupLocation {
26 Manual, // 使用系统默认或手动设置
27 CenterScreen, // 屏幕中心
28 CenterOwner, // 所有者窗口中心
29 };
30
34 class Window : public Layer, public IDialog
35 {
36 private:
40 using TBase = Layer;
41
45 bool _isFirstShow = true;
46
50 WindowStartupLocation _startupLocation = WindowStartupLocation::Manual;
51
55 sw::Menu *_menu = nullptr;
56
60 HWND _hPrevFocused = NULL;
61
65 std::unique_ptr<LayoutHost> _defaultLayout;
66
70 bool _isModal = false;
71
75 HWND _hModalOwner = NULL;
76
80 bool _isBorderless = false;
81
85 int _dialogResult = 0;
86
90 bool _isDestroying = false;
91
95 int _disableLayoutCount = 0;
96
97 public:
102
108
113
118
123
128
133
138
143
148
153
158
163
169
174
180
185
190
191 public:
196
201
202 protected:
206 virtual LRESULT WndProc(ProcMsg &refMsg) override;
207
211 virtual LayoutHost *GetDefaultLayout() override;
212
217 virtual bool OnCreate() override;
218
223 virtual bool OnClose() override;
224
229 virtual bool OnDestroy() override;
230
237 virtual bool OnEraseBackground(HDC hdc, LRESULT &result) override;
238
243 virtual bool OnPaint() override;
244
249 virtual void OnMenuCommand(int id) override;
250
254 virtual void OnMinMaxSizeChanged() override;
255
259 virtual void OnFirstShow();
260
264 virtual void OnActived();
265
269 virtual void OnInactived();
270
278 virtual bool OnDpiChanged(int dpiX, int dpiY, RECT &newRect);
279
280 public:
285 virtual Window *ToWindow() override;
286
290 virtual void Close() override;
291
295 virtual void Show() override;
296
303 virtual int ShowDialog(Window *owner = nullptr) override;
304
311 virtual int ShowDialog(Window &owner);
312
320
327 bool EnableLayout(bool reset = false);
328
333 void SetIcon(HICON hIcon);
334
339
346
350 template <typename TLayout>
352 -> typename std::enable_if<std::is_base_of<LayoutHost, TLayout>::value>::type
353 {
354 auto layout = std::make_unique<TLayout>();
355 layout->Associate(this);
356 _defaultLayout = std::move(layout);
358 }
359
363 template <std::nullptr_t>
365 {
366 _defaultLayout.reset(nullptr);
368 }
369
370 private:
374 bool _IsLayoutDisabled() const noexcept;
375
380 void _CenterWindow(const sw::Rect &rect);
381
386 void _ClampMinMaxSize(PMINMAXINFO pInfo);
387
393 static Window *_GetWindowPtr(HWND hwnd);
394
400 static void _SetWindowPtr(HWND hwnd, Window &wnd);
401
406 static HICON _GetWindowDefaultIcon();
407 };
408}
对话框接口
Definition IDialog.h:11
表示可以设置布局方式的元素类型,如窗口、面板等
Definition Layer.h:13
Layer()
初始化Layer
用于托管元素的布局方式的对象类型,是所有布局方式类型的基类
Definition LayoutHost.h:11
菜单
Definition Menu.h:11
属性
Definition Property.h:1743
只读属性
Definition Property.h:1828
void InvalidateMeasure()
使元素的布局状态失效,并立即触发布局更新
窗口
Definition Window.h:35
const ReadOnlyProperty< sw::Rect > RestoreRect
窗口在最小化或最大化之前的位置和尺寸
Definition Window.h:184
virtual bool OnDestroy() override
接收到WM_DESTROY时调用该函数
bool DisableLayout()
禁用窗口布局
const Property< bool > Topmost
窗口是否置顶
Definition Window.h:137
const Property< bool > Borderless
窗口无边框
Definition Window.h:173
void SetLayout()
取消通过SetLayout设置的布局方式
Definition Window.h:364
virtual void OnActived()
窗口成为前台窗口时调用该函数
Window()
初始化窗口
const Property< WindowState > State
窗口状态
Definition Window.h:117
auto SetLayout() -> typename std::enable_if< std::is_base_of< LayoutHost, TLayout >::value >::type
设置窗口的默认布局方式
Definition Window.h:351
const Property< sw::Menu * > Menu
窗口顶部的菜单栏
Definition Window.h:147
static const ReadOnlyProperty< int > WindowCount
当前线程已创建的窗口数
Definition Window.h:107
virtual void OnFirstShow()
窗口第一次显示时调用该函数
const ReadOnlyProperty< bool > IsLayoutDisabled
窗口布局是否被禁用
Definition Window.h:189
void DrawMenuBar()
重回窗口的菜单栏
virtual bool OnCreate() override
接收到WM_CREATE时调用该函数
virtual int ShowDialog(Window &owner)
将窗口显示为模式对话框
virtual bool OnDpiChanged(int dpiX, int dpiY, RECT &newRect)
接收到WM_DPICHANGED时调用该函数
const Property< WindowStartupLocation > StartupLocation
窗口初次启动的位置
Definition Window.h:112
bool SizeToContent()
调整窗口尺寸以适应其内容大小
virtual bool OnClose() override
接收到WM_CLOSE时调用该函数
virtual Window * ToWindow() override
尝试将对象转换成Window
const Property< bool > SizeBox
窗口是否可调整大小
Definition Window.h:122
static const ReadOnlyProperty< Window * > ActiveWindow
当前线程的活动窗口
Definition Window.h:101
virtual int ShowDialog(Window *owner=nullptr) override
将窗口显示为模式对话框
const Property< bool > MaximizeBox
最大化按钮是否可用
Definition Window.h:127
const ReadOnlyProperty< bool > IsModal
窗口是否显示为模态窗口,当调用ShowDialog时该属性值为true,否则为false
Definition Window.h:152
const Property< double > Opacity
窗口的透明度,范围为0.0~1.0
Definition Window.h:168
virtual void OnMenuCommand(int id) override
当OnCommand接收到菜单命令时调用该函数
void SetIcon(HICON hIcon)
设置图标
virtual void OnMinMaxSizeChanged() override
当MinWidth、MinHeight、MaxWidth或MaxHeight属性更改时调用此函数
virtual void OnInactived()
窗口成为后台窗口时调用该函数
const Property< bool > MinimizeBox
最小化按钮是否可用
Definition Window.h:132
bool EnableLayout(bool reset=false)
恢复窗口布局,与DisableLayout配对使用
const Property< bool > IsLayered
窗口是否为分层窗口,即WS_EX_LAYERED样式是否被设置
Definition Window.h:162
virtual LayoutHost * GetDefaultLayout() override
获取默认布局对象
const Property< bool > ToolWindow
是否显示为ToolWindow (窄边框)
Definition Window.h:142
virtual void Show() override
显示窗口
~Window()
析构函数
const Property< int > DialogResult
窗口的对话框结果,ShowDialog返回该值
Definition Window.h:179
virtual void Close() override
关闭窗口
virtual LRESULT WndProc(ProcMsg &refMsg) override
对WndProc的封装
virtual bool OnEraseBackground(HDC hdc, LRESULT &result) override
接收到WM_ERASEBKGND时调用该函数
virtual bool OnPaint() override
接收到WM_PAINT时调用该函数
const Property< Window * > Owner
拥有者窗口
Definition Window.h:157
对Windows窗口消息的封装
Definition ProcMsg.h:10
表示一个矩形区域
Definition Rect.h:17