跳转至

复选框控件 (SCheckBox)

复选框是一种常用的选择控件,允许用户选择或取消选择某个选项。它通常用于多选场景或单个开关选项。

基本信息

  • 类名SCheckBox
  • 控件标签check
  • 基类SWindow
  • 功能:提供选中/未选中状态切换

属性说明

基本属性

属性名 类型 默认值 说明
checked bool 0 初始化时的选中状态(0-未选中,1-选中)
text string - 复选框文本
align string left 文本对齐方式(left/center/right)
valign string middle 垂直对齐方式(top/middle/bottom)

外观属性

属性名 类型 默认值 说明
skin string - 默认皮肤
focusSkin string - 焦点状态显示的皮肤
colorText color - 文本颜色
colorTextHover color - Hover状态文本颜色
colorTextPush color - Push状态文本颜色
colorTextDisable color - Disable状态文本颜色
font string - 文本字体
fontHover string - Hover状态文本字体
fontPush string - Push状态文本字体
fontDisable string - Disable状态文本字体

状态属性

属性名 类型 默认值 说明
enable bool 1 是否可用(0-不可用,1-可用)
visible bool 1 是否可见(0-不可见,1-可见)
display bool 1 控件隐藏时是否占位(0-不占位,1-占位)

使用示例

基本复选框

<check name="chkOption" 
       pos="10,10,200,30" 
       text="启用此选项"/>

默认选中的复选框

<check name="chkDefault" 
       pos="10,40,200,60" 
       text="默认选中项" 
       checked="1"/>

自定义样式的复选框

<check name="chkStyled" 
       pos="10,70,200,90" 
       text="自定义样式"
       skin="skin_checkbox"
       focusSkin="skin_checkbox_focus"
       colorText="#333333"
       colorTextHover="#FF0000"/>

不同对齐方式的复选框

<check name="chkLeft" 
       pos="10,100,200,120" 
       text="左对齐"
       align="left"/>

<check name="chkCenter" 
       pos="10,130,200,150" 
       text="居中对齐"
       align="center"/>

<check name="chkRight" 
       pos="10,160,200,180" 
       text="右对齐"
       align="right"/>

事件处理

复选框控件支持以下事件:

事件名 EventID 说明
EVT_CMD EventCmd::EventID 命令事件(点击时触发)
EVT_STATE_CHANGED EventStateChanged::EventID 状态改变事件
// 事件处理示例
EVENT_MAP_BEGIN()
    EVENT_NAME_COMMAND(L"chkOption", OnChkOption)
    EVENT_NAME_HANDLER(L"chkOption", EventStateChanged::EventID, OnChkStateChanged)
EVENT_MAP_END()

void OnChkOption()
{
    SCheckBox *pChk = FindChildByName2<SCheckBox>(L"chkOption");
    BOOL bChecked = pChk->IsChecked();
    // 处理复选框点击
}

void OnChkStateChanged(IEvtArgs *pEvt)
{
    EventStateChanged *pRealEvt = sobj_cast<EventStateChanged>(pEvt);
    int nNewState = pRealEvt->GetNewState();
    // 处理状态改变
}

代码操作

// 查找复选框控件
SCheckBox *pCheck = FindChildByName2<SCheckBox>(L"chkOption");

// 获取选中状态
BOOL bChecked = pCheck->IsChecked();

// 设置选中状态
pCheck->SetCheck(TRUE);   // 选中
pCheck->SetCheck(FALSE);  // 取消选中

// 切换选中状态
pCheck->ToggleCheck();

// 启用/禁用控件
pCheck->EnableWindow(FALSE);  // 禁用
pCheck->EnableWindow(TRUE);   // 启用

最佳实践

  1. 状态初始化:通过 checked 属性设置初始状态,避免运行时额外设置
  2. 视觉反馈:使用 focusSkin 提供焦点状态的视觉反馈
  3. 文本样式:通过不同状态的字体和颜色属性增强用户体验
  4. 合理分组:将相关的复选框组织在一起,使用适当的间距和标签

常见问题

Q: 复选框状态无法正确获取怎么办?

A: 确保通过正确的事件处理函数获取状态,使用 IsChecked() 方法获取当前状态。

Q: 焦点状态显示不正确怎么办?

A: 检查是否设置了 focusSkin 属性,以及控件是否具有焦点。

Q: 文本对齐效果不明显怎么办?

A: 确保复选框宽度足够显示对齐效果,文本区域有足够的空间。

相关控件