分割窗口控件 (SSplitWnd)¶
分割窗口是一个用于创建可调整大小的分割区域的容器控件。它允许用户通过拖动分隔条来动态调整子窗口的大小,常用于创建灵活的布局界面。
基本信息¶
- 类名:
SSplitWnd - 控件标签:
splitwnd - 基类:
SWindow - 功能:提供可拖动调节的分割区域
属性说明¶
SSplitWnd(标签 splitwnd)是带分隔条的可调大小多窗格容器;每个窗格用 <pane>(标签 pane,即 SSplitPane)表示。
容器自身属性(SSplitWnd)¶
| 属性名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| vertical | bool | true | 分隔方向:true=竖向分隔条(窗格左右排列),false=横向分隔条(窗格上下排列) |
| sepSize | layoutsize | - | 分隔条厚度 |
| sepSkin | string | - | 分隔条皮肤 |
| adjustable | bool | true | 是否允许用户拖拽调整窗格大小 |
窗格属性(SSplitPane,写在 <pane> 上)¶
| 属性名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| idealSize | layoutsize | - | 窗格理想尺寸 |
| minSize | layoutsize | - | 窗格最小尺寸 |
| maxSize | layoutsize | - | 窗格最大尺寸 |
| priority | int | - | 调整优先级,数值越大越先达到理想尺寸 |
text、字体、颜色、可用、可见等通用属性见通用属性。
使用示例¶
基本分割窗口¶
``xml
### 垂直分割窗口
``xml
<splitwnd name="splitVertical"
pos="10,320,310,620"
sepSize="5"
vertical="1">
<pane idealSize="150" minSize="100">
<!-- 上方窗格内容 -->
<text pos="10,10">上面板</text>
</pane>
<pane>
<!-- 下方窗格内容 -->
<text pos="10,10">下面板</text>
</pane>
</splitwnd>
带皮肤的分割窗口¶
``xml
### 锁定窗格大小的分割窗口
``xml
<splitwnd name="splitLocked"
pos="320,320,920,620"
sepSize="5"
vertical="0"
lockFirst="1">
<pane idealSize="200">
<!-- 锁定的左侧窗格内容 -->
<text pos="10,10">锁定的左侧面板</text>
</pane>
<pane>
<!-- 可调整的右侧窗格内容 -->
<text pos="10,10">可调整的右侧面板</text>
</pane>
</splitwnd>
事件处理¶
分割窗口控件支持以下事件:
| 事件名 | EventID | 说明 |
|---|---|---|
| EVT_SPLIT_PANE_MOVED | EventSplitPaneMoved::EventID | 分隔条移动事件 |
``cpp // 事件处理示例 EVENT_MAP_BEGIN() EVENT_NAME_HANDLER(L"splitBasic", EventSplitPaneMoved::EventID, OnSplitPaneMoved) EVENT_MAP_END()
void OnSplitPaneMoved(IEvtArgs pEvt)
{
EventSplitPaneMoved pRealEvt = sobj_cast## 代码操作
``cpp
// 查找分割窗口控件
SSplitWnd *pSplitWnd = FindChildByName2<SSplitWnd>(L"splitBasic");
// 设置分隔条位置(0.0-1.0)
pSplitWnd->SetSepPos(0.3f);
// 获取分隔条位置
float fPos = pSplitWnd->GetSepPos();
// 设置分隔条宽度
pSplitWnd->SetAttribute(L"sepSize", L"8");
// 设置分割方向
pSplitWnd->SetAttribute(L"vertical", L"1");
// 获取窗格
SWindow *pPane1 = pSplitWnd->GetPane(SplitPane_First);
SWindow *pPane2 = pSplitWnd->GetPane(SplitPane_Second);
最佳实践¶
- 分割方向:根据界面布局需求选择合适的 vertical 属性值
- 尺寸控制:使用 idealSize、minSize 和 maxSize 控制窗格尺寸范围
- 锁定功能:通过 lockFirst 和 lockSecond 属性锁定特定窗格大小
- 视觉效果:使用 sepSkin 自定义分隔条外观
常见问题¶
Q: 分隔条无法拖动怎么办?¶
A: 检查 sepSize 是否设置合适,确保分隔条有足够的宽度。
Q: 窗格尺寸异常怎么办?¶
A: 检查 minSize 和 maxSize 设置是否合理。
Q: 分割方向不正确怎么办?¶
A: 确认 vertical 属性设置正确,0为水平分割,1为垂直分割。
相关控件¶
- 面板(SPanel) - 基础容器控件
- 堆栈视图(SStackView) - 堆栈布局控件
- 滚动视图(SScrollView) - 支持滚动的容器控件