资源描述:
《vc控件 treectrl 与 listctrl 演示》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、VC控件 TreeCtrl 与 ListCtrl 演示程序运行效果截图:这个例子类似于Windows的资源管理器,程序运行界面如图一所示:主要用到的类有:CListCtrl,CTreeCtrl,CImageList,CFileFind和函数SHGetFileInfo()简述步骤如下:1、增加TreeCtrl的TVS_HASBUTTONS,TVS_HASLINES、TVS_LINESATROOTStyle,代码如下:DWORDdwStyle=GetWindowLong(m_tree.m_hWnd,GWL_STYLE);dwStyle
2、=TVS_HASBUTTONS
3、TVS_HASLINES
4、
5、TVS_LINESATROOT;SetWindowLong(m_tree.m_hWnd,GWL_STYLE,dwStyle);2、为TreeCtrl添加Root项:m_hRoot=m_tree.InsertItem("我的电脑");InsertItem()的函数原形为HTREEITEMInsertItem(LPCTSTRlpszItem,HTREEITEMhParent=TVI_ROOT,HTREEITEMhInsertAfter=TVI_LAST);3、获取本地逻辑驱动器,并添加:voidCTreeViewDlg::GetLogicalDrives(HTREEITEMhParent){s
6、ize_tszAllDriveStrings=GetLogicalDriveStrings(0,NULL);char*pDriveStrings=newchar[szAllDriveStrings+sizeof(_T(""))];GetLogicalDriveStrings(szAllDriveStrings,pDriveStrings);size_tszDriveString=strlen(pDriveStrings);while(szDriveString>0){m_tree.InsertItem(pDriveStrings,hParent);pDriveStrings+=szDriv
7、eString+1;szDriveString=strlen(pDriveStrings);}}4、添加TVN_EXPANDED消息处理函数,当一项展开时,为其子项添加下一级目录:voidCTreeViewDlg::OnItemexpandedTree(NMHDR*pNMHDR,LRESULT*pResult){NM_TREEVIEW*pNMTreeView=(NM_TREEVIEW*)pNMHDR;//TODO:AddyourcontrolnotificationhandlercodehereTVITEMitem=pNMTreeView->itemNew;if(item.hItem==m
8、_hRoot)return;HTREEITEMhChild=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中添加文件而非文件夹的图标:voidCTreeViewDlg::On
9、SelchangedTree(NMHDR*pNMHDR,LRESULT*pResult){m_list.DeleteAllItems();NM_TREEVIEW*pNMTreeView=(NM_TREEVIEW*)pNMHDR;TVITEMitem=pNMTreeView->itemNew;if(item.hItem==m_hRoot)return;CStringstr=GetFullPath(item.hItem);if(str.Right(1)!="\")str+="\";str+="*.*";CFileFindfile;BOOLbContinue=file.FindFile(st
10、r);while(bContinue){bContinue=file.FindNextFile();if(!file.IsDirectory()&&!file.IsDots()){SHFILEINFOinfo;CStringtemp=str;intindex=temp.Find("*.*");temp.Delete(index,3);SHGetFileInfo(temp+file.GetFileName(),0,&inf