我建立了一个单文档应用程序,想遍历本地磁盘所有文件夹。建立了一个CEx_Tree类,基类是CTreeView。编译什么的都通过了,执行的时候菜单上什么都不显示是咋回事?BOOL CEx_TreeView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
//  the CREATESTRUCT cs
cs.style |= TVS_HASLINES|TVS_LINESATROOT|TVS_HASBUTTONS;
return CTreeView::PreCreateWindow(cs);
}
void CEx_TreeView::OnInitialUpdate()
{
CTreeView::OnInitialUpdate();
CTreeCtrl& treeCtrl = GetTreeCtrl();
m_ImageList.Create(16,16,ILC_COLOR8|ILC_MASK,2,1);
treeCtrl.SetImageList(&m_ImageList,TVSIL_NORMAL); CString strPath;
GetWindowsDirectory((LPTSTR)(LPCTSTR)strPath,MAX_PATH+1); SHFILEINFO fi;
SHGetFileInfo(strPath,0,&fi,sizeof(SHFILEINFO),SHGFI_ICON|SHGFI_SMALLICON);
m_ImageList.Add(fi.hIcon);
SHGetFileInfo(strPath,0,&fi,sizeof(SHFILEINFO),SHGFI_ICON|SHGFI_SMALLICON||SHGFI_OPENICON);
m_ImageList.Add(fi.hIcon); CString str;
for(int i= 0;i<32;i++)
{
str.Format("%c:\\",'A'+i);
SHGetFileInfo(strPath,0,&fi,sizeof(SHFILEINFO),SHGFI_ICON|SHGFI_SMALLICON||SHGFI_DISPLAYNAME);
if(fi.hIcon)
{
int nImage = m_ImageList.Add(fi.hIcon);
HTREEITEM hItem = treeCtrl.InsertItem(fi.szDisplayName,nImage,nImage);
treeCtrl.SetItemData(hItem,(DWORD)('A'+i));
}
} // TODO: You may populate your TreeView with items by directly accessing
//  its tree control through a call to GetTreeCtrl().
}void CEx_TreeView::InsertFoldItem(HTREEITEM hItem, CString strPath)
{
CTreeCtrl& treeCtrl = GetTreeCtrl();
if(treeCtrl.ItemHasChildren(hItem)) return;
CFileFind finder;
BOOL bWorking = finder.FindFile(strPath);
while(bWorking)
{
bWorking = finder.FindNextFile();
if(finder.IsDirectory()&&!finder.IsHidden()&&!finder.IsDots())
treeCtrl.InsertItem(finder.GetFileTitle(),0,1,hItem,TVI_SORT);
}
}CString CEx_TreeView::GetFoldItemPath(HTREEITEM hItem)
{
CString strPath,str;
strPath.Empty();
CTreeCtrl& treeCtrl = GetTreeCtrl();
HTREEITEM folderItem = hItem;
while(folderItem)
{
int data = (int)treeCtrl.GetItemData(folderItem);
if(data == 0)
{
str = treeCtrl.GetItemText(folderItem);
}
else
str.Format("%c:\\",data); strPath = str + "\\" + strPath;
folderItem = treeCtrl.GetParentItem(folderItem);
}
strPath = strPath + "*.*";
return strPath;
}void CEx_TreeView::OnSelchanged(NMHDR* pNMHDR, LRESULT* pResult) 
{
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
// TODO: Add your control notification handler code here
HTREEITEM hSelItem = pNMTreeView->itemNew.hItem;
CTreeCtrl& treeCtrl = GetTreeCtrl();
CString strPath= GetFoldItemPath(hSelItem);
if(!strPath.IsEmpty())
{
InsertFoldItem(hSelItem,strPath);
treeCtrl.Expand(hSelItem,TVE_EXPAND);
}
*pResult = 0;
}
这是某本书上一个例子,我想仿一下。