nim_duilib/docs/Containers/Box.md

445 lines
9.7 KiB
Markdown
Raw Normal View History

2019-04-19 17:19:57 +08:00
# Box自由布局
## 可用属性
| 属性名称 | 默认值 | 参数类型 | 用途 |
| :--- | :--- | :--- | :--- |
| padding | 0,0,0,0 | RECT | 内边距,如(2,2,2,2) |
| childmargin | 0 | INT | 子控件之间的额外距离,如(4) |
| mousechild | true | BOOL | 本控件的子控件是否可以响应用户操作,如(true) |
## 可用接口
| 方法名称 | 用途 |
| :--- | :--- |
| [SetOwner](#SetOwner) | 设置所有者 |
| [SetFloatPos](#SetFloatPos) | 设置浮动状态下的坐标信息 |
| [SetAttribute](#SetAttribute) | 设置布局属性 |
| [ArrangeChild](#ArrangeChild) | 调整内部所有控件的位置信息 |
| [AjustSizeByChild](#AjustSizeByChild) | 根据内部子控件大小调整容器自身大小 |
| [GetPadding](#GetPadding) | 获取内边距 |
| [SetPadding](#SetPadding) | 设置内边距,相当于设置客户区 |
| [GetChildMargin](#GetChildMargin) | 获取子控件之间的额外边距 |
| [SetChildMargin](#SetChildMargin) | 设置子控件之间的额外边距 |
| [GetInternalPos](#GetInternalPos) | 获取除了内边距外的可用范围 |
| [FindSubControl](#FindSubControl) | 查找指定子控件 |
| [FindSelectable](#FindSelectable) | 查找下一个可选控件的索引(面向 list、combo |
| [GetItemAt](#GetItemAt) | 根据索引查找指定控件 |
| [GetItemIndex](#GetItemIndex) | 根据控件指针获取索引 |
| [SetItemIndex](#SetItemIndex) | 设置控件索引(内部会重新排列控件位置) |
| [GetCount](#GetCount) | 获取子控件数量 |
| [Add](#Add) | 添加一个控件到容器中 |
| [AddAt](#AddAt) | 向指定位置添加一个控件 |
| [Remove](#Remove) | 根据控件指针从容器中移除一个控件 |
| [RemoveAt](#RemoveAt) | 根据控件索引从容器中移除一个控件 |
| [RemoveAll](#RemoveAll) | 移除所有子控件 |
| [SwapChild](#SwapChild) | 交换子控件位置 |
| [ResetChildIndex](#ResetChildIndex) | 重置一个子控件位置 |
| [IsAutoDestroy](#IsAutoDestroy) | 判断是否自动销毁 |
| [SetAutoDestroy](#SetAutoDestroy) | 设置控件是否自动销毁 |
| [IsDelayedDestroy](#IsDelayedDestroy) | 判断窗口关闭后是否自动销毁 |
| [SetDelayedDestroy](#SetDelayedDestroy) | 设置窗口关闭后是否自动销毁 |
| [IsMouseChildEnabled](#IsMouseChildEnabled) | 获取容器是否响应鼠标操作 |
| [SetMouseChildEnabled](#SetMouseChildEnabled) | 设置容器响应鼠标操作 |
| [GetLayout](#GetLayout) | 获取容器布局对象指针 |
| [RetSetLayout](#RetSetLayout) | 重新关联布局对象 |
| [GetPaddingPos](#GetPaddingPos) | 获取内边距的位置信息 |
| [AttachBubbledEvent](#AttachBubbledEvent) | 绑定事件处理函数 |
| [AttachXmlBubbledEvent](#AttachXmlBubbledEvent) | 绑定 XML 中编写的 Event 和 BubbleEvent 事件的处理函数 |
## SetOwner
设置所有者
```cpp
void SetOwner(Box* pOwner)
```
- 返回值:无
## SetFloatPos
设置浮动状态下的坐标信息
```cpp
static CSize SetFloatPos(Control* pControl, UiRect rcContainer)
```
- 参数:
- `pControl` 控件句柄
- `rcContainer` 要设置的位置信息
- 返回值:返回控件最终的位置信息
## SetAttribute
设置布局属性
```cpp
virtual bool SetAttribute(const std::wstring& strName, const std::wstring& strValue)
```
- 参数:
- `strName` 要设置的属性名
- `strValue` 要设置的属性值
- 返回值true 设置成功false 属性不存在
## ArrangeChild
调整内部所有控件的位置信息
```cpp
virtual CSize ArrangeChild(const std::vector<Control*>& items, UiRect rc)
```
- 参数:
- `items` 控件列表
- `rc` 当前容器位置信息
- 返回值:返回排列后最终盒子的宽度和高度信息
## AjustSizeByChild
根据内部子控件大小调整容器自身大小
```cpp
virtual CSize AjustSizeByChild(const std::vector<Control*>& items, CSize szAvailable)
```
- 参数:
- `items` 控件列表
- `szAvailable` 子控件允许的最大宽度
- 返回值:返回排列后最终盒子的宽度和高度信息
## GetPadding
获取内边距
```cpp
virtual UiRect GetPadding()
```
- 返回值:返回内边距四边的大小
## SetPadding
设置内边距,相当于设置客户区
```cpp
virtual void SetPadding(UiRect rcPadding, bool bNeedDpiScale = true)
```
- 参数:
- `rcPadding` 内边距数据
- `bNeedDpiScale` 是否根据 DPI 自适应,默认为 true
- 返回值:无
## GetChildMargin
获取子控件之间的额外边距
```cpp
virtual int GetChildMargin()
```
- 返回值:返回额外间距的数值
## SetChildMargin
设置子控件之间的额外边距
```cpp
virtual void SetChildMargin(int iMargin)
```
- 参数:
- `iMargin` 要设置的边距数值
- 返回值:无
## GetInternalPos
获取除了内边距外的可用范围
```cpp
UiRect GetInternalPos()
```
- 返回值:返回可用范围位置信息
## FindSubControl
查找指定子控件
```cpp
Control* FindSubControl(const std::wstring& pstrSubControlName)
```
- 参数:
- `pstrSubControlName` 子控件名称
- 返回值:返回子控件指针
## FindSelectable
查找下一个可选控件的索引(面向 list、combo
```cpp
virtual int FindSelectable(int iIndex, bool bForward = true)
```
- 参数:
- `iIndex` 指定要起始查找的索引
- `bForward` true 为递增查找, false 为递减查找
- 返回值:下一个可选控件的索引,返回 -1 为没有可选控件
## GetItemAt
根据索引查找指定控件
```cpp
virtual Control* GetItemAt(std::size_t iIndex)
```
- 参数:
- `iIndex` 控件索引
- 返回值:返回控件指针
## GetItemIndex
根据控件指针获取索引
```cpp
virtual int GetItemIndex(Control* pControl)
```
- 参数:
- `pControl` 控件指针
- 返回值:返回 pControl 所指向的控件索引
## SetItemIndex
设置控件索引(内部会重新排列控件位置)
```cpp
virtual bool SetItemIndex(Control* pControl, std::size_t iIndex)
```
- 参数:
- `pControl` 控件指针
- `iIndex` 要设置的索引值
- 返回值:返回 true 设置成功false 设置失败
## GetCount
获取子控件数量
```cpp
virtual int GetCount()
```
- 返回值:返回子控件数量
## Add
添加一个控件到容器中
```cpp
virtual bool Add(Control* pControl)
```
- 参数:
- `pControl` 控件指针
- 返回值:返回 true 添加成功false 为添加失败
## AddAt
向指定位置添加一个控件
```cpp
virtual bool AddAt(Control* pControl, std::size_t iIndex)
```
- 参数:
- `pControl` 控件指针
- `iIndex` 在该索引之后插入控件
- 返回值:返回 true 为添加成功false 为添加失败
## Remove
根据控件指针从容器中移除一个控件
```cpp
virtual bool Remove(Control* pControl)
```
- 参数:
- `pControl` 控件的指针
- 返回值:返回 true 为移除成功false 为移除失败(控件可能不存在)
## RemoveAt
根据控件索引从容器中移除一个控件
```cpp
virtual bool RemoveAt(std::size_t iIndex)
```
- 参数:
- `iIndex` 要移除的控件索引
- 返回值:返回 true 为移除成功false 为移除失败(索引值太小或超出了子控件总数)
## RemoveAll
移除所有子控件
```cpp
virtual void RemoveAll()
```
- 返回值:无
## SwapChild
交换子控件位置
```cpp
void SwapChild(Control* pChild1, Control* pChild2)
```
- 参数:
- `pChild1` 子控件1 指针
- `pChild2` 子控件2 指针
- 返回值:无
## ResetChildIndex
重置一个子控件位置
```cpp
void ResetChildIndex(Control* pChild, std::size_t iIndex)
```
- 参数:
- `pChild` 控件指针
- `iIndex` 要重置的位置
- 返回值:无
## IsAutoDestroy
判断是否自动销毁
```cpp
virtual bool IsAutoDestroy()
```
- 返回值true 为自动销毁false 为不自动销毁
## SetAutoDestroy
设置控件是否自动销毁
```cpp
virtual void SetAutoDestroy(bool bAuto)
```
- 参数:
- `bAuto` true 为自动销毁false 为不自动销毁
- 返回值:无
## IsDelayedDestroy
判断窗口关闭后是否自动销毁
```cpp
virtual bool IsDelayedDestroy()
```
- 返回值true 为自动销毁false 为不自动销毁
## SetDelayedDestroy
设置窗口关闭后是否自动销毁
```cpp
virtual void SetDelayedDestroy(bool bDelayed)
```
- 参数:
- `bDelayed` true 为自动销毁false 为不自动销毁
- 返回值:无
## IsMouseChildEnabled
获取容器是否响应鼠标操作
```cpp
virtual bool IsMouseChildEnabled()
```
- 返回值true 为响应false 为不响应
## SetMouseChildEnabled
设置容器响应鼠标操作
```cpp
virtual void SetMouseChildEnabled(bool bEnable = true)
```
- 参数:
- `bEnable` 设置为 true 为响应鼠标操作,设置为 false 为不响应,默认为 true
- 返回值:无
## GetLayout
获取容器布局对象指针
```cpp
virtual Layout* GetLayout()
```
- 返回值:返回容器关联的布局对象指针
## RetSetLayout
重新关联布局对象
```cpp
virtual void RetSetLayout(Layout* pLayout)
```
- 参数:
- `pLayout` 布局对象指针
- 返回值:无
## GetPaddingPos
获取内边距的位置信息
```cpp
virtual UiRect GetPaddingPos()
```
- 返回值:返回内边距的位置信息
## AttachBubbledEvent
绑定事件处理函数
```cpp
void AttachBubbledEvent(EventType eventType, const EventCallback& callback)
```
- 参数:
- `eventType` 事件类型
- 返回值callback 指定回调函数
## AttachXmlBubbledEvent
绑定 XML 中编写的 Event 和 BubbleEvent 事件的处理函数
```cpp
void AttachXmlBubbledEvent(EventType eventType, const EventCallback& callback)
```
- 参数:
- `eventType` 事件类型
- 返回值callback 指定回调函数