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
  • 功能:提供可拖动调节的分割区域

属性说明

基本属性

属性名 类型 默认值 说明
sepSize int - 分隔条宽度
vertical bool - 分割方向(0-水平分割,1-垂直分割)
lockFirst bool - 锁定第一个窗格大小(0-不锁定,1-锁定)
lockSecond bool - 锁定第二个窗格大小(0-不锁定,1-锁定)
adjustLayout bool - 调整子窗口布局(0-否,1-是)

外观属性

属性名 类型 默认值 说明
sepSkin string - 分隔条皮肤

布局属性

属性名 类型 默认值 说明
idealSize int - 理想大小
minSize int - 最小大小
maxSize int - 最大大小
pos float - 分隔条位置(0.0-1.0)

使用示例

基本分割窗口

``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为垂直分割。

相关控件