MFC treeview控件不同的節點顯示不同的圖標方法

TreeView 控件的主要屬性包括 Nodes 和 SelectedNode。Nodes 屬性包含樹視圖中的頂級節點列表。SelectedNode 屬性設置當前選中的節點。您可以在節點旁邊顯示圖標。該控件使用在樹視圖的 ImageList 屬性中命名的 ImageList 中的圖像。ImageIndex 屬性可以設置樹視圖中節點的默認圖像。

百度經驗:jingyan.baidu.com

工具/原料

  • vc++6.0及MFC 類庫

百度經驗:jingyan.baidu.com

方法/步驟

  1. 1,用InsertItem 添加節點

    參數: 文字,圖標,父節點

    返回: HTREEITEM

    示例: 添加一系列節點

    HTREEITEM hItem = m_Tree.InsertItem("root",NULL,NULL);///root就是節點的標題

    InsertItem函數的第一個參數就是設置他的節點標題

    2.,用ModifyStyle 設置風格

    參數: 取消的風格,增加的風格

    示例: 在對話框初始化時設置風格

    BOOL CMfc1Dlg::OnInitDialog()

    { //...

    m_Tree.ModifyStyle(NULL,TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT);

    }

    3,用DeleteItem 刪除節點

    4,用.DeleteAllItems 刪除全部節點

    5.用Expand 展開/收縮節點

    參數: 節點HTREEITEM,展開/收縮

    示例: m_Tree.Expand(hItem,TVE_EXPAND

    如果你希望在每個結點前添加一個小圖標,就必需先調用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

  2. 示例代碼:

    BOOL CTreeDlg::OnInitDialog ()

    SetIcon(m_hIcon, TRUE); // Set big icon

    SetIcon(m_hIcon, FALSE);後加入:

    /*************************得到圖標文件的絕對**********************************/

    CString strFullName = AfxGetApp()->m_pszHelpFilePath;

    char drive[_MAX_DRIVE];

    char dir[_MAX_DIR];

    _splitpath(strFullName, drive, dir, NULL,NULL);

    CString strPath;

    strPath.Format("%s%s", drive, dir);

    /****************************得到圖標文件的絕對*******************************/

    m_ImageList.Create(16,16,ILC_COLOR8|ILC_MASK,2,1);

    m_treectrl.SetImageList(&m_ImageList,TVSIL_NORMAL);

    SHFILEINFO fi;

    SHGetFileInfo(strPath+"gn.ico",0,&fi,sizeof(SHFILEINFO),SHGFI_ICON|SHGFI_SMALLICON); //0

    m_ImageList.Add(fi.hIcon);

    SHGetFileInfo(strPath+"ap.ico",0,&fi,sizeof(SHFILEINFO),SHGFI_ICON|SHGFI_SMALLICON|SHGFI_OPENICON); //1

    m_ImageList.Add(fi.hIcon);

    SHGetFileInfo(strPath+"tree.ico",0,&fi,sizeof(SHFILEINFO),SHGFI_ICON|SHGFI_SMALLICON|SHGFI_OPENICON);//2

    m_ImageList.Add(fi.hIcon);

    HTREEITEM hroot,hspec,hclass;

    hroot= m_treectrl.InsertItem("學生成績",0,0); 前一個0表示 點擊前的圖標 後一個0是點後的 所以這就是點前點後不變

    hspec=m_treectrl.InsertItem("專業",1,1,hroot);前一個1表示 點擊前的圖標 後一個1是點後的 所以這就是點前點後不變

    hclass=m_treectrl.InsertItem("20111",2,2,hspec);前一個2表示 點擊前的圖標 後一個2是點後的 所以這就是點前點後不變

    可以試下,加入源文件中如下圖

  3. 運行後的treeview的效果圖如下,願大家成功,共同學習交流!

    MFC treeview控件不同的節點顯示不同的圖標方法
    END
百度經驗:jingyan.baidu.com

注意事項

  • hroot= m_treectrl.InsertItem("學生成績",0,0); 前一個0表示 點擊前的圖標 後一個0是點後的 所以這就是點前點後不變hspec=m_treectrl.InsertItem("專業",1,1,hroot);前一個1表示 點擊前的圖標 後一個1是點後的 所以這就是點前點後不變 hclass=m_treectrl.InsertItem("20111",2,2,hspec);前一個2表示 點擊前的圖標 後一個2是點後的 所以這就是點前點後不變

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章