Welcome

首页 / 软件开发 / C++ / 如何实现由列表控件控制的属性表

如何实现由列表控件控制的属性表2010-07-11 vckbase 赵科进摘要:很多MFC的程序都用到了属性表和属性页来实现选项设置的界面,但是MFC本身提供的属性表页功能有限,界面也很原始,一些新软件都实现了自己定义的更为美观的属性页。MFC原始的属性页是通过CTabCtrl进行切换控制的,本文给出了一种现在较为常见的用CListCtrl进行页面切换的属性页的方法,并且对对列表控件进行了重绘。 CMyPropertySheet是一个从CPropertySheet派生而来的类,因此你仍然可以不费力的利用MFC CPropertySheet的诸多特性,具体使用方法稍后我会详细说明。

该属性表的实现效果如下:

图一

一、使用

CMyPropertySheet的使用方法与MFC的CPropertySheet类似,首先要在程序中创建两个属性页,也就是两个CPropertyPage的派生对象。然后将MyPropertySheet.cpp 和 MyPropertySheet.h添加至工程,在程序的视图类头文件中(假定是个SDI程序)将CMyPropertySheet的头文件包含进来

#include “MyPropertySheet.h”

在资源视图里设置一个新的菜单项“选项”(放在哪儿随你) 用ClassWizard添加响应函数,在该函数里添加如下代码创建一个属性表对象myPS

CMyPropertySheet myPS;

然后向属性表添加两个属性页。

myPS.AddPage(&m_page1);
myPS.AddPage(&m_page2);

接下来要添加属性页的图标,该图标会在对应列表项以及属性页的标题上显示,注意这里添加的顺序要与属性页的添加顺序保持一致。

myPS.AddIcon(IDI_GLOBAL);
myPS.AddIcon(IDI_ADDITION);

最后创建并显示该属性页。

myPS.DoModal();

剩下的工作就跟一般属性表完全一样了。

CMyPropertySheet类提供如下自定义函数,可以对属性表的外观进行设置。

SetSepratorColor,SetCaptionColor与SetSelectedColor都接受一个类型为COLORREF的参数,分别用以设置列表分隔线,属性页标题以及列表选择项背景的颜色。

SetListFont设置列表的字体。

读者也可以根据自己的需要对其进行扩充。