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

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

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


况。从左边列表框中选定若干项,单击 “添加到”,将所选定的项添 

加到右边列表框 (注意列表框中可以包括相同字符串的项)。再从右边 

列表框中选定若干项,验证按钮 “删除”和 “全部清除”是否正常工 

作。  



                  第七节 组合框  



组合框 (bo   box)可以看作是一个编辑框或静态文本框与一个列表 

框的组合,组合框的名称也正是由此而来。当前选定的项将显示在组 

合框的编辑框或静态文本框中。如果组合框具有下拉列表 (drop…down  

list)样式,则用户可以在编辑框中键入列表框中某一项的首字母, 

在列表框可见时,与该首字母相匹配的最近的项将被加亮显示。  



组合框对应于Controls工具箱内的按钮为       。在绘制组合框的同时可 

以使用控件的Properties对话框设置控件的各种属性样式。一些样式 

已在前面的几节中作了介绍,因此这里不再重复,下面给出一些在前 

面的内容中没有进行说明的样式及其含义:  



        Type:     指定组合框的类型。可以使用的类型如 

                  下:  



                    Simple:创建包括编辑框控件和列表 

                    框的简单组合框,其中编辑框控件用 

                    来接受用户的输入。  



                    Dropdown:创建下拉组合框。该类型 


…………………………………………………………Page 376……………………………………………………………

                     与简单组合框类似。但仅当用户单击 

                     了编辑框控件部分右边的下拉箭头时 

                     组合框的列表框部分才被显示。  



                     Drop  List:该类型类似于下拉样式 

                     (drop…down),只是使用静态文本项代 

                     替编辑框控件来显示列表框中的当前 

                     选择。  



                  默认值为Dropdown 。  



        Uppercase:  将选择域或列表中的所有文本转换为大 

                  写。  



                  类型:布尔值 默认值为假  



        Lowercase:  将选择域或列表中的所有文本转换为小 

                  写。  



                  类型:布尔值 默认值为假  



与列表框不同的是,在绘制组合框的同时可以预先为组合框添加一些 

可选项,方法是单击Properties对话框中的Data选项卡 (如图所示), 

直接在Enter  listbox  items处键入组合框中的可选项,每一行为一 

个选项,使用Ctrl+Enter键开始新的一行。在运行时这些选项将出现 

在组合框的列表框中。  



                                     



                图6。 53 为组合框预置选项  



MFC类CboBox封装了Windows标准组合框,其成员函数提供了对组 

合框控件的常见操作的实现。表给出了对在类CListBox中定义的成员 

函数的描述。  



             表6。 29 在类CListBox中定义的成员函数  



      成员函数        描述  


…………………………………………………………Page 377……………………………………………………………

CboBox      构造一个CboBox对象  



Create         创建一个组合框并将它与CboBox对象相 

               关联  



InitStorage    为组合框的列表框部分的项和字符串预先分 

               配内存块  



GetCount       获得组合框中列表框项的数 目  



GetCurSel      如果存在的话,返回组合框中列表框的当前 

               选定项的索引  



SetCurSel      选择组合框中列表框内的一条字符串  



GetEditSel     获得组合框中编辑控件的当前选定的起始和 

               终止字符位置  



SetEditSel     在组合框的编辑控件中选定字符  



SetItemData    设置与组合框中指定项相关联的32位值  



SetItemDataPtr  将与组合框中指定项相关联的32位值设置为 

               指定的void指针  



GetItemData    获得由应用程序提供的与指定组合框项相关 

               联的32位值  



GetItemDataPtr  以void指针的形式返回由应用程序提供的与 

               指定组合框项相关联的32位值  



GetTopIndex    返回组合框中列表框部分的第一个可视项的 

               索引  



SetTopIndex    在组合框中的列表框部分的顶部显示指定索 

                引对应的项  



SetHorizontalExtent  以象素为单位指定组合框的列表框部分可以 

               横向滚动的宽度  



GetHorizontalExtent  以象素为单位获得组合框中列表框部分可以 

               横向滚动的宽度  



SetDroppedWidth  为组合框的下拉列表框部分设置最小允许宽 

               度  



GetDroppedWidth  获得组合框的下拉列表框部分的最小允许宽 

               度  



Clear          如果存在的话,删除编辑控件中当前选定的 

                内容  


…………………………………………………………Page 378……………………………………………………………

Copy           如果存在的话,将当前选定以CF_TEXT格式 

                复制到剪贴板  



Cut            如果存在的话,删除编辑控件中当前选定的 

                内容,并将其以CF_TEXT格式复制到剪贴板  



Paste           当剪贴板包括CF_TEXT格式的数据时,从剪 

               贴板复制数据到编辑控件的当前插入位置  



LimitText      设置用户可以在组合框的编辑控件中输入的 

               文本的长度限制  



SetItemHeight  设置组合框中列表项的高度或编辑控件 (或 

               静态文本控件)部分的高度  



GetItemHeight  获得组合框中列表项的高度  



GetLBText      从组合框中的列表框获取字符串  



                                             续表6。29 



成员函数             描述  



GetLBTextLen     获得组合框的列表框中某一字符串的长度  



ShowDropDown     对于具有CBS_DROPDOWN或 

                 CBS_DROPDOWNLIST属性的组合框,显示或 

                 隐藏其列表框  



GetDroppedControlRect  获得下拉组合框的可视 (下拉)列表框的屏 

                 幕坐标  



GetDroppedState  判断下拉组合框的列表框是否可见(处理 

                 下拉状态)  



SetExtendedUI    对于具有CBS_DROPDOWN或 

                 CBS_DROPDOWNLIST样式的组合框,选择默 

                 认用户界面或扩展用户界面  



GetExtendedUI    判断组合框具有默认用户界面还是扩展用 

                 户界面  



GetLocale        获得组合框的区域标识符  



SetLocale        设置组合框的区域标识符  



AddString        向组合框的列表框添加一字符串,对于具 

                 有CBS_SORT样式的组合框,新增加的字符 

                 串将被排序并插入到合适的位置,否则将 

                 被添加到列表框框的末尾  


…………………………………………………………Page 379……………………………………………………………

       DeleteString   从组合框的列表框中删除字符串  



       InsertString   向组合框的列表框中插入一字符串  



       ResetContent   清除组合框的列表框和编辑控件中的所有 

                      内容  



       Dir            添加文件名列表到组合框的列表框中  



       FindString     在组合框的列表框中查找包括指定前缀的 

                      第一个字符串  



       FindStringExact  在组合框的列表框中查找与指定字符串匹 

                      配的字符串  



       SelectString   在组合框的列表框中查找字符串,如果找 

                      到的话,在列表框中选择该字符串,并将 

                      字符串复制到编辑控件中  



       DrawItem       当一个自绘制组合框的可视部分改变时由 

                      框架调用  



       MeasureItem    在创建自绘制组合框时,由框架调用以判 

                      断组合框的尺寸  



       pareItem    当将一新项插入到排序的自绘制框中时由 

                      框架调用以判断项的相对位置  



       DeleteItem     当一列表项被从自绘制组合框中删除时由 

                      框架调用  



下面的示例程序演示了自绘制组合框的使用。  



1。    使用AppWizard创建名为boDemo的基于对话框的工程,按图 

6。54添加工程的主对话框 (IDD_BODEMO_DIALOG)中的各个控件。每 

个控件的属性如表6。30所示。  



2。 在ClassView中用鼠标右击boDemo classes,选择New Class命 

令。上面的操作将弹出如图6。55所示的对话框,确认在Class  type下 

拉列表框'注'       中选择了MFC     Class。然后在Name处输入新的类名 

CClrboBox,在Base   class下拉列表框中选择CboBox。如果需 

要修改新类的头文件或实现文件的文件名,可以单击Change按钮,这 

里,我们接受默认的文件名ClrboBox。cpp和ClrboBox。h。  


…………………………………………………………Page 380……………………………………………………………

                                                          



                        图6。 54 工程boDemo的主对话框  



             表6。 30 对话框IDD_BODEMO_DIALOG的控件属性设置  



                   控件类      ID             属性值  

                   型  



                   组合框   IDC_CLRBO   Type:Dropdown  



                                           Owner     draw: 

                                           Fixed  



                                           Sort:真  



                                           Vertical  

                                           scroll:真  



                                           Has string:假  



                   下压按      IDC_ADDCLR     Caption:添加颜 

                   钮                       色(&A)  



                            IDC_CHGCLR     Caption:改变颜 

                                           色(&C)  



                   静态控      IDC_STATICCLR  Caption属性值为 

                   件                       空  



3。  使用ClassWizard的Message  Map选项卡在类CClrboBox中重载 

基类的MeasureItem成员函数,其重载版本的代码如下:  



void CClrboBox::MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct)   



{  



// 由于组合框具有 CBS_OWNERDRAWFIXED 样式,因此以 0 为参数调用成员函数  



// GetItemHeight 获得每一项的固定高度  



lpMeasureItemStruct…》itemHeight=GetItemHeight(0);  


…………………………………………………………Page 381……………………………………………………………

}  



                                                                



                     图6。 55 从CboBox派生新类CClrboBox  



函数MeasureItem在自绘制样式的组合框创建时由框架调用。该函数 

将每一项的高度放入MEASUREITEMSTRUCT结构的成员中。如果对话框 

以CBS_OWNERDRAWVARIABLE样式创建,框架将为列表框中的每一项调 

用一次该成员函数,否则,该成员函数只被调用一次。  



接着,在CClrboBox的重载基类的DrawItem成员函数,其代码如 

下:  



void CClrboBox::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)   



{  



CDC* pDC=CDC::FromHandle(lpDrawItemStruct…》hDC);  



COLORREF cr=(COLORREF)lpDrawItemStruct…》itemData;  



// 注意到在出错的情况下,GetCurSel 和 GetItemData 返回 CB_ERR,而常量  



// CB_ERR 被定义为 …1,这时不应把它视为一种系统颜色。  



if (cr==CB_ERR)  



cr=GetSysColor(COLOR_WINDOW);  



if (lpDrawItemStruct…》itemAction & ODA_DRAWENTIRE)  



{  


…………………………………………………………Page 382……………………………………………………………

// 需要重绘整个项  



// 以该项所对应的颜色填充整个项  



CBrush br(cr);  



pDC…》FillRect(&lpDrawItemStruct…》rcItem; &br);  



// 反色居中显示该颜色的 RGB 组成  



CString str;  



str。Format(〃R: %d G: %d B: %d〃; GetRValue(cr); GetGValue(cr); GetBValue(cr));  



CSize size;  



size=pDC…》GetTextExtent(str);  



CRect rect=lpDrawItemStruct…》rcItem;  



COLORREF tcr;  



tcr=~cr & 0x00FFFFFF; // 获得背景色的反色,不能简单的使用 ~cr  



pDC…》SetTextColor(tcr);  



pDC…》SetBkColor(cr);  



pDC…》TextOut(rect。left+(rect。Width()…size。cx)/2;   



rect。top+(rect。Height()…size。cy)/2; str);  



}  



if ((lpDrawItemStruct…》itemState & ODS_SELECTED) &&  



(lpDrawItemStruct…》itemAction & (ODA_SELECT | ODA_DRAWENTIRE)))  



{  



// 选中状态由未选中变为选中,其边框被加亮显示  



COLORREF crHilite=~cr & 0x00FFFFFF;  



CBrush br(crHilite);  



pDC…》FrameRect(&lpDrawItemStruct…》rcItem; &br);  



}  



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