?? foldertree.cpp
字號:
// FolderTree.cpp : implementation file
//
#include "stdafx.h"
#include "MyFolder.h"
#include "FolderTree.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CFolderTree
CFolderTree::CFolderTree()
{
}
CFolderTree::~CFolderTree()
{
}
BEGIN_MESSAGE_MAP(CFolderTree, CTreeCtrl)
//{{AFX_MSG_MAP(CFolderTree)
// NOTE - the ClassWizard will add and remove mapping macros here.
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CFolderTree message handlers
void CFolderTree::FillItem(CFolder* pFolder, HTREEITEM hParentItem, BOOL bExpand/*=FALSE*/)
{
if(!pFolder)//填充結點函數
return;//pFolder為空則返回
CString strFolderName;//定義文件夾名稱變量
TV_INSERTSTRUCT TreeCtrlItem;//定義TreeCtrlItem
if (hParentItem == NULL)//如果父親結點為空
{
TreeCtrlItem.hParent = TVI_ROOT;//定義為根結點
}
else
{
TreeCtrlItem.hParent = hParentItem;//否則定義為父親結點
}
TreeCtrlItem.hInsertAfter = TVI_LAST;//最后插入結點
TreeCtrlItem.item.mask = TVIF_TEXT | TVIF_IMAGE | TVIF_PARAM | TVIF_SELECTEDIMAGE;
//激活上述iImage,iSelectedImage,lParam屬性
strFolderName = pFolder->GetFolderName();//獲取文件夾名(GetFolderName為已定義函數)
TreeCtrlItem.item.pszText = strFolderName.GetBuffer(strFolderName.GetLength());//得到文件名
strFolderName.ReleaseBuffer();//釋放GetBuffer
if(hParentItem == TVI_ROOT)//如果父親結點為根結點
{
TreeCtrlItem.item.iImage = 3;//選取一個新建文件圖象(3為“工程”圖象)
TreeCtrlItem.item.iSelectedImage = 3;//選中該節點時的圖象
}
else//如果父親結點不為根結點
{
TreeCtrlItem.item.iImage = 0;//選取一個新建文件圖象(0為“文件夾”圖象)
TreeCtrlItem.item.iSelectedImage = 1;3;//選中該節點時的圖象(1為“打開的文件夾”圖象)
}
TreeCtrlItem.item.lParam = (LPARAM)pFolder;
hParentItem = InsertItem(&TreeCtrlItem);//插入結點
CString strFullFileName;//定義“全文件名”變量
CString strFileName;//定義“文件名”變量
int nCount = 0;//定義nCount
int nIndex = pFolder->m_FileNameArray.GetSize();//獲取文件列表大小
HTREEITEM htChildItem;//定義“子結點”變量
while(nIndex--)//對文件列表所有文件進行操作
{
strFullFileName = pFolder->m_FileNameArray.GetAt(nIndex);//獲取文件路徑
nCount = strFullFileName.GetLength() - strFullFileName.ReverseFind('\\')-1;//計算文件名字符數
strFileName = strFullFileName.Right(nCount);//獲取文件名
TreeCtrlItem.hParent = hParentItem;//定義為父親結點
TreeCtrlItem.item.pszText = strFileName.GetBuffer(strFileName.GetLength());//獲取結點文件名
strFullFileName.ReleaseBuffer();//釋放GetBuffer
TreeCtrlItem.item.iImage = 2;0;//選取一個文件圖象(2為“文件”圖象)
TreeCtrlItem.item.iSelectedImage = 2;//選中該節點時的圖象(2為“文件”圖象)
TreeCtrlItem.item.lParam = (LPARAM)pFolder;
htChildItem = InsertItem(&TreeCtrlItem);//插入結點
}
POSITION pos = pFolder->m_FolderList.GetHeadPosition();//獲得子文件夾列表位置的第一個元素
while (pos != NULL)//如果不是空的
{
pFolder = (CFolder*)pFolder->m_FolderList.GetNext(pos);//指向下一個元素
FillItem(pFolder, hParentItem);//遞歸調用FillItem函數,填充文件
}
if(bExpand)
Expand(hParentItem, TVE_EXPAND);//擴充子結點列表
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -