首页 理论教育VC++MFC视频教程:自绘组合控件开发要点

VC++MFC视频教程:自绘组合控件开发要点

【摘要】:自绘按钮是最容易开发的自绘控件,其他支持自绘的界面对象还有组合控件、列表控件以及自绘菜单等。开发这些自绘界面的难度要大一些,例如,组合控件要自绘下拉列表中的每一项,列表控件还要对不同的行和列进行处理等。打开本章第5节的“Si”工程,本节将继续开发一个带图标和文字的组合控件。1)修改国籍组合控件的属性,选择Owner draw中的Variable选项,如图10-33所示。

自绘按钮是最容易开发的自绘控件,其他支持自绘的界面对象还有组合控件、列表控件以及自绘菜单等。开发这些自绘界面的难度要大一些,例如,组合控件要自绘下拉列表中的每一项,列表控件还要对不同的行和列进行处理等。

打开本章第5节的“Si”工程,本节将继续开发一个带图标和文字的组合控件。

1)修改国籍组合控件的属性,选择Owner draw中的Variable选项,如图10-33所示。

978-7-111-46378-8-Chapter10-61.jpg

图10-33 设置组合框控件的属性

2)清除Data中的数据,如图10-34所示。

978-7-111-46378-8-Chapter10-62.jpg

图10-34 清除Data中的数据

3)在类视图的根节点上单击鼠标右键,在弹出的快捷菜单中,选择“New Class”命令,新建一个MFC派生类,如图10-35所示。

978-7-111-46378-8-Chapter10-63.jpg

图10-35 创建CComboBox派生类

4)在建立好的组合控件类头文件中,添加一些成员变量用于保存下拉列表项的信息。

978-7-111-46378-8-Chapter10-64.jpg

978-7-111-46378-8-Chapter10-65.jpg

5)在构造函数中初始化成员变量。

978-7-111-46378-8-Chapter10-66.jpg

6)在类视图中的CIconCombo类名称上单击鼠标右键,在弹出的快捷菜单中,选择“Add Member Function”命令,创建普通成员函数,如图10-36所示。

978-7-111-46378-8-Chapter10-67.jpg

图10-36 添加普通成员函数

7)这是基类同名函数的重写函数,修改该函数的代码。

978-7-111-46378-8-Chapter10-68.jpg

8)用同样的方法,添加普通成员函数并修改函数代码。

978-7-111-46378-8-Chapter10-69.jpg

9)用同样的方法,添加普通成员函数并修改函数代码。

978-7-111-46378-8-Chapter10-70.jpg

978-7-111-46378-8-Chapter10-71.jpg

10)用同样的方法,添加普通成员函数并修改函数代码。(www.chuimin.cn)

978-7-111-46378-8-Chapter10-72.jpg

11)用同样的方法,添加普通成员函数并修改函数代码。

978-7-111-46378-8-Chapter10-73.jpg

12)在类视图中为CIconCombo类添加两个虚函数,如图10-37所示。

978-7-111-46378-8-Chapter10-74.jpg

图10-37 通过右键菜单添加虚函数

13)虚函数MeasureItem根据下拉列表项的索引,设置项的高度和宽度。

978-7-111-46378-8-Chapter10-75.jpg

14)虚函数DrawItem根据下拉列表项的索引,绘制每项图标和文字。

978-7-111-46378-8-Chapter10-76.jpg

978-7-111-46378-8-Chapter10-77.jpg

15)添加WM_DESTROY的消息映射函数OnDestroy。

978-7-111-46378-8-Chapter10-78.jpg

16)在类向导中删除CComboBox关联变量,重现建立CIconCombo类型关联变量,如图10-38所示。

978-7-111-46378-8-Chapter10-79.jpg

图10-38 添加控件型关联变量

17)在对话框初始化函数OnInitDialog中,添加代码初始化自绘的组合控件。

978-7-111-46378-8-Chapter10-80.jpg

18)注意要在主对话框类的头文件中,包含自绘控件类的头文件。

978-7-111-46378-8-Chapter10-81.jpg

19)编译并运行,测试代码,如图10-39所示。

978-7-111-46378-8-Chapter10-82.jpg

图10-39 查看运行结果

组合控件在设置了自绘属性之后,一些文字相关函数全部都失效了,因此,要在派生类中重写这些函数。例如,AddString、InsertString和GetLBText等。

如果选择Owner draw的Fixed属性,则下拉列表中的每项高宽由系统自动设置,MeasureItem虚函数不被回调;如果选择Variable属性,则下拉列表中的每项高宽由用户设置,在MeasureItem回调函数中可以设置不同高度列表项。