友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!
第三电子书 返回本书目录 加入书签 我的书架 我的书签 TXT全本下载 『收藏到我的浏览器』

C语言实例教程(PDF格式)-第40部分

快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部! 如果本书没有阅读完,想下次继续接着阅读,可使用上方 "收藏到我的浏览器" 功能 和 "加入书签" 功能!


ID为IDOK的按钮的BN_CLICKED命令处理函数。由ClassWizard生成的 

默认重载形式如下:  



void CRadioBoxDlg::OnOK()   



{  



// TODO: 在此添加附加的验证  



CDialog::OnOK();  



}  



这里特定的代码来替代前面的// TODO注释后得到如下的程序代码:  



void CRadioBoxDlg::OnOK()   



{  



// 暂时隐藏主对话框  



ShowWindow(SW_HIDE);  



UINT nSex=GetCheckedRadioButton(IDC_SEX1;IDC_SEX2); // 获得性别选择  



UINT nAge=GetCheckedRadioButton(IDC_AGE1;IDC_AGE5); // 获得年龄选择  


…………………………………………………………Page 333……………………………………………………………

CString msg=〃性别: 〃; // 保存输出消息字符串  



// 根据用户的选择生成消息串  



// 添加性别信息  



switch (nSex)  



{  



case IDC_SEX1:  



msg+=〃男n〃;  



break;  



case IDC_SEX2:  



msg+=〃女n〃;  



break;  



default:  



break;  



}  



// 添加年龄信息  



msg+=〃年龄: 〃;  



switch (nAge)  



{  



case IDC_AGE1:  



msg+=〃18 岁以下〃;  



break;  



case IDC_AGE2:  



msg+=〃18 25 岁〃;  



break;  



case IDC_AGE3:  



msg+=〃25 35 岁〃;  


…………………………………………………………Page 334……………………………………………………………

break;  



case IDC_AGE4:  



msg+=〃35 45 岁〃;  



break;  



case IDC_AGE5:  



msg+=〃45 岁以上〃;  



break;  



default:  



break;  



}  



msg+=〃nn 以上数据是否正确?〃;  



// 显示输入消息框询问用户所输入的信息是否正确  



if(MessageBox(msg;NULL;MB_YESNO|MB_ICONQUESTION)==IDNO)  



{  



// 当用户回答 “否”时重新显示对话框以供便用户可以更改所作的选择  



ShowWindow(SW_SHOW);  



return;  



}  



// 否则退出应用程序  



CDialog::OnOK();  



}  



以上应用程序的运行结果如图6。32所示:  



按如图6。32所示进行选择,单击确定弹出如图6。33所示的对话框。  



下一节中我们将讲述复选框的使用。  


…………………………………………………………Page 335……………………………………………………………

                                



               图6。 32 单选钮示例程序的运行结果  



                               



              图6。 33 单击 “确定”之后的确认消息框  



6。3。5 复选框  



复选框与单选钮很相象,不同之处在于在同一组控件中,通常使用复 

选框来代表多重选择,即选项不是互斥的。从外观上来说,复选框所 

使用的选中标记是一个方框和方框里面的小叉,而不是单选钮所使用 

的小圆圈和里面的小点。  



对于编程者来说,复选框和单选钮非常相似。我们通过SetCheck成员 

函数来设置某一复选框的选中状态,通过GetCheck成员函数来获取某 

一复选框的选中状态。一般来说,对于复选框,由于其选项不是互斥 

的,我们一般不通过GetCheckedRadioButton之类的函数来获得处于 

选中状态的按钮。  



以下特定于复选框的样式可以Properties对话框的Styles属性页中进 

行设置:  



         Auto:  对于Auto属性为真的复选框,在单击时将 自动 

               在 “选中”和 “不选中”之间进行切换。如果 

               在一组复选框中使用了Dialog              Data  

               Exchange,则必须将该属性设置为真。类型: 

               布尔值 默认值:真  



         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;iGetFont()…》GetLogFont(&lf);  



// 使用按钮的当前字体初始化字体对话框  



CFontDialog dlgFontDlg(&lf);  



// 显示字体选择对话框  



if (dlgFontDlg。DoModal()==IDOK)  



{  



// 如果用户在字体选择对话框中单击了 “确定”按钮,  



// 则使用  



dlgFontDlg。GetCurrentFont(&lf);  



m_Font。DeleteObject();  



m_Font。CreateFontIndirect(&lf);  



GetDlgItem(IDC_LOVE)…》SetFont(&m_Font);  


…………………………………………………………Page 341……………………………………………………………

}  



}  



编译并运行程序ButtonFont,单击 “改变字体”按钮,在随后弹出的 

字体选择对话框中设置字体并单击 “确定”按钮。对话框的显示可能 

如图6。37所示。  



                                                   



                     图6。 37 示例程序ButtonFont的运行结果  



   l 注意:  



   l 在示例程序中,如果不定义类CButtonFontDlg的成员变量 

     m_Font,命令处理函数OnChangefont可以应该这样编写:  



   l void CButtonFontDlg::OnChangefont()  



   l {  



   l // 获取按钮 IDC_LOVE 的当前所用字体  



   l LOGFONT lf;  



   l GetDlgItem(IDC_LOVE)…》GetFont()…》GetLogFont(&lf);  



   l   

   l // 使用按钮的当前字体初始化字体对话框  



   l CFontDialog dlgFontDlg(&lf);  



   l   

   l // 显示字体选择对话框  



   l if (dlgFontDlg。DoModal()==IDOK)  



   l {  



   l // 如果用户在字体选择对话框中单击了 “确定”按钮,  



   l // 则将按钮 IDC_LOVE 的标题文本字体设置为所选定的字体。  


…………………………………………………………Page 342……………………………………………………………

l static CFont font;  



l dlgFontDlg。GetCurrentFont(&lf);  



l font。DeleteObject();  



l font。CreateFontIndirect(&lf);  



l GetDlgItem(IDC_LOVE)…》SetFont(&font);  



l }  



l }  



       按下面的方式编写命令处理函数OnChangefont不会得到正确 

       的结果:  



l void CButtonFontDlg::OnChangefont()  



l {  



l 。。。  


返回目录 上一页 下一页 回到顶部 1 1
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!