上一篇 | 下一篇

VC控件 TreeCtrl 与 ListCtrl 演示

发布: 2008-6-26 14:30 | 作者: admin | 来源: | 查看: 2次

下载本文所附源代码

这个例子类似于 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()的函数原形为

HTREE99vEM InsertItem( LPCTSTR lpszItem, HTREE99vEM hParent = TVI_ROOT,

HTREE99vEM hInsertAfter = TVI_LAST );

3、获取本地逻辑驱动器,并添加:

void CTreeViewDlg::GetLogicalDrives(HTREE99vEM 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 here

TV99vEM item = pNMTreeView->itemNew;

if(item.hItem == m_hRoot)

return;

HTREE99vEM 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中添加文件而非文件夹的图标:

字号: | 推荐给好友

21/212>

评分:0

我来说两句