王惠民
树型控制是Win 95支持的公共控制之一,功能极强,对多数事件的响应都是自动实现的。如果 使用它来开发访问像Win 95
注册库这样具有层次结构的复杂
程序,则能够让您省事不少。有关树型控制及Win 95注册库本身的一些知识,请参考联机文挡。本文着重介绍采用树型控制展现Win 95注册库的有关实现方法及遇到
问题时的处理过程。
一、加入树型控制和像表小位图
首先,建立以对话框为基础的主应用
程序。然后,在其对话框资源中加入树型控制。可供选择的树型控制的风格属性(Styles)有:按钮(树中出现具有支持展开或收缩树层的功能的+或-操作按钮,对下面的风格属性可作类似理解)、连接线、线在根处等等。最后,加入树型控制的对应成员。例如:
CTreeCtrl m_TREECtrlREG;
像表小位图用来表示对树上的注册库关键字或子关键字被操作的状态,是可选的。为简单起见,可只用两幅小位图来区分有或无子关键字的关键字:一幅用来表示是有子关键字的关键字(类似于目录),另外一幅用来表示是无子关键字的关键字(类似于文件)。小位图的宽为15,高为16。
以上具体操作过程从略。
二、 最顶层和六个主层关键字名插入树
在对话框的初始化函数OnInitDialog()中适宜做此工作,通过OnInitRootKey()函数来实现:
BOOL CWRegTreeCtrlDlg::OnInitDialog()
{
//Add extra initialization here
//像表小位图的建立
CImageList* pMyIL = new CImageList();
pMyIL->Create(16, 15, TRUE, 3, 2);
CBitmap MyBmp;
for(UINT nIndef=IDB_BMPBEG;
nIndef<=IDB_BMPEND; nIndef++)
{ MyBmp.LoadBitmap(nIndef);
pMyIL->Add(&MyBmp, (COLORREF)0xFFFFFF);
MyBmp.DeleteObject();
}
m_TREECtrlREG.SetImageList(pMyIL, TVSIL_NORMAL);
//最顶层和六个主层关键字名插入树子函数
OnInitRootKey();
return FALSE;
}
VOID CWRegTreeCtrlDlg::OnInitRootKey()
{
//全部清除树视图
m_TREECtrlREG.DeleteAllItems();
//建立初始树视图:最顶层和六个主层
TV_INSERTSTRUCT TreeCtrlItem;//树控制项
TreeCtrlItem.hParent = TVI_ROOT;//最顶层
TreeCtrlItem.hInsertAfter = TVI_LAST;
TreeCtrlItem.item.iImage = 1;//目录
TreeCtrlItem.item.iSelectedImage = 1;
TreeCtrlItem.item.mask=TVIF_IMAGE|TVIF_SELECTEDIMAGE| TVIF_TEXT|TVIF_CHILDREN;
TreeCtrlItem.item.pszText =_T(strTemp0.GetBuffer(20));
//“<我的电脑>顶层”
//插入树根
hTreeItem[0]=m_TREECtrlREG.InsertItem(&TreeCtrlItem);
TreeCtrlItem.hParent =hTreeItem[0];//第一主层
TreeCtrlItem.hInsertAfter = TVI_LAST;
TreeCtrlItem.item.iImage = 1;
TreeCtrlItem.item.iSelectedImage = 1;
TreeCtrlItem.item.mask=TVIF_IMAGE|TVIF_SELECTEDIMAGE| TVIF_TEXT|TVIF_CHILDREN;
TreeCtrlItem.item.pszText =_T(rStr.GetBuffer(18) );
//“HKEY_CLASSES_ROOT”
//插入树根
hTreeItem= m_TREECtrlREG.InsertItem(&TreeCtrlItem);
//插入第二到第六主层与插入第一主层“HKEY_CLASSES_ROOT”的代码类似,具体代码从略
//展开最顶层
m_TREECtrlREG.Expand(hTreeItem[0],TVE_EXPAND);
hCurItem=hTreeItem[0];
//访问注册库时最顶层和主层位置路径句柄的初值
hKeyRoot = 0;
return;
}
三、用鼠标单击+或-按钮或者双击树项关键字名操作的响应
在树上插入与显示注册库各