按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
布尔值 默认值:真
Tri 创建三态复选框。除了处于 “选中”和 “不选
state: 中”状态外,三态复选框还可以处于变灰状
态。通常,态复选框的变灰状态表示其选中状
态不确定。在很多软件的安装程序中,变灰往
往表示仅选中该组件中的一部分。
…………………………………………………………Page 336……………………………………………………………
图6。 34 工程CheckBox的主对话框的设计
下面的应用程序举例说明了复选框的使用。
1。 使用默认选项创建一个基于对话框的MFC工程,设置工程名为
CheckBox。
2。 按图6。34绘制对话框中的各个复选框 (在Control工具箱中复选框
所对应的图标为 ),并按表6。24设置各复选框的样式和属性。
表6。 24 工程CheckBox中各控件的属性设置
控件 ID 标题文本 其它
复选 IDC_PLACE1 在家里 (&H) Auto属性和Tri
框 state属性均为真
IDC_PLACE2 在公司办公室
(&O)
IDC_PLACE3 在学校公共机房
(&S)
IDC_OFTEN 经常 Auto属性为假,
Tri…state属性为
IDC_SELDOM 偶尔 真
IDC_NEVER 从不
组框 IDC_STATIC 使用计算机的场
所
3。 使用下面的代码替换类CCheckBoxDlg的成员函数OnInitDialog中
的// TODO注释:
((CButton*)GetDlgItem(IDC_OFTEN))…》SetCheck(1);
((CButton*)GetDlgItem(IDC_SELDOM))…》SetCheck(2);
((CButton*)GetDlgItem(IDC_NEVER))…》SetCheck(0);
由于三个复选框IDC_OFTEN、IDC_SELDOM、IDC_NEVER的Auto属性值为
…………………………………………………………Page 337……………………………………………………………
假,因此当用户单击这三个复选框时其状态不会发生改变。它们在本
示例程序中起了图例的作用。
4。 在类CCheckBoxDlg中重载类CDialog的成员函数OnOK如下 (关于对
命令处理成员函数OnOK的重载我们已经在前一小节中作了讲述):
void CCheckBoxDlg::OnOK()
{
// 定义和初始化所用的变量
CString strMsg; // 消息字符串
strMsgA'3'; // 分别对应于三种不同时间频度的消息字符串
int iCount'3'; // 对应于每种时间频度的情况计数
// 初始化各变量
iCount'0'=iCount'1'=iCount'2'=0;
strMsgA'0'=〃从不在〃;
strMsgA'1'=〃经常在〃;
strMsgA'2'=〃偶尔在〃;
int i; // 用着循环变量或中间变量
// 检查各复选框的选中状态,并根据用户的选择生成对应于三种不同时间
// 频度的消息字符串
// 检查复选框 IDC_PLACE1
i=( (CButton*)GetDlgItem(IDC_PLACE1) )…》GetCheck();
if ( (iCount'i'++)==0 )
strMsgA'i'+=〃家里〃;
else
strMsgA'i'+=〃、家里〃;
// 检查复选框 IDC_PLACE2
i=( (CButton*)GetDlgItem(IDC_PLACE2) )…》GetCheck();
if ( (iCount'i'++)==0 )
…………………………………………………………Page 338……………………………………………………………
strMsgA'i'+=〃公司办公室〃;
else
strMsgA'i'+=〃、公司办公室〃;
// 检查复选框 IDC_PLACE3
i=( (CButton*)GetDlgItem(IDC_PLACE3) )…》GetCheck();
if ( (iCount'i'++)==0 )
strMsgA'i'+=〃学校开放机房〃;
else
strMsgA'i'+=〃、学校开放机房〃;
// 为了符合汉语的语气转折,判断是否需要在 “从不……”分句前添加转折
// 连词 “但”。如果用户对三种情况的选择都是 “从不”,那么这个 “但”
// 字是不应该要的。
if ( !(iCount'1'==0 && iCount'2'==0) )
strMsgA'0'=CString(〃但〃)+strMsgA'0';
// 如果用户对三种情况的选择都不属于某种时间频度,那么该时间频度所对应
// 的消息字符串应该为空。否则,在该分句的末尾加了字符串 “使用计算机,”。
for (i=0;i