复选框控件 (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); // 启用
最佳实践¶
- 状态初始化:通过 checked 属性设置初始状态,避免运行时额外设置
- 视觉反馈:使用 focusSkin 提供焦点状态的视觉反馈
- 文本样式:通过不同状态的字体和颜色属性增强用户体验
- 合理分组:将相关的复选框组织在一起,使用适当的间距和标签
常见问题¶
Q: 复选框状态无法正确获取怎么办?¶
A: 确保通过正确的事件处理函数获取状态,使用 IsChecked() 方法获取当前状态。
Q: 焦点状态显示不正确怎么办?¶
A: 检查是否设置了 focusSkin 属性,以及控件是否具有焦点。
Q: 文本对齐效果不明显怎么办?¶
A: 确保复选框宽度足够显示对齐效果,文本区域有足够的空间。
相关控件¶
- 单选框(SRadioBox) - 互斥选择控件
- 开关按钮(SToggle) - 另一种开关控件
- 按钮(SButton) - 基础交互控件