友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!阅读过程发现任何错误请告诉我们,谢谢!! 报告错误
喜书网 返回本书目录 我的书架 我的书签 TXT全本下载 进入书吧 加入书签

C语言实例教程(PDF格式)-第62章

按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!



               度  



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) &&  


…………………………………………………………Page 383……………………………………………………………

(lpDrawItemStruct…》itemAction & ODA_SELECT))  



{  



// 选中状态由选中变为非选中,清除其边框的加亮显示  



CBrush br(cr);  



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



}  



}  



对于自绘制组合框来说,成员函数DrawItem是需要重载的一个很重要 

的成员函数。该函数在自绘制组合框的可视部分发生改变时由框架调 

用。在默认情况下,该成员函数不做任何操作。其参数 

lpDrawItemStruct所指向的DRAWITEMSTRUCT结构包括了重绘制所需要 

的各种信息,如所需重绘的项、其设备上下文以及所执行的重绘行为 

等。在该成员函数终止前,应用程序应该恢复由该DRAWITEMSTRUCT结 

构所提供的为该显示上下文所选定图形设备接口。  



由表6。30可知在本示例程序中所使用的自绘组合框中的可选项是有序 

的,而它们都是一些颜色值,框架如何知道当一个新的颜色值被添加 

到组合框的列表框中时,它应该处于哪个颜色值之前,哪个颜色值之 

后呢?这时通过调用成员函数pareItem成员函数来实现的。如果 

在创建�
返回目录 上一页 下一页 回到顶部 赞(0) 踩(0)
未阅读完?加入书签已便下次继续阅读!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!