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

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

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





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 。。。  



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



l {  



l CFont font;  



l dlgFontDlg。GetCurrentFont(&lf);  



l font。DeleteObject();  



l font。CreateFontIndirect(&lf);  



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



l }  



l }  



       之所以会出现这种情况与用来设置字体的CFont变量的存活期 

       有关。  


…………………………………………………………Page 343……………………………………………………………

          



                  第四节 静态控件  



静态控件一般用来显示静态的文本、图标、位图或图元文件,它不能 

用来接受用户的输入,也很少用来显示输出,而在更多的情况下用作 

那些没有固定的标题文本属性的控件(如文本编辑控件、列表框等)的 

标签,或者用来进行控件的分组,或者用来显示一些提示性文本。  



MFC类CStatic封装了标准的Windows静态控件。下面的示例程序 

StaticDemo演示了静态控件的使用。  



1。   使用AppWizard创建一个基于对话框的MFC应用程序,设置其工程 

名为StaticDemo。  



2。   按如图6。38绘制主对话框中的控件。其中标签为 “静态控件”的 

静态控件ID为IDC_STATIC。需要注意是的,由资源管理器添加的静态 

控件在默认情况下其ID均为IDC_STATIC,因此,如果需要在程序中区 

分和操纵各个不同的静态控件,一般情况下我们都需要更改新添加的 

静态控件的ID值。这里我们将静态控件的ID值设置为 

IDC_STATICDEMO。  



                                 



              图6。 38 示例程序StaticDemo的主对话框  



以下属性和样式没有在本章前面的内容中涉及,它们可以适用于静态 

控件。可以通过静态控件的Properties属性对话框的Styles选项卡进 

行这些属性或样式的设置。  



         Align text:  决定静态文本控件中文本的横向对齐方 

                    式。可供选择的值为Left  (向左对齐)、 

                    Center  (居中对齐)和Right   (向右对 

                    齐)。默认值:Left  



         Center     在静态文本控件中将文本进行垂直居 

         Vertically:  中。类型:布尔值 默认值:假  



         No prefix:  不将控件文本中的 “&”符解释为助记字 


…………………………………………………………Page 344……………………………………………………………

                 符。在默认情况下, “&”符号在显示时 

                 会被去掉,取而代之的是紧接 “&”符之 

                 后的字符被以加下划线的格式进行显 

                 示。我们早在前面说过,通过双写 “&” 

                 符可以在控件文本中显示出实际的 “&” 

                 符,但是,对于一些特殊的场合,如使 

                 用静态文本控件来显示文件名的时候, 

                 将No  prefix属性设置为 “真”要更方 

                 便。  



        No wrap:  以左对齐的方式来显示文本,并且不进 

                 行文本的自动回行。超出控件右边界的 

                 文本将被裁去。需要注意的是,这时即 

                 使使用转义字符序列〃n〃也不可以强制 

                 控件文本进行换行。类型:布尔值  默认 

                 值:假  



        Simple:  禁止设置Text  Align属性和No  Wrap样 

                 式。在该属性为真的情况下,静态文本 

                 控件中的文本不会被自动回行,也不会 

                 被剪裁。类型:布尔值 默认值:假  



        Notify:  决定控件在被单击时是否通知父窗口。 

                 类型:布尔值 默认值:假  



        Sunken:  使用静态文本控件看上去有下凹的感 

                 觉。类型:布尔值 默认值:假  



        Border:  为文本控件创建边框。类型:布尔值  默 

                 认值:假  



4。   静态控件一般不用于输入,但是如果它的Notify属性设置为真, 

则当用户单击静态控件时,静态控件将向父窗口发送通知消息。但 

是,我们不可以使用前面所讲述的方法(即使用ClassWizard或从上下 

文菜单中选择Events命令)来为静态控件添加消息处理函数。而要以 

手动的方式来实现这一点。下面我们结合示例StaticDemo来说明如何 

为静态控件添加单击事件的命令处理程序。在进行下面的步骤之前, 

请确认静态控件IDC_STATICDEMO的Notify属性值为真。  



在类CStaticDemoDlg的定义处添加下面的命令处理函数声明:  



afx_msg void OnStaticDemo();  


…………………………………………………………Page 345……………………………………………………………

最好把成员函数OnStaticDemo的声明与其它命令处理函数的声明放在 

一起,但不要放到//{{AFX_MSG和//}}AFX_MSG之间。  



然后,打开类CStaticDemoDlg的实现文件StaticDemoDlg。cpp,在宏  



BEGIN_MESSAGE_MAP(CStaticDemoDlg; CDialog)  



和宏  



BEGIN_MESSAGE_MAP  



之间添加如下的消息映射入口:  



ON_BN_CLICKED(IDC_STATICDEMO; OnStaticDemo)  



同样,不要把手动添加的消息映射入口项放到注释//{{AFX_MSG_MAP 

和//}}AFX_MSG_MAP之间。  



手动添加成员函数OnStaticDemo或OnDoubleclickedStaticDemo的实 

现代码:  



void CStaticDemoDlg::OnStaticDemo()  



{  



MessageBox(〃您刚才单击了 “静态控件”!〃);  



}  



编译上面的示例程序,单击 “静态控件”,命令处理函数 

OnStaticDemo将被调用,从而弹出相应的消息框。  



下面我们来看一下如果在静态控件中使用图标和位图。  



                                           



                  图6。 39 使用图标代替静态控件中的文本  



首先介绍使用图标代替文本的例子,方法如下:  



假设对话框类为CStaticDemoDlg,所需使用图标的静态控件ID为 

IDC_STATICDEMO,相应的图标的ID为IDR_MAINFRAME,则可用下面的 


…………………………………………………………Page 346……………………………………………………………

代码代替类CStaticDemoDlg的成员函数OnInitDialog中的//   TODO注 

释:  



// 获得指向静态控件的指针  



CStatic *pStaticDemo=(CStatic*)GetDlgItem(IDC_STATICDEMO);  



// 加载图标  



HICON hIcon=AfxGetApp()…》LoadIcon(IDR_MAINFRAME);  



// 设置静态控件的样式以使得可以使用图标,并使图标显示时居中  



pStaticDemo…》ModifyStyle(0xF;SS_ICON|SS_CENTERIMAGE);  



// 设置静态控件图标  



pStaticDemo…》SetIcon(hIcon);  



运行该程序,显示如图6。39。  



接着我们来看如何使用位图代替文本,方法如下:  



假设所用位图的资源ID为IDB_STATICDEMO,其余设置如上。用以下代 

码来代替成员函数OnInitDialog中的// TODO注释:  



// 获得指向静态控件的指针  



CStatic *pStaticDemo=(CStatic*)GetDlgItem(IDC_STATICDEMO);  



// 获得位图句柄  



HBITMAP hBitmap=::LoadBitmap(AfxGetApp()…》m_hInstance;   



MAKEINTRESOURCE(IDB_STATICDEMO));  



// 设置静态控件的样式以使得可以使用位图,并使位图在显示时居中  



pStaticDemo…》ModifyStyle(0xF;SS_BITMAP|SS_CENTERIMAGE);  



// 设置静态控件显示时使用的位图  



pStaticDemo…》SetBitmap(hBitmap);  



编译并运行该程序,对话框显示如图6。40所示。  


…………………………………………………………Page 347……………………………………………………………

                               



             图6。 40 使用位图代替文本的静态控件  



  l 注意:  



  l 在使用位图的例子中,传递给ModifyStyle的第一个参数的值绝对 

   不可以为0,否则将得不到正常的运行结果。  



    



               第五节 文本编辑控件  



静态文本控件只能用来显示文本,而不可以用来输入文本。如果需要 

提供输入文本的功能应该使用文本编辑控件。文本编辑控件在 

Control工具箱中对应的图标为     。对于文本编辑控件,除了我们在 

前面所涉及的一些外,还可以设置以下的一些属性样式:  



        Align    决定当Multiline属性为真时文本的对齐 

        text:    方式。默认值为:Left  



        Multi  创建一个多行文本编辑控件。当一个多行 

        line:    文本编辑控件具有输入焦点时,如果用户 

                 按下了ENTER键,以默认情况下的行为是 

                 选择对话框中的默认命令按钮,而不是向 

                 文本编辑控件中插入新行。将 

                 AutoHScroll属性或Want  return属性设置 

                 为真可以将用户按下的ENTER键解释为插 

                 入新行,而不是选择默认命令按钮。  



                 在选择了AutoHScroll属性时,如果插入 

                 点超过了控件的右边界,多行文本编辑控 

                 件自动进行水平滚动。用户可以使用 

                 ENTER键来开始新行。  



                 如果没有选择AutoHScroll属性,多行文 

                 本编辑控件将视需要将文本进行自动折 

                 行。而仅当Want   return属性为真时,用 


…………………………………………………………Page 348……………………………………………………………

        户才可以使用ENTER键来开始新行。  



        多行文本编辑控件也可以拥有自己的滚动 

        条。具有滚动条的编辑控件处理自己的滚 

        动条消息,而不具有滚动条的编辑控件也 

        可以由父窗口发送的滚动条消息。  



        类型:布尔值 默认值:假  



Number:  用户不能输入非数字字符。类型:布尔值  

        默认值:假  



Horizontal  为多行控件提供水平滚动条。类型:布尔 

scroll:  值 默认值:假  



Auto    当用户输入的字符超过了编辑框的右边界 

HScroll:  时自动水平向右滚动文本。类型:布尔值  

        默认值:真  



Vertical  为多行控件提供垂直滚动条。类型:布尔 

scroll:  值 默认值:假  



Auto    在多行控件中,当用户在最后一行按下 

VScroll:  ENTER键时 自动向上滚动文本  



Password:   当用户键入时将所有字符显示为星号 

         (*)。该属性对于多行控件不可用。类 

        型:布尔值 默认值:假  



No   hide  改变当编辑框失去和重新获得焦点时文本 

selection:  的显示方式。如果该属性为真,在编辑框 

        中选中的文本在任何时候都显示为选中状 

        态 (即反白状态)。类型:布尔值      默认 

        值:假  



OEM     将键入的文本从Windows字符集转换为OEM 

convert:  字符集,再转换回Windows字符集。该操 

        作确认应用程序在调用AnsiToOem函数将 

        编辑框中的字符串转换为OEM字符串时进 

        行正确的字符转换,因此该样式对于包括 

        文件名的编辑控件特别有用。类型:布尔 

        值 默认值:假  


…………………………………………………………Page 349……………………………………………………………

         Want      指定当用户在多行编辑控件中按下ENTER 

         return:   键时插入一个回车符,否则用户按下 

                   ENTER将被解释为选择了对话框中的默认 

                   命令按钮。该样式对于单行编辑框控件没 

                   有任何影响。类型:布尔值 默认值:假  



         Border:   在编辑框边缘创建边框。类型:布尔值  

                   默认值:真  



         Uppercase:  将用户在编辑框中输入的字符转换为大 

                   写。类型:布尔值 默认值:假  



         Lowercase:  将用户在编辑框中输入的字符转换为小 

                   写。  



                   类型:布尔值 默认值:假  



         Read…only:  防止用户编辑和更改编辑框中的文本。类 

                   型:布尔值 默认值:假  



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