Skip to content

分割窗口控件 (SSplitWnd)

Warning

The current page still doesn't have a translation for this language.

You can read it through google translate.

分割窗口是一个用于创建可调整大小的分割区域的容器控件。它允许用户通过拖动分隔条来动态调整子窗口的大小,常用于创建灵活的布局界面。

基本信息

  • 类名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(pEvt); int nPane1Size = pRealEvt->nPane1Size; int nPane2Size = pRealEvt->nPane2Size; // 处理分隔条移动事件 }

## 代码操作

``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);

最佳实践

  1. 分割方向:根据界面布局需求选择合适的 vertical 属性值
  2. 尺寸控制:使用 idealSizeminSizemaxSize 控制窗格尺寸范围
  3. 锁定功能:通过 lockFirstlockSecond 属性锁定特定窗格大小
  4. 视觉效果:使用 sepSkin 自定义分隔条外观

常见问题

Q: 分隔条无法拖动怎么办?

A: 检查 sepSize 是否设置合适,确保分隔条有足够的宽度。

Q: 窗格尺寸异常怎么办?

A: 检查 minSizemaxSize 设置是否合理。

Q: 分割方向不正确怎么办?

A: 确认 vertical 属性设置正确,0为水平分割,1为垂直分割。

相关控件