工控编程吧
标题:
87上位机VC MFC树状视图浏览全部磁盘文件
[打印本页]
作者:
qq263946146
时间:
2015-12-14 21:12
标题:
87上位机VC MFC树状视图浏览全部磁盘文件
(, 下载次数: 4)
上传
点击文件名下载附件
87上位机VC MFC树状视图浏览全部磁盘文件
功能展示
用树状视图控件显示浏览我们电脑上有全部有效目录与文件的功能在开发上位机时也是时有发生的事,我们当前就实现了树状视图浏览全部磁盘文件的功能,效果如图
要点提示
我们例程使用GetLogicalDriveStrings(alldriver,driverstr)获得当前电脑全部磁盘盘符,保存在driverstr中,形式为C:\\ D:\\ E:\\;alldriver为全部盘符的总字节数由此形式获得alldriver=::GetLogicalDriveStrings(0,NULL);
另外我们处理每个节点展开前触发的消息LVN_SELECHANGED,此函数在用户选择树状结构中节点,展开子项时触发;
实现功能
1.新建基于对话框的应用程序
2.添加树状视图控件,关联变量CTreeCtrl m_Tree;再添加 CImageList m_ImageList;用于设置树状视图的图标;并进行两变量的初始化m_ImageList.Create(16,16,ILC_COLOR32|ILC_MASK,0,0);//初始化图片列表
m_Tree.SetImageList(&m_ImageList,TVSIL_NORMAL);
m_Tree.ModifyStyle(0L,TVS_HASLINES|TVS_LINESATROOT);//树状视图设置属性
3.添加一按钮控件,关联函数,实现当前电脑全部有效磁盘盘符的加载
void CGkbc8Dlg::OnAdd()
{
size_t alldriver=::GetLogicalDriveStrings(0,NULL);//全部驱动总字节数
_TCHAR *driverstr;
driverstr=new _TCHAR[alldriver+sizeof(_T(""))];
if(GetLogicalDriveStrings(alldriver,driverstr)!=alldriver-1)//获得全部驱动
return ;
m_Tree.DeleteAllItems();//删除全部节点
_TCHAR *pdriverstr=driverstr;
size_t driversize=strlen(pdriverstr);
HTREEITEM disktree;
SHFILEINFO fileinfo;
int imindex;
while(driversize>0)
{SHGetFileInfo(pdriverstr,0,&fileinfo,sizeof(fileinfo),SHGFI_ICON); imindex=m_ImageList.Add(fileinfo.hIcon);
disktree=m_Tree.InsertItem(pdriverstr,imindex,imindex,TVI_ROOT,TVI_LAST);//添加盘符为根节点
pdriverstr+=driversize+1; driversize=strlen(pdriverstr);
}
}
复制代码
4.添加m_Tree 的LVN_SELECHANGED的消息响应函数
void CGkbc8Dlg::OnSelchangedTree1(NMHDR* pNMHDR, LRESULT* pResult)
{//每个节点发生变化时加载此函数
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
HTREEITEM rootitem=m_Tree.GetSelectedItem();
if(m_Tree.GetChildItem(rootitem))//节已加载过则返回
return;
CFileFind filefd;
HTREEITEM parent;
SHFILEINFO fileinfo;
int imindex;
parent=rootitem;
CString rootstr=m_Tree.GetItemText(rootitem);
CString temp;
CString lstr;
if(rootstr.Find("\")==2)
{
lstr.Format("%s*.*",rootstr);
}
else
{
CString strparent;
while(1)
{
parent=m_Tree.GetParentItem(parent);
strparent=m_Tree.GetItemText(parent);
if(strparent.Find("\")==2)
goto end;
temp+=strparent;
temp+="\";
}
end:
CString root=m_Tree.GetItemText(parent);
lstr.Format("%s%s%s\\*.*",root,temp,rootstr);
}
复制代码
BOOL bfinded=filefd.FindFile(lstr);
while(bfinded)
{
bfinded=filefd.FindNextFile();
CString filepath;
if(filefd.IsDirectory()&&!filefd.IsDots()){
SHGetFileInfo(filefd.GetFilePath(),0,&fileinfo,sizeof(fileinfo), SHGFI_ICON);
imindex=m_ImageList.Add(fileinfo.hIcon);
m_Tree.InsertItem(filefd.GetFileName(),imindex,imindex,rootitem);
}
}
*pResult = 0;
}
<div style="text-align: center;"><b style="line-height: 1.5;"><font size="4">我们来演示下功能实现的整个过程</font></b></div>
复制代码
[iqiyi]http://player.video.qiyi.com/24b6eb438012d1dde860f3c31b0ba75a/0/0/w_19rt6jzth1.swf-albumId=5021875609-tvId=5021875609-isPurchase=0-cnId=12[/iqiyi]
(, 下载次数: 0)
上传
点击文件名下载附件
[note]1[/note]
欢迎光临 工控编程吧 (https://www.gkbc8.com/)
Powered by Discuz! X3.4