VC控件 TreeCtrl 与 ListCtrl 演示

雪雪唯一

雪雪唯一

2016-01-29 12:07

VC控件 TreeCtrl 与 ListCtrl 演示,VC控件 TreeCtrl 与 ListCtrl 演示

VC控件 TreeCtrl 与 ListCtrl 演示


作者:兰州大学现物系 王景生

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/cyuyanjiaocheng/)

下载源代码


这个例子类似于 Windows 的资源管理器,程序运行界面如图一所示:


图一

主要用到的类有:
CListCtrl,CTreeCtrl,CImageList,CFileFind 和函数SHGetFileInfo()

简述步骤如下:
1、增加 TreeCtrl 的 TVS_HASBUTTONS,TVS_HASLINES、TVS_LINESATROOT Style,代码如下:

    DWORD dwStyle = GetWindowLong(m_tree.m_hWnd,GWL_STYLE);    dwStyle |= TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT;    SetWindowLong(m_tree.m_hWnd,GWL_STYLE,dwStyle);
2、为TreeCtrl添加Root项:
     m_hRoot = m_tree.InsertItem("我的电脑");     InsertItem()的函数原形为     HTREEITEM InsertItem( LPCTSTR lpszItem, HTREEITEM hParent = TVI_ROOT,      HTREEITEM hInsertAfter = TVI_LAST );     
3、获取本地逻辑驱动器,并添加:
    void CTreeViewDlg::GetLogicalDrives(HTREEITEM hParent)    {         size_t szAllDriveStrings = GetLogicalDriveStrings(0,NULL);char *pDriveStrings = new char[szAllDriveStrings + sizeof(_T(""))];GetLogicalDriveStrings(szAllDriveStrings,pDriveStrings);size_t szDriveString = strlen(pDriveStrings);while(szDriveString > 0){m_tree.InsertItem(pDriveStrings,hParent);pDriveStrings += szDriveString + 1;szDriveString = strlen(pDriveStrings);}    }      
4、添加TVN_EXPANDED消息处理函数,当一项展开时,为其子项添加下一级目录:
    void CTreeViewDlg::OnItemexpandedTree(NMHDR* pNMHDR, LRESULT* pResult)     {NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;// TODO: Add your control notification handler code hereTVITEM item = pNMTreeView->itemNew;if(item.hItem == m_hRoot)return;        HTREEITEM hChild = m_tree.GetChildItem(item.hItem);while(hChild){AddSubDir(hChild);hChild = m_tree.GetNextItem(hChild,TVGN_NEXT);}*pResult = 0;    }  
AddSubDir函数功能添加子项,具体代码见示例。

5、添加TVN_SELCHANGED消息处理函数,在这个函数里,用GetFullPath()取得选中项的绝 路径(GetFullPath()具体代码看示例),在ListCtrl中添加文件而非文件夹的图标:
    void CTreeViewDlg::OnSelchangedTree(NMHDR* pNMHDR, LRESULT* pResult)     {m_list.DeleteAllItems();NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;TVITEM item = pNMTreeView->itemNew;if(item.hItem == m_hRoot)return;CString str = GetFullPath(item.hItem);        if(str.Right(1) != "\")   str += "\";str += "*.*";CFileFind file;BOOL bContinue = file.FindFile(str);while(bContinue){bContinue = file.FindNextFile();if(!file.IsDirectory() && !file.IsDots()){    SHFILEINFO info;CString temp = str;int index = temp.Find("*.*");temp.Delete(index,3);    SHGetFileInfo(temp + file.GetFileName(),    0,    &info,sizeof(&info),    SHGFI_DISPLAYNAME | SHGFI_ICON);    int i = m_ImageList.Add(info.hIcon);    m_list.InsertItem(i,info.szDisplayName,i);}}*pResult = 0;    }    
    这只是一个简单的例子,你可以在 ListCtrl 中添加鼠标双击消息的处理函数,用 Process 打开该选中的文件; 该示例在VC6,xp下编译通过。
    VC初学者,如有不足之处,请来信指教(waysen01@st.lzu.edu.cn)。
展开更多 50%)
分享

猜你喜欢

VC控件TreeCtrl与ListCtrl演示

编程语言 网络编程
VC控件TreeCtrl与ListCtrl演示

VC控件 TreeCtrl 与 ListCtrl 演示

C语言教程 C语言函数
VC控件 TreeCtrl 与 ListCtrl 演示

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

VC使用CComboBox控件

编程语言 网络编程
VC使用CComboBox控件

VC通用控件编程之CSlider控件

编程语言 网络编程
VC通用控件编程之CSlider控件

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

VC程序中实现控件的动态生成与响应

编程语言 网络编程
VC程序中实现控件的动态生成与响应

VC增强Edit控件为日期输入控件

编程语言 网络编程
VC增强Edit控件为日期输入控件

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

网页中如何让整段文字左右对齐

网页中如何让整段文字左右对齐

全面剖析VB.NET(4)

全面剖析VB.NET(4)
下拉加载更多内容 ↓