MFC树控件和数据库的数据交互

怎么实现... 怎么实现 展开
 我来答
归悦欣cf
2014-04-10 · TA获得超过1444个赞
知道大有可为答主
回答量:4250
采纳率:59%
帮助的人:1325万
展开全部
先从数据库里面获取数据,然后填写到树形控件节点。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ahcc08
推荐于2016-05-16 · 知道合伙人软件行家
ahcc08
知道合伙人软件行家
采纳数:11853 获赞数:51939
拥有丰富的软件开发经验。

向TA提问 私信TA
展开全部
一)树形控件简介
树形控件是一种可以分级显示项目列表的窗口,其所含项目以相互关联的方式显示在控件中,通过点击位于某个层次的项目 节
点可以展开下一层次中从属于该节点的所有项目。树形控件非常适合于管理那些层次较多且相互间隶属关系较为清晰的项目元素
。在MFC中,由 CTreeCtrl类提供了对树形控件的功能支持。
在用Create()创建了一个树形控件后可以用SetImageList()函 数为其设置一个图象列表,这样就可以在树形控件中为各个
层次的项目设置图标。

********************************************************************************************
通过InsertItem()函数可以为其添加数据项,返回的 HTREEITEM类型的句柄唯一标识了此添加的项目。该句柄应当妥善保管,
只有通过该句柄才能为此项目继续添加子项目。如果在创建子窗口时指定父窗口句 柄为NULL,则将直接在根目录创建项目。下
面这段代码将通过上述函数创建一个树形控件并向其添加二个层次的项目:
********************************************************************************************

(二)树形控件的插入
树形控件的使用关键在于两个结构体: TV_INSERTSTRUCT 和 TVITEM 和一个插入函数InsertItem

(1)TV_INSERTSTRUCT 结构体
***************************************************************
此结构体的相关信息主要设置如何插入:是根节点还是子节点,从开始处插入还是从最后插入,还是按照字母顺序插入
插入的节点相关信息。
****************************************************************
typedef struct _TV_INSERTSTRUCT { tvins
HTREEITEM hParent; //插入项的句柄,如果是根节点则为TVI_ROOT 或 NULL,
//否则为父节点InsertItem函数返回值
HTREEITEM hInsertAfter;

// TVI_FIRST Inserts the item at the beginning of the list.
// TVI_LAST Inserts the item at the end of the list.
// TVI_SORT Inserts the item into the list in alphabetical order.
TV_ITEM item;
//插入节点的相关信息属性,是TVITEM的对象。
} TV_INSERTSTRUCT, FAR *LPTV_INSERTSTRUCT;

(2)TVITEM 结构体
设置插入项的属性,具体各个结构体中数据的意义请查找MSDN。
typedef struct tagTVITEM {
UINT mask;
HTREEITEM hItem;
UINT state;
UINT stateMask;
LPTSTR pszText;
int cchTextMax;
int iImage;
int iSelectedImage;
int cChildren;
LPARAM lParam;
} TVITEM, *LPTVITEM;

(3)InsertItem 函数
如果TV_INSERTSTRUCT 和 TVITEM 都设置完毕,控件也创建完毕,则用InsertItem 函数就可以插入相关项了。

(三)树形控件的风格

首先如果拖入的控件,可以通过控件属性进行相关设置。
若是自己创建:
树形控件可以用于树形的结构,其中有一个根接点(Root)然后下面有许多子结点,而每个子结点上有允许有一个或多个或没有
子结点。MFC中使用CTreeCtrl类来封装树形控件的各种操作。通过调用
BOOL Create( DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID );创建一个窗口,dwStyle中可以使用以下一
些树形控件的专用风格:

TVS_HASLINES 在父/子结点之间绘制连线
TVS_LINESATROOT 在根/子结点之间绘制连线
TVS_HASBUTTONS 在每一个结点前添加一个按钮,用于表示当前结点是否已被展开
TVS_EDITLABELS 结点的显示字符可以被编辑
TVS_SHOWSELALWAYS 在失去焦点时也显示当前选中的结点
TVS_DISABLEDRAGDROP 不允许Drag/Drop
TVS_NOTOOLTIPS 不使用ToolTip显示结点的显示字符

(四)为树形控件添加图标
如果你希望在每个结点前添加一个小图标,就必需先调用CImageList* SetImageList( CImageList * pImageList, int
nImageListType );指明当前所使用的ImageList,nImageListType为TVSIL_NORMAL。在调用完成后控件中使用图片以设置的
ImageList中图片为准。然后调用
HTREEITEM InsertItem( LPCTSTR lpszItem, int nImage, int nSelectedImage, HTREEITEM hParent = TVI_ROOT, HTREEITEM
hInsertAfter = TVI_LAST);添加结点,nImage为结点没被选中时所使用图片序号,nSelectedImage为结点被选中时所使用图片
序号。下面的代码演示了ImageList的设置。
/*m_list 为CImageList对象
IDB_TREE 为16*(16*4)的位图,每个图片为16*16共4个图标*/
m_list.Create(IDB_TREE,16,4,RGB(0,0,0));
m_tree.SetImageList(&m_list,TVSIL_NORMAL);
m_tree.InsertItem("Parent1",0,1);//添加,选中时显示图标1,未选中时显示图标0
(四)vc 如何区分CTreeCtrl节点

CTreeCtrl控件中SetItemData和GetItemData的使用方法

通俗一点说:InsertItem方法添加新节点时,如果你希望以后能区分这个节点,
或当你选中此节点时,能返回一个唯一的值让你区分它。
用SetItemData给这个节点画一个标记,然后下次你需要区分不同节点时,只需要
通过GetItemData获取dwData 值 ,然后就可认出这个节点。

举个实例吧:

+*****A
+*****A1
+*****A2
+*****A3
+*****A4
+*****B
+*****B1
+*****B2
+*****B3
+*****B4

如上当你建立如上树形列表时,每当添加节点时都SetItemData

//////////添加A及其子节点////
HTREEITEM hHandle = InsertItem(A);
SetItemData(hHandle,10);

hHandle = InsertItem(A1);
SetItemData(hHandle,10+1);
hHandle = InsertItem(A1);
SetItemData(hHandle,10+2);
hHandle = InsertItem(A1);
SetItemData(hHandle,10+3);
hHandle = InsertItem(A1);
SetItemData(hHandle,10+4);

//////////添加B及其子节点////
HTREEITEM hHandle = InsertItem(B);
SetItemData(hHandle,10);

hHandle = InsertItem(B1);
SetItemData(hHandle,10+1);
hHandle = InsertItem(B1);
SetItemData(hHandle,10+2);
hHandle = InsertItem(B1);
SetItemData(hHandle,10+3);
hHandle = InsertItem(B1);
SetItemData(hHandle,10+4);

那么当你点击或双击节点时,在其相应函数中获取dwData 的值,
当值为10时你就知道这是选中了A节点,如果为13,那就是A3子节点。类此。

************************************************
CTreeCtrl::SetItemData
************************************************
BOOL SetItemData( HTREEITEM hItem, DWORD dwData );

返回值:如果成功则返回非零值;否则返回0。

参数: hItem 要获取其数据的项的句柄。
dwData 一个与由hItem指定的项关联的32位的应用程序指定值。

说明:
此成员函数用来设置与指定项关联的32位的应用程序指定值。

请参阅:CTreeCtrl::GetItemData

***************************************************
CTreeCtrl::GetItemData
***************************************************
DWORD GetItemData( HTREEITEM hItem ) const;

返回值:
返回一个与由hItem指定的项关联的32位的应用程序指定值。

参数: hItem 要获取其数据的项的句柄。

说明:
此成员函数用来获取与指定项关联32位的应用程序指定值。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式