日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

CTreeCtrl的用法

發(fā)布時間:2024/7/5 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CTreeCtrl的用法 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

?今天簡單的學了下CTreeCtrl,新建一個基于單文檔的MFC工程,在resource的IDD_DIALOG1里添加一個tree control,將其styles勾上has buttons,has lines,lines at root,通過classWizard添加一個繼承于CDialog的類CExDialog,添加私有成員變量CImageList m_imageList,然后就在OnInitDialog()函數(shù)里添加樹控件的細節(jié):

BOOL CExDialog::OnInitDialog()
{
??? CDialog::OnInitDialog();
??? HICON hlcon[
8];
???
??? m_imageList.Create(
16, 16, 0, 8, 8 );

??? hlcon[
0] = AfxGetApp()->LoadIcon( IDI_ICON1 );
??? hlcon[
1] = AfxGetApp()->LoadIcon( IDI_ICON2 );
??? hlcon[
2] = AfxGetApp()->LoadIcon( IDI_ICON3 );
??? hlcon[
3] = AfxGetApp()->LoadIcon( IDI_ICON4 );
??? hlcon[
4] = AfxGetApp()->LoadIcon( IDI_ICON5 );
??? hlcon[
5] = AfxGetApp()->LoadIcon( IDI_ICON6 );
??? hlcon[
6] = AfxGetApp()->LoadIcon( IDI_ICON7 );
??? hlcon[
7] = AfxGetApp()->LoadIcon( IDI_ICON8 );

???
for ( int n =0; n <8; n ++ )
???
{
??????? m_imageList.Add( hlcon[n] );
??? }


??? CTreeCtrl
* pTree = (CTreeCtrl*)GetDlgItem( IDC_TREEVIEW1 );
??? pTree
->SetImageList( &m_imageList, TVSIL_NORMAL );
??? TV_INSERTSTRUCT tvinsert;
??? tvinsert.hParent
= NULL;
??? tvinsert.hInsertAfter
= TVI_LAST;
??? tvinsert.item.mask
= TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_TEXT;
??? tvinsert.item.hItem
= NULL;
??? tvinsert.item.state
=0;
??? tvinsert.item.stateMask
=0;
??? tvinsert.item.cchTextMax
=6;
??? tvinsert.item.iSelectedImage
=1;
??? tvinsert.item.cChildren
=0;
??? tvinsert.item.lParam
=0;
??? tvinsert.item.iImage
=0;

/**///
??? tvinsert.item.pszText ="HOMER";
??? HTREEITEM hDad
= pTree->InsertItem( &tvinsert );

/**///
??? tvinsert.item.pszText ="Marge";
??? HTREEITEM hMom
= pTree->InsertItem( &tvinsert );

??? tvinsert.hParent
= hDad;
??? tvinsert.item.pszText
="Bart";
??? tvinsert.item.iImage
=3;
??? pTree
->InsertItem( &tvinsert );

??? tvinsert.hParent
= hMom;
??? tvinsert.item.pszText
="Lisa";
??? tvinsert.item.iImage
=6;
??? pTree
->InsertItem( &tvinsert );
???
??? tvinsert.item.pszText
="Dilbart";
??? HTREEITEM hOther
= pTree->InsertItem( &tvinsert );

??? tvinsert.hParent
= hOther;
??? tvinsert.item.pszText
="Dogbert";
??? tvinsert.item.iImage
=7;
??? pTree
->InsertItem( &tvinsert );

??? tvinsert.item.pszText
="Ratbert";
??? pTree
->InsertItem( &tvinsert );
???????
???
return TRUE;? // return TRUE unless you set the focus to a control
?????????????????
// EXCEPTION: OCX Property Pages should return FALSE
}

這樣就建立了兩個父節(jié)點,HOMER和Marge,tvinsert.item.iSelectedImage
設置了當選中這項時顯示什么圖標,tvinsert.item.iImage設置了當沒有選中時顯示的圖標,tvinsert.item.pszText設置顯示出來的文本。如果沒有對tvinsert.hParent進行更改設置,那么新添加的節(jié)點和上一個節(jié)點的父節(jié)點為同一節(jié)點。
下面這段代碼實現(xiàn)了選中某一項進行的更改操作:

void CExDialog::OnSelchangedTreeview1(NMHDR* pNMHDR, LRESULT* pResult)
{
??? NM_TREEVIEW
* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
???
??? CTreeCtrl
* pTree = (CTreeCtrl*)GetDlgItem(IDC_TREEVIEW1);
??? HTREEITEM hSelected
= pNMTreeView->itemNew.hItem;
???
if ( hSelected != NULL )
???
{
???????
char text[31];
??????? TV_ITEM item;
??????? item.mask
= TVIF_HANDLE | TVIF_TEXT;
??????? item.hItem
= hSelected;
??????? item.pszText
= text;
??????? item.cchTextMax
=30;
??????? VERIFY( pTree
->GetItem(&item) );
??????? SetDlgItemText( IDC_TREEVIEW1, text );
??? }


???
*pResult =0;
}

有了這些代碼還是不夠的,如果想顯示的話,我們要把這個頭文件加入到TreeTestView.cpp里,添加OnLButtonDown事件,并添加一段代碼:

CExDialog dlg; ??? dlg.DoModal();

?????? ok,這樣編譯運行下,點擊鼠標左鍵,就會出現(xiàn)一個樹狀控件,呵呵,簡單吧。。。 這些只是實現(xiàn)了靜態(tài)添加樹節(jié)點。以后還要深入的學習!

?

?

?

轉(zhuǎn)載于:https://www.cnblogs.com/toconnection/archive/2012/08/08/CTreeCtrl.html

總結

以上是生活随笔為你收集整理的CTreeCtrl的用法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。