SimpleWindow
载入中...
搜索中...
未找到
Window.h
1#pragma once
2
3#include "IDialog.h"
4#include "Layer.h"
5
6namespace sw
7{
8 class Menu; // Menu.h
9
13 enum class WindowState {
14 Normal,
15 Minimized,
16 Maximized,
17 };
18
23 Manual,
26 };
27
31 class Window : public Layer<UIElement>, public IDialog
32 {
33 private:
37 using TBase = Layer;
38
42 bool _isFirstShow = true;
43
48
52 sw::Menu *_menu = nullptr;
53
57 HWND _hPrevFocused = NULL;
58
62 std::unique_ptr<LayoutHost> _defaultLayout;
63
67 bool _isModal = false;
68
72 HWND _hModalOwner = NULL;
73
77 bool _isBorderless = false;
78
82 int _dialogResult = 0;
83
87 bool _isDestroying = false;
88
92 int _disableLayoutCount = 0;
93
94 public:
99
105
110
115
120
125
130
135
140
145
150
155
160
166
171
177
182
187
188 public:
193
198
199 protected:
203 virtual LRESULT WndProc(ProcMsg &refMsg) override;
204
208 virtual LayoutHost *GetDefaultLayout() override;
209
214 virtual bool OnCreate() override;
215
220 virtual bool OnClose() override;
221
226 virtual bool OnDestroy() override;
227
234 virtual bool OnEraseBackground(HDC hdc, LRESULT &result) override;
235
240 virtual bool OnPaint() override;
241
246 virtual void OnMenuCommand(int id) override;
247
251 virtual void OnMinMaxSizeChanged() override;
252
256 virtual void OnFirstShow();
257
261 virtual void OnActived();
262
266 virtual void OnInactived();
267
275 virtual bool OnDpiChanged(int dpiX, int dpiY, RECT &newRect);
276
277 public:
281 virtual void Close() override;
282
286 virtual void Show() override;
287
294 virtual int ShowDialog(Window *owner = nullptr) override;
295
302 virtual int ShowDialog(Window &owner);
303
311
318 bool EnableLayout(bool reset = false);
319
325
330
337
341 template <typename TLayout>
343 -> typename std::enable_if<std::is_base_of<LayoutHost, TLayout>::value>::type
344 {
345 auto layout = std::make_unique<TLayout>();
346 layout->Associate(this);
347 _defaultLayout = std::move(layout);
348 InvalidateMeasure();
349 }
350
354 template <std::nullptr_t>
356 {
357 _defaultLayout.reset(nullptr);
358 InvalidateMeasure();
359 }
360
361 private:
365 bool _IsLayoutDisabled() const noexcept;
366
371 void _CenterWindow(const sw::Rect &rect);
372
377 void _ClampMinMaxSize(PMINMAXINFO pInfo);
378
384 static Window *_GetWindowPtr(HWND hwnd);
385
391 static void _SetWindowPtr(HWND hwnd, Window &wnd);
392
397 static HICON _GetWindowDefaultIcon();
398 };
399}
对话框接口
Definition IDialog.h:11
值转换器接口
Definition IValueConverter.h:14
Definition Layer.h:12
用于托管元素的布局方式的对象类型,是所有布局方式类型的基类
Definition LayoutHost.h:11
菜单
Definition Menu.h:11
窗口
Definition Window.h:32
const ReadOnlyProperty< sw::Rect > RestoreRect
窗口在最小化或最大化之前的位置和尺寸
Definition Window.h:181
virtual bool OnDestroy() override
接收到WM_DESTROY时调用该函数
bool DisableLayout()
禁用窗口布局
const Property< bool > Topmost
窗口是否置顶
Definition Window.h:134
const Property< bool > Borderless
窗口无边框
Definition Window.h:170
void SetLayout()
取消通过SetLayout设置的布局方式
Definition Window.h:355
virtual void OnActived()
窗口成为前台窗口时调用该函数
Window()
初始化窗口
const Property< WindowState > State
窗口状态
Definition Window.h:114
auto SetLayout() -> typename std::enable_if< std::is_base_of< LayoutHost, TLayout >::value >::type
设置窗口的默认布局方式
Definition Window.h:342
const Property< sw::Menu * > Menu
窗口顶部的菜单栏
Definition Window.h:144
static const ReadOnlyProperty< int > WindowCount
当前线程已创建的窗口数
Definition Window.h:104
virtual void OnFirstShow()
窗口第一次显示时调用该函数
const ReadOnlyProperty< bool > IsLayoutDisabled
窗口布局是否被禁用
Definition Window.h:186
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:109
bool SizeToContent()
调整窗口尺寸以适应其内容大小
virtual bool OnClose() override
接收到WM_CLOSE时调用该函数
const Property< bool > SizeBox
窗口是否可调整大小
Definition Window.h:119
static const ReadOnlyProperty< Window * > ActiveWindow
当前线程的活动窗口
Definition Window.h:98
virtual int ShowDialog(Window *owner=nullptr) override
将窗口显示为模式对话框
const Property< bool > MaximizeBox
最大化按钮是否可用
Definition Window.h:124
const ReadOnlyProperty< bool > IsModal
窗口是否显示为模态窗口,当调用ShowDialog时该属性值为true,否则为false
Definition Window.h:149
const Property< double > Opacity
窗口的透明度,范围为0.0~1.0
Definition Window.h:165
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:129
bool EnableLayout(bool reset=false)
恢复窗口布局,与DisableLayout配对使用
const Property< bool > IsLayered
窗口是否为分层窗口,即WS_EX_LAYERED样式是否被设置
Definition Window.h:159
virtual LayoutHost * GetDefaultLayout() override
获取默认布局对象
const Property< bool > ToolWindow
是否显示为ToolWindow (窄边框)
Definition Window.h:139
virtual void Show() override
显示窗口
~Window()
析构函数
const Property< int > DialogResult
窗口的对话框结果,ShowDialog返回该值
Definition Window.h:176
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:154
SimpleWindow框架的顶级命名空间,所有公共类型、控件、枚举和工具函数均定义于此。
Definition Alignment.h:4
@ Manual
需手动调用QuitMsgLoop以退出消息循环
WindowState
窗口状态
Definition Window.h:13
@ Minimized
最小化窗口
@ Maximized
最大化窗口
@ Menu
菜单颜色
@ Normal
位图置于BmpBox左上角
WindowStartupLocation
窗口启动位置
Definition Window.h:22
@ CenterOwner
所有者窗口中心
@ Manual
使用系统默认或手动设置
@ CenterScreen
屏幕中心
对Windows窗口消息的封装
Definition ProcMsg.h:10
表示一个矩形区域
Definition Rect.h:17