这次做一个模型库管理系统,里面用到了一些基本的控件。现在把一些经验总结一下。以免日后忘记。
一般的方法什么的查查资料也就解决了,这里主要讲我碰到的一些比较细节的东西。
1.清空TreeView里的所有内容,并重新填充
刚开始的时候,能用DeleteAllItems()方法把节点都给删除,但是留下了一片空白,重新添加的内容就看不到了。这个问题郁闷了很久,但思想无非是一样的,删除节点,重新填充。偶然间发现别人的代码里用到了SetRedraw()。哈,问题解决。
2.获取选中节点的文字内容以及获得当前节点的父节点
HTREEITEM hSelectedItem=m_TreeCtrl.GetSelectedItem();
CString strSelectedItemText=m_TreeCtrl.GetItemText(hSelectedItem);
HTREEITEM hParentItem=m_TreeCtrl.GetParentItem(hSelectedItem);
3.添加一个节点到TreeView控件中
TV_ITEM tvItem;
_variant_t vClass;
vClass= m_pRecordset->GetCollect("名称");
tvItem.mask=TVIF_TEXT|TVIF_PARAM;
CString temp;
temp=(char*)_bstr_t(vClass);
tvItem.pszText=(LPTSTR)(LPCTSTR)temp;
TV_INSERTSTRUCT tvInsert;
tvItem.cchTextMax=2;
tvInsert.hParent=TVI_ROOT;//当作根节点
tvInsert.hInsertAfter=TVI_LAST;
tvInsert.item=tvItem;
HTREEITEM hRoot=m_TreeCtrl.InsertItem(&tvInsert);
这段代码从数据库中读取“名称”字段来填充控件。最值得注意的就是红色的那句话,这里吧CString的字符串添加到TreeView 中需要进行复杂的转化,CSDN中有篇文章详细地讲述了CString 的操作。地址是:http://dev.csdn.net/article/53/53729.shtm这个是英文的
http://blogger.org.cn/blog/more.asp?name=njucs&id=7350这个是中文的
对于上面操作的解释:
当你向控件写数据时,文本指针实际上被当成 LPCTSTR,而当你从控件读数据 时,你必须有一个可写的字符串。这个结构无法区分它是用来读还是用来写。
因此,你会常常在我的代码中看到如下的用法:
tvi.item.pszText = (LPTSTR)(LPCTSTR)s;
它把 CString 强制类型转化成 LPCTSTR,也就是说先获得改字符串的地址,然后再强制类型转化成 LPTSTR,
以便可以对之进行赋值操作。 注意这只有在使用 Set 或 Insert 之类的方法才有效!如果你试图获取数据,
则不能这么做。
联系客服