SimpleWindow
载入中...
搜索中...
未找到
sw::Window类 参考

窗口 更多...

#include <Window.h>

类 sw::Window 继承关系图:
sw::Layer sw::IDialog sw::UIElement sw::WndBase sw::ILayout sw::ITag sw::ObservableObject sw::IToString< WndBase > sw::IEqualityComparable< WndBase > sw::DynamicObject sw::INotifyObjectDead sw::INotifyPropertyChanged

Public 成员函数

 Window ()
 初始化窗口
 
 ~Window ()
 析构函数
 
virtual WindowToWindow () override
 尝试将对象转换成Window
 
virtual void Close () override
 关闭窗口
 
virtual void Show () override
 显示窗口
 
virtual int ShowDialog (Window *owner=nullptr) override
 将窗口显示为模式对话框
 
virtual int ShowDialog (Window &owner)
 将窗口显示为模式对话框
 
bool DisableLayout ()
 禁用窗口布局
 
bool EnableLayout (bool reset=false)
 恢复窗口布局,与DisableLayout配对使用
 
void SetIcon (HICON hIcon)
 设置图标
 
void DrawMenuBar ()
 重回窗口的菜单栏
 
bool SizeToContent ()
 调整窗口尺寸以适应其内容大小
 
template<typename TLayout >
auto SetLayout () -> typename std::enable_if< std::is_base_of< LayoutHost, TLayout >::value >::type
 设置窗口的默认布局方式
 
template<std::nullptr_t >
void SetLayout ()
 取消通过SetLayout设置的布局方式
 
- Public 成员函数 继承自 sw::Layer
 Layer ()
 初始化Layer
 
virtual ~Layer ()=0
 析构函数,这里用纯虚函数使该类成为抽象类
 
void GetHorizontalScrollRange (double &refMin, double &refMax)
 获取横向滚动条的范围
 
void GetVerticalScrollRange (double &refMin, double &refMax)
 获取纵向滚动条的范围
 
void SetHorizontalScrollRange (double min, double max)
 设置横向滚动条的范围
 
void SetVerticalScrollRange (double min, double max)
 设置纵向滚动条的范围
 
double GetHorizontalScrollPageSize ()
 获取水平滚动条滚动页面大小
 
double GetVerticalScrollPageSize ()
 获取垂直滚动条滚动页面大小
 
void SetHorizontalScrollPageSize (double pageSize)
 设置水平滚动条滚动页面大小
 
void SetVerticalScrollPageSize (double pageSize)
 设置垂直滚动条滚动页面大小
 
void UpdateScrollRange ()
 根据子元素更新滚动条范围,未设定布局方式时该函数无效
 
void ScrollToTop ()
 将垂直滚动条移动到顶部
 
void ScrollToBottom ()
 将垂直滚动条移动到底部
 
void ScrollToLeft ()
 将水平滚动条移动到最左
 
void ScrollToRight ()
 将水平滚动条移动到最右
 
void ScrollHorizontal (double offset)
 水平滚动
 
void ScrollVertical (double offset)
 垂直滚动
 
- Public 成员函数 继承自 sw::UIElement
 UIElement ()
 初始化UIElement
 
virtual ~UIElement ()=0
 析构函数,这里用纯虚函数使该类成为抽象类
 
void RegisterRoutedEvent (RoutedEventType eventType, const RoutedEventHandler &handler)
 注册路由事件处理函数,当事件已注册时会覆盖已注册的函数
 
void AddHandler (RoutedEventType eventType, const RoutedEventHandler &handler)
 添加路由事件处理函数
 
bool RemoveHandler (RoutedEventType eventType, const RoutedEventHandler &handler)
 移除已添加的路由事件处理函数
 
void UnregisterRoutedEvent (RoutedEventType eventType)
 取消对应类型路由事件的注册,该函数会移除对应事件所有的处理函数
 
bool IsRoutedEventRegistered (RoutedEventType eventType)
 判断路由事件是否已存在事件处理函数
 
UIElementoperator[] (int index) const
 通过索引获取子元素
 
UIElementGetChildAt (int index) const
 获取子元素
 
bool AddChild (UIElement *element)
 添加子元素
 
bool AddChild (UIElement &element)
 添加子元素
 
bool AddChild (UIElement *element, uint64_t layoutTag)
 添加子元素并设置布局标记
 
bool AddChild (UIElement &element, uint64_t layoutTag)
 添加子元素并设置布局标记
 
bool RemoveChildAt (int index)
 移除指定索引处的子元素
 
bool RemoveChild (UIElement *element)
 移除子元素
 
bool RemoveChild (UIElement &element)
 移除子元素
 
void ClearChildren ()
 移除所有子元素
 
int IndexOf (UIElement *element)
 获取指定元素的索引
 
int IndexOf (UIElement &element)
 获取指定元素的索引
 
bool ShowContextMenu (const Point &point, sw::HorizontalAlignment horz=sw::HorizontalAlignment::Left, sw::VerticalAlignment vert=sw::VerticalAlignment::Top)
 弹出当前元素的上下文菜单
 
void MoveToTop ()
 移动到界面顶部
 
void MoveToBottom ()
 移动到界面底部
 
bool IsRootElement () const
 判断当前元素是否为根节点
 
UIElementGetRootElement ()
 获取当前元素所在界面树的根节点
 
UIElementGetNextElement ()
 获取当前元素在界面树上的下一个节点,若已是最后一个节点则返回根节点
 
UIElementGetPreviousElement ()
 获取当前元素在界面树上的上一个节点,若元素为第一个节点则返回最后一个节点
 
UIElementGetNextTabStopElement ()
 获取下一个TabStop属性为true的元素
 
UIElementGetPreviousTabStopElement ()
 获取上一个TabStop属性为true的元素
 
Color GetRealBackColor () const
 获取当前要显示的背景颜色
 
Color GetRealTextColor () const
 获取当前要显示的文本颜色
 
void SetCursor (HCURSOR hCursor)
 设置鼠标样式
 
void SetCursor (StandardCursor cursor)
 设置鼠标样式
 
void ResetCursor ()
 将鼠标样式设置为默认样式
 
void SetAlignment (sw::HorizontalAlignment horz, sw::VerticalAlignment vert)
 设置对齐方式
 
void Resize (const Size &size)
 调整当前元素的尺寸
 
bool IsLayoutUpdateConditionSet (sw::LayoutUpdateCondition condition)
 判断指定的布局更新条件是否已设置
 
void InvalidateMeasure ()
 使元素的布局状态失效,并立即触发布局更新
 
bool BringIntoView ()
 尝试将当前元素移动到可视区域内
 
bool AddBinding (BindingBase *binding)
 添加绑定对象
 
bool AddBinding (Binding *binding)
 添加绑定对象
 
bool AddBinding (DataBinding *binding)
 添加绑定到DataContext的绑定对象
 
bool RemoveBinding (FieldId propertyId)
 移除指定属性的绑定对象
 
virtual uint64_t GetTag () const override
 获取Tag
 
virtual void SetTag (uint64_t tag) override
 设置Tag
 
virtual uint64_t GetLayoutTag () const override
 获取布局标记
 
virtual int GetChildLayoutCount () const override
 获取参与布局的子元素数量
 
virtual ILayoutGetChildLayoutAt (int index) override
 获取对应索引处的子元素,只索引参与布局的子元素
 
virtual Size GetDesireSize () const override
 获取当前元素所需尺寸
 
virtual void Measure (const Size &availableSize) override
 测量元素所需尺寸
 
virtual UIElementToUIElement () override
 尝试将对象转换成UIElement
 
template<typename First , typename... Rest>
auto AddChildren (First &&first, Rest &&...rest) -> typename std::enable_if< _CanAddChildren< First, Rest... >::value, int >::type
 添加多个子元素
 
template<typename T >
auto AddChildren (T &&child) -> typename std::enable_if< _CanAddChild< T >::value, int >::type
 添加多个子元素
 
template<typename T >
void RegisterRoutedEvent (RoutedEventType eventType, T &obj, void(T::*handler)(UIElement &, RoutedEventArgs &))
 注册成员函数作为路由事件处理函数,当事件已注册时会覆盖已注册的函数
 
template<typename TEventArgs >
auto RegisterRoutedEvent (const Action< UIElement &, TEventArgs & > &handler) -> typename std::enable_if< std::is_base_of< RoutedEventArgs, TEventArgs >::value &&sw::_IsTypedRoutedEventArgs< TEventArgs >::value >::type
 根据事件参数类型注册路由事件,当事件已注册时会覆盖已注册的函数
 
template<typename TEventArgs , typename THandleObj >
auto RegisterRoutedEvent (THandleObj &obj, void(THandleObj::*handler)(UIElement &, TEventArgs &)) -> typename std::enable_if< std::is_base_of< RoutedEventArgs, TEventArgs >::value &&sw::_IsTypedRoutedEventArgs< TEventArgs >::value >::type
 根据事件参数类型注册成员函数作为路由事件,当事件已注册时会覆盖已注册的函数
 
template<typename T >
void AddHandler (RoutedEventType eventType, T &obj, void(T::*handler)(UIElement &, RoutedEventArgs &))
 添加成员函数作为路由事件处理函数
 
template<typename TEventArgs >
auto AddHandler (const Action< UIElement &, TEventArgs & > &handler) -> typename std::enable_if< std::is_base_of< RoutedEventArgs, TEventArgs >::value &&sw::_IsTypedRoutedEventArgs< TEventArgs >::value >::type
 根据事件参数类型添加路由事件处理函数
 
template<typename TEventArgs , typename THandleObj >
auto AddHandler (THandleObj &obj, void(THandleObj::*handler)(UIElement &, TEventArgs &)) -> typename std::enable_if< std::is_base_of< RoutedEventArgs, TEventArgs >::value &&sw::_IsTypedRoutedEventArgs< TEventArgs >::value >::type
 根据事件参数类型添加成员函数作为路由事件处理函数
 
template<typename TEventArgs >
auto AddHandler (RoutedEventType eventType, const Action< UIElement &, TEventArgs & > &handler) -> typename std::enable_if< std::is_base_of< RoutedEventArgs, TEventArgs >::value &&!std::is_same< TEventArgs, RoutedEventArgs >::value &&!sw::_IsTypedRoutedEventArgs< TEventArgs >::value >::type
 添加路由事件处理函数
 
template<typename TEventArgs , typename THandleObj >
auto AddHandler (RoutedEventType eventType, THandleObj &obj, void(THandleObj::*handler)(UIElement &, TEventArgs &)) -> typename std::enable_if< std::is_base_of< RoutedEventArgs, TEventArgs >::value &&!std::is_same< TEventArgs, RoutedEventArgs >::value &&!sw::_IsTypedRoutedEventArgs< TEventArgs >::value >::type
 添加成员函数作为路由事件处理函数
 
template<typename T >
bool RemoveHandler (RoutedEventType eventType, T &obj, void(T::*handler)(UIElement &, RoutedEventArgs &))
 移除已添加的类型为成员函数的路由事件处理函数
 
template<typename TEventArgs >
auto RemoveHandler (const Action< UIElement &, TEventArgs & > &handler) -> typename std::enable_if< std::is_base_of< RoutedEventArgs, TEventArgs >::value &&sw::_IsTypedRoutedEventArgs< TEventArgs >::value, bool >::type
 移除已添加的路由事件处理函数
 
template<typename TEventArgs , typename THandleObj >
auto RemoveHandler (THandleObj &obj, void(THandleObj::*handler)(UIElement &, TEventArgs &)) -> typename std::enable_if< std::is_base_of< RoutedEventArgs, TEventArgs >::value &&sw::_IsTypedRoutedEventArgs< TEventArgs >::value, bool >::type
 移除已添加的类型为成员函数的路由事件处理函数
 
template<typename TEventArgs >
auto RemoveHandler (RoutedEventType eventType, const Action< UIElement &, TEventArgs & > &handler) -> typename std::enable_if< std::is_base_of< RoutedEventArgs, TEventArgs >::value &&!std::is_same< TEventArgs, RoutedEventArgs >::value &&!sw::_IsTypedRoutedEventArgs< TEventArgs >::value, bool >::type
 移除已添加的路由事件处理函数
 
template<typename TEventArgs , typename THandleObj >
auto RemoveHandler (RoutedEventType eventType, THandleObj &obj, void(THandleObj::*handler)(UIElement &, TEventArgs &)) -> typename std::enable_if< std::is_base_of< RoutedEventArgs, TEventArgs >::value &&!std::is_same< TEventArgs, RoutedEventArgs >::value &&!sw::_IsTypedRoutedEventArgs< TEventArgs >::value, bool >::type
 移除已添加的类型为成员函数的路由事件处理函数
 
template<typename T , typename TProperty >
bool RemoveBinding (TProperty T::*prop)
 移除指定属性的绑定对象
 
- Public 成员函数 继承自 sw::WndBase
virtual ~WndBase ()=0
 析构函数,这里用纯虚函数使该类成为抽象类
 
virtual ControlToControl ()
 尝试将对象转换成Control
 
bool Equals (const WndBase &other) const
 判断当前对象与另一个WndBase是否相等
 
virtual std::wstring ToString () const
 获取当前对象的描述字符串
 
void UpdateInternalRect ()
 同步窗口位置和尺寸到内部记录的Rect
 
void UpdateInternalText ()
 同步窗口文本到内部记录的字符串
 
void Show (int nCmdShow)
 该函数调用ShowWindow
 
void Close ()
 发送关闭消息
 
void Update ()
 该函数调用UpdateWindow
 
void UpdateFont ()
 更新字体
 
HFONT GetFontHandle ()
 获取字体句柄
 
void Redraw (bool erase=false, bool updateWindow=false)
 重画
 
bool IsVisible () const
 判断当前对象在界面中是否可视,与Visible属性不同的是该函数返回值会受父窗口的影响
 
DWORD GetStyle () const
 获取窗口样式
 
void SetStyle (DWORD style)
 设置窗口样式
 
bool GetStyle (DWORD mask) const
 判断窗口是否设有指定样式
 
void SetStyle (DWORD mask, bool value)
 打开或关闭指定的样式
 
DWORD GetExtendedStyle () const
 获取扩展窗口样式
 
void SetExtendedStyle (DWORD style)
 设置扩展窗口样式
 
bool GetExtendedStyle (DWORD mask)
 判断窗口是否设有指定扩展样式
 
void SetExtendedStyle (DWORD mask, bool value)
 打开或关闭指定的扩展样式
 
Point PointToScreen (const Point &point) const
 获取用户区点在屏幕上点的位置
 
Point PointFromScreen (const Point &screenPoint) const
 获取屏幕上点在当前用户区点的位置
 
LRESULT SendMessageA (UINT uMsg, WPARAM wParam, LPARAM lParam)
 发送消息(ASCII)
 
LRESULT SendMessageW (UINT uMsg, WPARAM wParam, LPARAM lParam)
 发送消息(UNICODE)
 
BOOL PostMessageA (UINT uMsg, WPARAM wParam, LPARAM lParam)
 发送消息(ASCII)并立即返回
 
BOOL PostMessageW (UINT uMsg, WPARAM wParam, LPARAM lParam)
 发送消息(UNICODE)并立即返回
 
HitTestResult NcHitTest (const Point &testPoint)
 测试指定点在窗口的哪一部分
 
void Invoke (const SimpleAction &action)
 在窗口线程上执行指定委托
 
void InvokeAsync (const SimpleAction &action)
 在窗口线程上执行指定委托,并立即返回
 
DWORD GetThreadId () const
 获取当前窗口所属线程的线程id
 
bool CheckAccess () const
 判断当前线程是否为窗口所属线程
 
bool CheckAccess (const WndBase &other) const
 判断当前对象所属线程是否与另一个WndBase对象所属线程相同
 
template<typename TDerived , typename TProperty >
auto GetProperty (TProperty TDerived::*prop) -> typename std::enable_if< std::is_base_of< WndBase, TDerived >::value &&_IsReadableProperty< TProperty >::value, typename TProperty::TValue >::type
 获取属性值
 
template<typename TDerived , typename TProperty >
auto SetProperty (TProperty TDerived::*prop, typename TProperty::TSetterParam value) -> typename std::enable_if< std::is_base_of< WndBase, TDerived >::value &&_IsWritableProperty< TProperty >::value >::type
 设置属性值
 
- Public 成员函数 继承自 sw::DynamicObject
virtual ~DynamicObject ()=default
 析构函数
 
std::type_index GetTypeIndex () const
 获取对象的类型索引
 
template<typename T >
bool IsType (T **pout=nullptr)
 判断对象是否为指定类型
 
template<typename T >
bool IsType (const T **pout=nullptr) const
 判断对象是否为指定类型
 
template<typename T >
T & DynamicCast ()
 将对象动态转换为指定类型的引用
 
template<typename T >
const T & DynamicCast () const
 将对象动态转换为指定类型的常量引用
 
template<typename T >
auto UnsafeCast () -> typename std::enable_if< _IsStaticCastable< DynamicObject *, T * >::value, T & >::type
 将对象不安全地转换为指定类型的引用
 
template<typename T >
auto UnsafeCast () -> typename std::enable_if<!_IsStaticCastable< DynamicObject *, T * >::value, T & >::type
 将对象不安全地转换为指定类型的引用
 
template<typename T >
auto UnsafeCast () const -> typename std::enable_if< _IsStaticCastable< DynamicObject *, T * >::value, const T & >::type
 将对象不安全地转换为指定类型的引用
 
template<typename T >
auto UnsafeCast () const -> typename std::enable_if<!_IsStaticCastable< DynamicObject *, T * >::value, const T & >::type
 将对象不安全地转换为指定类型的引用
 
- Public 成员函数 继承自 sw::INotifyObjectDead
virtual ~INotifyObjectDead ()
 析构时触发对象销毁事件
 
- Public 成员函数 继承自 sw::INotifyPropertyChanged
virtual ~INotifyPropertyChanged ()=default
 默认析构函数
 
- Public 成员函数 继承自 sw::IToString< WndBase >
std::wstring ToString () const
 获取描述当前对象的字符串
 
- Public 成员函数 继承自 sw::IEqualityComparable< WndBase >
bool Equals (const WndBase & other) const
 判断当前对象与另一个对象是否相等
 
bool operator== (const WndBase & other) const
 判断当前对象是否与另一个对象相等
 
bool operator!= (const WndBase & other) const
 判断当前对象是否与另一个对象不相等
 
- Public 成员函数 继承自 sw::ILayout
virtual ~ILayout ()=default
 默认虚析构函数
 
- Public 成员函数 继承自 sw::ITag
virtual ~ITag ()=default
 默认虚析构函数
 
- Public 成员函数 继承自 sw::IDialog
virtual ~IDialog ()=default
 默认虚析构函数
 

Public 属性

const Property< WindowStartupLocation > StartupLocation
 窗口初次启动的位置
 
const Property< WindowState > State
 窗口状态
 
const Property< bool > SizeBox
 窗口是否可调整大小
 
const Property< bool > MaximizeBox
 最大化按钮是否可用
 
const Property< bool > MinimizeBox
 最小化按钮是否可用
 
const Property< bool > Topmost
 窗口是否置顶
 
const Property< bool > ToolWindow
 是否显示为ToolWindow (窄边框)
 
const Property< sw::Menu * > Menu
 窗口顶部的菜单栏
 
const ReadOnlyProperty< bool > IsModal
 窗口是否显示为模态窗口,当调用ShowDialog时该属性值为true,否则为false
 
const Property< Window * > Owner
 拥有者窗口
 
const Property< bool > IsLayered
 窗口是否为分层窗口,即WS_EX_LAYERED样式是否被设置
 
const Property< double > Opacity
 窗口的透明度,范围为0.0~1.0
 
const Property< bool > Borderless
 窗口无边框
 
const Property< int > DialogResult
 窗口的对话框结果,ShowDialog返回该值
 
const ReadOnlyProperty< sw::RectRestoreRect
 窗口在最小化或最大化之前的位置和尺寸
 
const ReadOnlyProperty< bool > IsLayoutDisabled
 窗口布局是否被禁用
 
- Public 属性 继承自 sw::Layer
const Property< LayoutHost * > Layout
 自定义的布局方式,赋值后将自动与所指向的布局关联,每个布局只能关联一个对象,设为nullptr可恢复默认布局
 
const Property< bool > AutoSize
 是否按照布局方式与子元素自动调整尺寸,该属性仅在当前元素已设置布局方式并且非顶级元素时有效
 
const Property< bool > HorizontalScrollBar
 是否显示横向滚动条
 
const Property< bool > VerticalScrollBar
 是否显示纵向滚动条
 
const Property< double > HorizontalScrollPos
 横向滚动条位置
 
const Property< double > VerticalScrollPos
 纵向滚动条位置
 
const ReadOnlyProperty< double > HorizontalScrollLimit
 横向滚动条可设置的最大位置
 
const ReadOnlyProperty< double > VerticalScrollLimit
 纵向滚动条可设置的最大位置
 
const Property< bool > MouseWheelScrollEnabled
 是否在鼠标滚动时滚动内容
 
- Public 属性 继承自 sw::UIElement
DataContextChangedEventHandler DataContextChanged
 数据上下问改变时触发该事件
 
const Property< ThicknessMargin
 边距
 
const Property< HorizontalAlignment > HorizontalAlignment
 水平对齐方式
 
const Property< VerticalAlignment > VerticalAlignment
 垂直对齐方式
 
const ReadOnlyProperty< int > ChildCount
 子元素数量
 
const Property< bool > CollapseWhenHide
 是否在不可见时不参与布局
 
const ReadOnlyProperty< UIElement * > Parent
 指向父元素的指针,当前元素为顶级窗口时该值为nullptr
 
const Property< uint64_t > Tag
 储存用户自定义信息的标记
 
const Property< uint64_t > LayoutTag
 布局标记,对于不同的布局有不同含义
 
const Property< sw::ContextMenu * > ContextMenu
 右键按下时弹出的菜单
 
const Property< bool > Float
 元素是否悬浮,若元素悬浮则该元素不会随滚动条滚动而改变位置
 
const Property< bool > TabStop
 表示用户是否可以通过按下Tab键将焦点移动到当前元素
 
const Property< ColorBackColor
 背景颜色,修改该属性会同时将Transparent属性设为false,对于部分控件该属性可能不生效
 
const Property< ColorTextColor
 文本颜色,修改该属性会同时将InheritTextColor属性设为false,对于部分控件该属性可能不生效
 
const Property< bool > Transparent
 是否使用透明背景
 
const Property< bool > InheritTextColor
 是否继承父元素的文本颜色
 
const Property< sw::LayoutUpdateCondition > LayoutUpdateCondition
 触发布局更新的条件
 
const ReadOnlyProperty< bool > IsMeasureValid
 当前元素的布局状态是否有效
 
const Property< double > MinWidth
 最小宽度,当值为负数或0时表示不限制
 
const Property< double > MinHeight
 最小高度,当值为负数或0时表示不限制
 
const Property< double > MaxWidth
 最大宽度,当值为负数或0时表示不限制
 
const Property< double > MaxHeight
 最大高度,当值为负数或0时表示不限制
 
const ReadOnlyProperty< sw::RectLogicalRect
 元素的逻辑位置和尺寸,即去除布局偏移以及拉伸影响的位置和尺寸
 
const Property< bool > IsHitTestVisible
 当前元素是否响应鼠标事件
 
const ReadOnlyProperty< bool > IsFocusedViaTab
 当前元素是否是通过按下Tab键获得的焦点
 
const Property< DynamicObject * > DataContext
 数据上下文
 
const ReadOnlyProperty< DynamicObject * > CurrentDataContext
 当前元素的有效数据上下文
 
- Public 属性 继承自 sw::WndBase
const ReadOnlyProperty< HWND > Handle
 窗口句柄
 
const Property< sw::FontFont
 字体
 
const Property< std::wstring > FontName
 字体名称
 
const Property< double > FontSize
 字体大小
 
const Property< sw::FontWeight > FontWeight
 字体粗细
 
const Property< sw::RectRect
 位置和尺寸
 
const Property< double > Left
 左边
 
const Property< double > Top
 顶边
 
const Property< double > Width
 宽度
 
const Property< double > Height
 高度
 
const ReadOnlyProperty< sw::RectClientRect
 用户区尺寸
 
const ReadOnlyProperty< double > ClientWidth
 用户区宽度
 
const ReadOnlyProperty< double > ClientHeight
 用户区高度
 
const Property< bool > Enabled
 窗口或控件是否可用
 
const Property< bool > Visible
 窗口或控件是否可见
 
const Property< std::wstring > Text
 窗口标题或控件文本
 
const Property< bool > Focused
 窗口是否拥有焦点
 
const ReadOnlyProperty< WndBase * > Parent
 父窗口
 
const ReadOnlyProperty< bool > IsDestroyed
 是否已销毁,当该值为true时不应该继续使用当前对象
 
const Property< bool > AcceptFiles
 是否接受拖放文件
 
const ReadOnlyProperty< bool > IsControl
 当前对象是否是控件
 
const ReadOnlyProperty< std::wstring > ClassName
 窗口类名
 
const Property< bool > IsGroupStart
 窗口是否为一组控件中的第一个控件
 
const ReadOnlyProperty< bool > IsMouseCaptured
 鼠标是否被当前窗口捕获
 
- Public 属性 继承自 sw::INotifyObjectDead
ObjectDeadEventHandler ObjectDead
 对象销毁时触发该事件
 
- Public 属性 继承自 sw::INotifyPropertyChanged
PropertyChangedEventHandler PropertyChanged
 当属性值更改时触发的事件
 

静态 Public 属性

static const ReadOnlyProperty< Window * > ActiveWindow
 当前线程的活动窗口
 
static const ReadOnlyProperty< int > WindowCount
 当前线程已创建的窗口数
 

Protected 成员函数

virtual LRESULT WndProc (ProcMsg &refMsg) override
 对WndProc的封装
 
virtual LayoutHostGetDefaultLayout () override
 获取默认布局对象
 
virtual bool OnCreate () override
 接收到WM_CREATE时调用该函数
 
virtual bool OnClose () override
 接收到WM_CLOSE时调用该函数
 
virtual bool OnDestroy () override
 接收到WM_DESTROY时调用该函数
 
virtual bool OnEraseBackground (HDC hdc, LRESULT &result) override
 接收到WM_ERASEBKGND时调用该函数
 
virtual bool OnPaint () override
 接收到WM_PAINT时调用该函数
 
virtual void OnMenuCommand (int id) override
 当OnCommand接收到菜单命令时调用该函数
 
virtual void OnMinMaxSizeChanged () override
 当MinWidth、MinHeight、MaxWidth或MaxHeight属性更改时调用此函数
 
virtual void OnFirstShow ()
 窗口第一次显示时调用该函数
 
virtual void OnActived ()
 窗口成为前台窗口时调用该函数
 
virtual void OnInactived ()
 窗口成为后台窗口时调用该函数
 
virtual bool OnDpiChanged (int dpiX, int dpiY, RECT &newRect)
 接收到WM_DPICHANGED时调用该函数
 
- Protected 成员函数 继承自 sw::Layer
void UpdateLayout ()
 更新布局
 
virtual void OnScroll (ScrollOrientation scrollbar, ScrollEvent event, double pos)
 触发滚动条相关事件时调用该函数
 
virtual bool OnVerticalScroll (int event, int pos) override
 接收到WM_VSCROLL时调用目标控件的该函数
 
virtual bool OnHorizontalScroll (int event, int pos) override
 接收到WM_HSCROLL时调用目标控件的该函数
 
virtual void Arrange (const sw::Rect &finalPosition) override
 安排元素位置
 
virtual Size MeasureOverride (const Size &availableSize) override
 测量元素所需尺寸,无需考虑边框和边距
 
virtual void ArrangeOverride (const Size &finalSize) override
 安排子元素的位置,可重写该函数以实现自定义布局
 
virtual bool RequestBringIntoView (const sw::Rect &screenRect) override
 尝试将指定的矩形区域移动到可视区域内
 
virtual void OnRoutedEvent (RoutedEventArgs &eventArgs, const RoutedEventHandler &handler) override
 路由事件经过当前元素时调用该函数
 
- Protected 成员函数 继承自 sw::UIElement
void RaiseRoutedEvent (RoutedEventType eventType)
 触发路由事件
 
void RaiseRoutedEvent (RoutedEventArgs &eventArgs)
 触发路由事件
 
double & GetInternalArrangeOffsetX ()
 获取布局时子元素的水平偏移量
 
double & GetInternalArrangeOffsetY ()
 获取布局时子元素的垂直偏移量
 
double GetChildRightmost (bool update)
 获取所有子元素在当前元素中最右边的位置(只考虑参与布局的子窗口且忽略悬浮的元素)
 
double GetChildBottommost (bool update)
 获取所有子元素在当前元素中最底边的位置(只考虑参与布局的子窗口且忽略悬浮的元素)
 
void UpdateChildrenZOrder (bool invalidateMeasure=true)
 更新子元素的Z轴位置
 
void UpdateSiblingsZOrder (bool invalidateMeasure=true)
 更新兄弟元素的Z轴位置
 
void ClampDesireSize (sw::Size &size) const
 限定指定尺寸在最小和最大尺寸之间
 
void ClampDesireSize (sw::Rect &rect) const
 限定指定矩形的尺寸在最小和最大尺寸之间
 
bool QueryAllChildren (const Func< UIElement *, bool > &queryFunc)
 查询所有子元素,直到queryFunc返回false或所有子元素均被查询
 
virtual void SetBackColor (Color color, bool redraw)
 设置背景颜色
 
virtual void SetTextColor (Color color, bool redraw)
 设置文本颜色
 
virtual void OnAddedChild (UIElement &element)
 添加子元素后调用该函数
 
virtual void OnRemovedChild (UIElement &element)
 移除子元素后调用该函数
 
virtual void OnTabMove (bool forward)
 通过tab键将焦点从当前元素移出时调用该函数
 
virtual void OnTabStop ()
 通过tab键将焦点移动到当前元素时调用该函数
 
virtual bool SetParent (WndBase *parent) override
 设置父窗口
 
virtual void ParentChanged (WndBase *newParent) override
 父窗口改变时调用此函数
 
virtual bool OnMove (const Point &newClientPosition) override
 接收到WM_MOVE时调用该函数
 
virtual bool OnSize (const Size &newClientSize) override
 接收到WM_SIZE时调用该函数
 
virtual void OnTextChanged () override
 Text属性更改时调用此函数
 
virtual void FontChanged (HFONT hfont) override
 字体改变时调用该函数
 
virtual void VisibleChanged (bool newVisible) override
 Visible属性改变时调用此函数
 
virtual bool OnSetFocus (HWND hPrevFocus) override
 接收到WM_SETFOCUS时调用该函数
 
virtual bool OnKillFocus (HWND hNextFocus) override
 接收到WM_KILLFOCUS时调用该函数
 
virtual bool OnChar (wchar_t ch, const KeyFlags &flags) override
 接收到WM_CHAR时调用该函数
 
virtual bool OnKeyDown (VirtualKey key, const KeyFlags &flags) override
 接收到WM_KEYDOWN时调用该函数
 
virtual bool OnKeyUp (VirtualKey key, const KeyFlags &flags) override
 接收到WM_KEYUP时调用该函数
 
virtual bool OnMouseMove (const Point &mousePosition, MouseKey keyState) override
 接收到WM_MOUSEMOVE时调用该函数
 
virtual bool OnMouseLeave () override
 接收到WM_MOUSELEAVE时调用该函数
 
virtual bool OnMouseWheel (int wheelDelta, const Point &mousePosition, MouseKey keyState) override
 接收到WM_MOUSEWHEEL时调用该函数
 
virtual bool OnMouseLeftButtonDown (const Point &mousePosition, MouseKey keyState) override
 接收到WM_LBUTTONDOWN时调用该函数
 
virtual bool OnMouseLeftButtonUp (const Point &mousePosition, MouseKey keyState) override
 接收到WM_LBUTTONUP时调用该函数
 
virtual bool OnMouseRightButtonDown (const Point &mousePosition, MouseKey keyState) override
 接收到WM_RBUTTONDOWN时调用该函数
 
virtual bool OnMouseRightButtonUp (const Point &mousePosition, MouseKey keyState) override
 接收到WM_RBUTTONUP时调用该函数
 
virtual bool OnMouseMiddleButtonDown (const Point &mousePosition, MouseKey keyState) override
 接收到WM_MBUTTONDOWN时调用该函数
 
virtual bool OnMouseMiddleButtonUp (const Point &mousePosition, MouseKey keyState) override
 接收到WM_MBUTTONUP时调用该函数
 
virtual bool OnContextMenu (bool isKeyboardMsg, const Point &mousePosition) override
 接收到WM_CONTEXTMENU后调用目标控件的该函数
 
virtual bool OnColor (HDC hdc, HBRUSH &hRetBrush) override
 父窗口接收到WM_CTLCOLORxxx时调用对应控件的该函数
 
virtual bool OnSetCursor (HWND hwnd, HitTestResult hitTest, int message, bool &result) override
 接收到WM_SETCURSOR消息时调用该函数
 
virtual bool OnDropFiles (HDROP hDrop) override
 接收到WM_DROPFILES时调用该函数
 
virtual void OnNcHitTest (const Point &testPoint, HitTestResult &result) override
 接收到WM_NCHITTEST后调用该函数
 
- Protected 成员函数 继承自 sw::WndBase
 WndBase ()
 初始化WndBase
 
 WndBase (const WndBase &)=delete
 
 WndBase (WndBase &&)=delete
 
WndBaseoperator= (const WndBase &)=delete
 
WndBaseoperator= (WndBase &&)=delete
 
void InitWindow (LPCWSTR lpWindowName, DWORD dwStyle, DWORD dwExStyle)
 初始化为窗口,该函数会调用CreateWindowExW
 
void InitControl (LPCWSTR lpClassName, LPCWSTR lpWindowName, DWORD dwStyle, DWORD dwExStyle, LPVOID lpParam=NULL)
 初始化为控件,该函数会调用CreateWindowExW
 
LRESULT DefaultWndProc (const ProcMsg &msg)
 调用默认的WndProc,对于窗口则调用DefWindowProcW,控件则调用_controlOldWndProc
 
virtual std::wstring & GetInternalText ()
 获取内部记录窗口文本的字符串引用
 
virtual void SetInternalText (const std::wstring &value)
 修改窗口文本,该函数默认实现为调用SetWindowTextW
 
virtual void OnEndPaint ()
 在OnPaint函数完成之后调用该函数
 
virtual bool OnNcPaint (HRGN hRgn)
 接收到WM_NCPAINT时调用该函数
 
virtual void OnEndNcPaint ()
 在OnNcPaint函数完成之后调用该函数
 
virtual bool OnMouseLeftButtonDoubleClick (const Point &mousePosition, MouseKey keyState)
 接收到WM_LBUTTONDBLCLK时调用该函数
 
virtual bool OnMouseRightButtonDoubleClick (const Point &mousePosition, MouseKey keyState)
 接收到WM_RBUTTONDBLCLK时调用该函数
 
virtual bool OnMouseMiddleButtonDoubleClick (const Point &mousePosition, MouseKey keyState)
 接收到WM_MBUTTONDBLCLK时调用该函数
 
virtual bool OnDeadChar (wchar_t ch, const KeyFlags &flags)
 接收到WM_DEADCHAR时调用该函数
 
virtual bool OnSysChar (wchar_t ch, const KeyFlags &flags)
 接收到WM_SYSCHAR时调用该函数
 
virtual bool OnSysDeadChar (wchar_t ch, const KeyFlags &flags)
 接收到WM_SYSDEADCHAR时调用该函数
 
virtual bool OnSysKeyDown (VirtualKey key, const KeyFlags &flags)
 接收到WM_SYSKEYDOWN时调用该函数
 
virtual bool OnSysKeyUp (VirtualKey key, const KeyFlags &flags)
 接收到WM_SYSKEYUP时调用该函数
 
virtual void OnCommand (int code)
 当父窗口接收到控件的WM_COMMAND时调用该函数
 
virtual void OnControlCommand (WndBase *pControl, int code, int id)
 当WM_COMMAND接收到控件命令时调用该函数
 
virtual void OnAcceleratorCommand (int id)
 当WM_COMMAND接收到快捷键命令时调用该函数
 
virtual void HandleInitialized (HWND hwnd)
 窗口句柄初始化完成
 
virtual bool OnMenuSelect (HMENU hMenu, int id, int flags)
 接收到WM_MENUSELECT后调用该函数
 
virtual bool OnNotify (NMHDR *pNMHDR, LRESULT &result)
 接收到WM_NOTIFY后调用该函数
 
virtual bool OnNotified (NMHDR *pNMHDR, LRESULT &result)
 父窗口接收到WM_NOTIFY后且父窗口OnNotify函数返回false时调用发出通知控件的该函数
 
virtual bool OnEnabledChanged (bool newValue)
 接收到WM_ENABLE时调用该函数
 
virtual bool OnCtlColor (WndBase *pControl, HDC hdc, HBRUSH &hRetBrush)
 接收到WM_CTLCOLORxxx时调用该函数
 
virtual bool OnDrawItem (int id, DRAWITEMSTRUCT *pDrawItem)
 接收到WM_DRAWITEM时调用该函数
 
virtual bool OnDrawItemSelf (DRAWITEMSTRUCT *pDrawItem)
 父窗口接收到WM_DRAWITEM后且父窗口OnDrawItem函数返回false时调用发出通知控件的该函数
 
virtual bool OnMeasureItem (int id, MEASUREITEMSTRUCT *pMeasure)
 接收到WM_MEASUREITEM时调用该函数
 
virtual bool OnMeasureItemSelf (MEASUREITEMSTRUCT *pMeasure)
 父窗口接收到WM_MEASUREITEM后且父窗口OnMeasureItem函数返回false时调用发出通知控件的该函数
 
- Protected 成员函数 继承自 sw::ObservableObject
void RaisePropertyChanged (FieldId propertyId)
 触发属性更改通知事件
 
template<typename T , typename TProperty >
void RaisePropertyChanged (TProperty T::*property)
 触发属性更改通知事件
 

额外继承的成员函数

- 静态 Public 成员函数 继承自 sw::WndBase
static WndBaseGetWndBase (HWND hwnd) noexcept
 通过窗口句柄获取WndBase
 
static bool IsPtrValid (const WndBase *ptr) noexcept
 检查指针是否指向有效的WndBase对象
 

详细描述

窗口

成员函数说明

◆ Close()

virtual void sw::Window::Close ( )
overridevirtual

关闭窗口

实现了 sw::IDialog.

◆ DisableLayout()

bool sw::Window::DisableLayout ( )

禁用窗口布局

注解
需与EnableLayout配对使用,内部维护了一个计数器以支持嵌套调用
禁用布局操作只对顶层窗口有效,且只能在窗口所在的线程调用该函数
返回
操作是否成功

◆ EnableLayout()

bool sw::Window::EnableLayout ( bool  reset = false)

恢复窗口布局,与DisableLayout配对使用

参数
reset若该参数为true则直接将布局禁用计数器重置为0
注解
禁用布局操作只对顶层窗口有效,且只能在窗口所在的线程调用该函数
返回
操作是否成功

◆ GetDefaultLayout()

virtual LayoutHost * sw::Window::GetDefaultLayout ( )
overrideprotectedvirtual

获取默认布局对象

重载 sw::Layer .

◆ OnClose()

virtual bool sw::Window::OnClose ( )
overrideprotectedvirtual

接收到WM_CLOSE时调用该函数

返回
若已处理该消息则返回true,否则返回false以调用DefaultWndProc

重载 sw::UIElement .

◆ OnCreate()

virtual bool sw::Window::OnCreate ( )
overrideprotectedvirtual

接收到WM_CREATE时调用该函数

返回
若已处理该消息则返回true,否则返回false以调用DefaultWndProc

重载 sw::WndBase .

◆ OnDestroy()

virtual bool sw::Window::OnDestroy ( )
overrideprotectedvirtual

接收到WM_DESTROY时调用该函数

返回
若已处理该消息则返回true,否则返回false以调用DefaultWndProc

重载 sw::WndBase .

◆ OnDpiChanged()

virtual bool sw::Window::OnDpiChanged ( int  dpiX,
int  dpiY,
RECT &  newRect 
)
protectedvirtual

接收到WM_DPICHANGED时调用该函数

参数
dpiX横向DPI
dpiY纵向DPI
newRect建议的新窗口位置和尺寸
返回
若已处理该消息则返回true,否则返回false以调用DefaultWndProc

◆ OnEraseBackground()

virtual bool sw::Window::OnEraseBackground ( HDC  hdc,
LRESULT &  result 
)
overrideprotectedvirtual

接收到WM_ERASEBKGND时调用该函数

参数
hdc设备上下文句柄
result若已处理该消息则设为非零值,默认值为0
返回
若返回true则将result作为消息的返回值,否则使用DefaultWndProc的返回值

重载 sw::WndBase .

◆ OnMenuCommand()

virtual void sw::Window::OnMenuCommand ( int  id)
overrideprotectedvirtual

当OnCommand接收到菜单命令时调用该函数

参数
id菜单id

重载 sw::UIElement .

◆ OnMinMaxSizeChanged()

virtual void sw::Window::OnMinMaxSizeChanged ( )
overrideprotectedvirtual

当MinWidth、MinHeight、MaxWidth或MaxHeight属性更改时调用此函数

重载 sw::UIElement .

◆ OnPaint()

virtual bool sw::Window::OnPaint ( )
overrideprotectedvirtual

接收到WM_PAINT时调用该函数

返回
若已处理该消息则返回true,否则返回false以调用DefaultWndProc

重载 sw::WndBase .

◆ SetIcon()

void sw::Window::SetIcon ( HICON  hIcon)

设置图标

参数
hIcon图标句柄

◆ Show()

virtual void sw::Window::Show ( )
overridevirtual

显示窗口

实现了 sw::IDialog.

◆ ShowDialog() [1/2]

virtual int sw::Window::ShowDialog ( Window owner)
virtual

将窗口显示为模式对话框

参数
owner窗体的所有者,窗体显示期间该窗体的Enabled属性将被设为false,该参数不能设为自己
返回
DialogResult属性的值,若函数失败则返回-1
注解
该函数会创建一个新的消息循环并在窗口销毁时退出,只能在创建窗口的线程调用

◆ ShowDialog() [2/2]

virtual int sw::Window::ShowDialog ( Window owner = nullptr)
overridevirtual

将窗口显示为模式对话框

参数
owner窗体的所有者,若为nullptr则使用当前活动窗口
返回
DialogResult属性的值,若函数失败则返回-1
注解
该函数会创建一个新的消息循环并在窗口销毁时退出,只能在创建窗口的线程调用

实现了 sw::IDialog.

◆ SizeToContent()

bool sw::Window::SizeToContent ( )

调整窗口尺寸以适应其内容大小

注解
该函数仅对设置了布局方式且AutoSize属性为true的顶级窗口有效
返回
若窗口尺寸已被调整则返回true,否则返回false

◆ ToWindow()

virtual Window * sw::Window::ToWindow ( )
overridevirtual

尝试将对象转换成Window

返回
若函数成功则返回Window指针,否则返回nullptr

重载 sw::WndBase .

◆ WndProc()

virtual LRESULT sw::Window::WndProc ( ProcMsg refMsg)
overrideprotectedvirtual

对WndProc的封装

重载 sw::WndBase .

类成员变量说明

◆ DialogResult

const Property<int> sw::Window::DialogResult

窗口的对话框结果,ShowDialog返回该值

注解
该属性仅在窗口作为模态对话框显示时有效,默认值为0,该属性一旦被设置则会自动关闭窗口

◆ Opacity

const Property<double> sw::Window::Opacity

窗口的透明度,范围为0.0~1.0

注解
只有将IsLayered设为true该属性才生效,初始值为0.0但需手动设置新值后才会生效

◆ WindowCount

const ReadOnlyProperty<int> sw::Window::WindowCount
static

当前线程已创建的窗口数

注解
该属性是线程局部的,每个线程有各自独立的值

该类的文档由以下文件生成: