vc中ctreeview控制項的使用
這次做乙個模型庫管理系統,裡面用到了一些基本的控制項。現在把一些經驗總結一下。以免日後忘記。
一般的方法什麼的查查資料也就解決了,這裡主要講我碰到的一些比較細節的東西。
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 的操作。位址是:
這個是英文的
這個是中文的
對於上面操作的解釋:
當你向控制項寫資料時,文字指標實際上被當成 lpctstr,而當你從控制項讀資料 時,你必須有乙個可寫的字串。這個結構無法區分它是用來讀還是用來寫。
因此,你會常常在我的**中看到如下的用法:
tvi.item.psztext = (lptstr)(lpctstr)s;
它把 cstring 強制型別轉化成 lpctstr,也就是說先獲得改字串的位址,然後再強制型別轉化成 lptstr,
以便可以對之進行賦值操作。 注意這只有在使用 set 或 insert 之類的方法才有效!如果你試圖獲取資料,
則不能這麼做。
C TreeView控制項的使用
treeview控制項的使用 1,實現treeview中 選擇結點,把當前結點的狀態傳遞到孩子結點中,通過結點的選擇後觸發事件來實現 如下 遞迴函式 遞迴的吧父親接到的選擇狀態傳遞給孩子結點 當前結點 當前結點的選擇狀態 private void refreshchildnode treenode ...
C TreeView控制項的混亂命名
treeview的成員 label edit before lebel edit after label edit treenode的成員 name text treenode的建構函式 new treenode string text treeview新增節點的方法 tv.nodes.add st...
C TreeView控制項的應用(二)
繼c treeview控制項的應用 一 之後,自己又整了一下treeview上乙個方法在實現 遍歷 節點的插入 刪除方面存在不足。下面這個方法使用遞迴遍歷,簡便 易懂而且在節點的新增刪除方面操作起來都很方便,嘿 view code 1 2 遞迴遍歷 3 4 parentcode為此選單的上級節點 5...