国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
MFC樹控件應(yīng)用實例

MFC樹控件應(yīng)用實例  

2010-07-05 10:50:43|  分類: C++學(xué)習(xí)|舉報|字號 訂閱

1.         新建一名為“Tree”的對話框(Dialog based)應(yīng)用程序項目(MFC AppWizard(EXE)),完成后的效果如下:

2.         將原有的一個標簽(靜態(tài)文本框)和兩個命令按鈕刪除,然后往其中添加一個Tree Control,一個List Box,五個Button,完成后的效果如下圖:

各控件屬性見下表:

序號

屬性

內(nèi)容

備注

1

ID

IDC_TREE_INPUT

Tree Control

2

ID

IDC_LIST_OUTPUT

List Box

3

ID

Caption

IDC_BUTTON_Initialize

初始化&1

Button

4

ID

Caption

IDC_BUTTON_DeleteOne

刪除一個&2

Button

5

ID

Caption

IDC_BUTTON_Clear

刪除全部&3

Button

6

ID

Caption

IDC_BUTTON_ShowAll

瀏覽4

Button

7

ID

Caption

DC_BUTTON_Exit

退出&0

Button

3.         給其中的樹形控件添加一類型為CTreeCtrl的成員變量m_ctrlTree,給其中的列表框控件添加一類型為CListBox的成員變量m_ctrlList,如下圖:

4.         給其中的“初始化”按鈕添加如下代碼:

void CTreeDlg::OnBUTTONInitialize()

{

       // TODO: Add your control notification handler code here

       //在樹控件中添加按鈕和連線,添加TVS_HASLINES,TVS_LINESATROOT,TVS_HASBUTTONS風(fēng)格

       m_ctrlTree.ModifyStyle(0,TVS_LINESATROOT|TVS_HASBUTTONS|TVS_HASLINES);

       m_ctrlTree.DeleteAllItems();

       CString strText=_T("");

       HTREEITEM hRoot=m_ctrlTree.InsertItem(_T("Root"));//插入樹根

       for(int i=0;i<4;i++)

       {

              strText.Format(_T("Item%d"),i);

              HTREEITEM hParent=m_ctrlTree.InsertItem(strText,hRoot);//插入第二級內(nèi)容

              for(int j=0;j<5;j++)

              {

                     strText.Format(_T("SubItem%d%d"),i,j);

                     m_ctrlTree.InsertItem(strText,hParent);//插入第三級內(nèi)容

              }

       }

}

5.         給其中的“刪除一個”按鈕添加如下代碼:

void CTreeDlg::OnBUTTONDeleteOne()

{

       // TODO: Add your control notification handler code here

       HTREEITEM hSel = m_ctrlTree.GetSelectedItem();

       if(hSel==NULL)//沒有選中節(jié)點

              return;

       else

              if(m_ctrlTree.ItemHasChildren(hSel))//選中節(jié)點有子節(jié)點

              {

                     CString strMessage = _T("當(dāng)前選擇的項包含子項,是否刪除?");

                     if(MessageBox(strMessage,_T(""),MB_YESNO)== IDYES)

                            m_ctrlTree.DeleteItem(hSel);//刪除子樹

              }

              else

                     m_ctrlTree.DeleteItem(hSel);//刪除單個節(jié)點 

}

6.         給其中的“刪除全部”按鈕添加如下代碼:

void CTreeDlg::OnBUTTONClear()

{

       // TODO: Add your control notification handler code here

       m_ctrlTree.DeleteAllItems();//清空樹節(jié)點

}

7.         給其中的“退出”按鈕添加如下代碼:

void CTreeDlg::OnBUTTONExit()

{

       // TODO: Add your control notification handler code here

       EndDialog(NULL);

}

8.         找到并打開頭文件TreeDlg.h,找到其中的類定義class CTreeDlg : public CDialog,給此類增加一成員函數(shù)如下:

       void Search(HTREEITEM hParent,int nOffset)//用于查找的成員函數(shù)

       {

              CString strText=_T("");

              HTREEITEM hChild=NULL;

              hChild=m_ctrlTree.GetChildItem(hParent);

              while(hChild!=NULL)

              {

                     strText=m_ctrlTree.GetItemText(hChild);

                     for(int n=0;n<nOffset;n++)

                     {

                            strText.Insert(0,_T(""));

                     }

                     m_ctrlList.AddString(strText);

                     if(m_ctrlTree.ItemHasChildren(hChild))

                     {

                            Search(hChild,nOffset+1);

                     }

                     hChild=m_ctrlTree.GetNextItem(hChild,TVGN_NEXT);

              }

       }

9.         給其中的“瀏覽”按鈕添加如下代碼:

void CTreeDlg::OnBUTTONShowAll()

{

       // TODO: Add your control notification handler code here

       m_ctrlList.ResetContent();//清代列表框

       HTREEITEM hRoot=m_ctrlTree.GetRootItem();//獲取根節(jié)點

       if(hRoot==NULL)//為空樹

              return;

       else

       {

              CString strText=m_ctrlTree.GetItemText(hRoot);//獲取節(jié)點文本

              m_ctrlList.AddString(strText);

              if(m_ctrlTree.ItemHasChildren(hRoot))

                     Search(hRoot,1);

       }

}

10.     運行效果如下列圖所示:

樹操作的一段代碼:

       // TODO: Add extra validation here

       CTreeCtrl * pTree=(CTreeCtrl*)GetDlgItem(IDC_TREE);

       //pTree->SetImageList(&m_imageList,TVSIL_NORMAL);//為該樹狀控件設(shè)置圖像列表

       //TVS_HASBUTTONS == 在父項目中顯示(+)或(-)。

       //TVS_HASLINES == 在層次中用線條來連接各個項目名稱。

       //TVS_LINESATROOT == 在根目錄下的項目也用線連接。

       pTree->ModifyStyle(0,TVS_LINESATROOT|TVS_HASBUTTONS|TVS_HASLINES);

       //聲明一個結(jié)構(gòu)體,下面是對其所進行的初始化:

       TV_INSERTSTRUCT tvinsert;

       //hParent=父項目的句柄。如果該值為TVI_ROOTvalueNULL,該項目插在樹型視圖的根部。

       tvinsert.hParent=NULL;

       //hInsertAfter確定插入位置,可以取下面的值:

       //TVI_FIRST 插在列表的頭部。

       //TVI_LAST  插在列表的尾部。

       //TVI_SORT  按字母順序插入。

       tvinsert.hInsertAfter=TVI_SORT;

       //mask用來指定TV_ITEM的哪些成員變量有效。

       //譬如,如果指定了TVIF_TEXT,這意味著pszText成員變量是有效的??梢酝瑫r指定幾個標志位。

       tvinsert.item.mask=TVIF_IMAGE|TVIF_SELECTEDIMAGE|TVIF_TEXT;

       //hItem是樹型視圖項目的句柄。每一個項目都有它自己的句柄,如果要操作一個項目,就必須選擇它的句柄。

       tvinsert.item.hItem=NULL;

       tvinsert.item.state=0;

       tvinsert.item.stateMask=0;

       tvinsert.item.cchTextMax=6;

       //iImageiSelectedImage用來指定圖象列表以及一個索引號。

       //這樣就知道當(dāng)項目被選中或沒被選中時用哪個圖象來表示該項目。

       //像資源管理器中左邊窗口中的文件夾等小圖表就是有這兩個參數(shù)來決定的。

       tvinsert.item.iSelectedImage=1;

       tvinsert.item.cChildren=0;

       tvinsert.item.lParam=0;//lParam=指向結(jié)構(gòu)體TV_INSERTSTRUCT的指針;

       //頂層的節(jié)點

       tvinsert.item.pszText="Homer";//設(shè)置文本

       tvinsert.item.iImage=2;//設(shè)置相關(guān)的圖像列表中的圖像

       HTREEITEM hDad=pTree->InsertItem(&tvinsert);//加入到樹的節(jié)點中

       tvinsert.item.pszText="Marge";

       HTREEITEM hMom=pTree->InsertItem(&tvinsert);

       //第二層的節(jié)點--父節(jié)點為hDaD

       tvinsert.hParent=hDad;//聲明其父節(jié)點

       tvinsert.item.pszText="Bart";

       tvinsert.item.iImage=3;

       pTree->InsertItem(&tvinsert);

       tvinsert.item.pszText="Lisa";//只對需要改變的量進行改變就可以

       pTree->InsertItem(&tvinsert);

       //第二層的節(jié)點--父節(jié)點為hMum

       tvinsert.hParent=hMom;

       tvinsert.item.pszText="Bart";

       tvinsert.item.iImage=4;

       pTree->InsertItem(&tvinsert);

       tvinsert.item.pszText="Lisa";

       pTree->InsertItem(&tvinsert);

       tvinsert.item.pszText="Dilbert";

       HTREEITEM hOther=pTree->InsertItem(&tvinsert);

       //第三層節(jié)點--父節(jié)點為hOrher

       tvinsert.hParent=hOther;

       tvinsert.item.pszText="Dogbert";

       tvinsert.item.iImage=7;

       pTree->InsertItem(&tvinsert);

       tvinsert.item.pszText="Ratbert";

       pTree->InsertItem(&tvinsert);

閱讀(5416)| 評論(6)
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
MFC 樹形控件CTreeCtrl顯示文件路徑及文件
MFC中CImageList(圖形列表控件)和CTreeCtrl(樹形列表控件)的簡單用法
VC樹形控件控件(基礎(chǔ))
vc樹控件Tree Control 的簡單使用
如何判斷樹形控件為根結(jié)點或子結(jié)點? CN Dev Forum 主題查看
VC?CTreeCtrl用法總結(jié)
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服