C++中,如何将树形控件添加到对话框中,让树形控件浏览本地磁盘

C++中,如何将树形控件添加到对话框中,让树形控件浏览本地磁盘,第1张

1.添加树形视图控件

2.用向导创建其成员变量CTreeCtrl

m_trdisktree

3.创建TVN_

SELCHANGED响应事件,Edit

Code键

4.代码如下

void

CDiskCataDlg::OnSelchangedTrdisktree(NMHDR*

pNMHDR,

LRESULT*

pResult)

{

NM_TREEVIEW*

pNMTreeView

=

(NM_TREEVIEW*)pNMHDR

CFileFind

filefd

HTREEITEM

parent

HTREEITEM

rootitem=m_trdisktree.GetSelectedItem()

if(m_trdisktree.GetChildItem(rootitem))return

parent=rootitem

CString

rootstr=m_trdisktree.GetItemText(rootitem)

CString

temp

CString

lstr

if(rootstr.Find("\\")==2)

{

lstr.Format("%s*.*",rootstr)

}

else

{

CString

strparent

while(1)

{

parent=m_trdisktree.GetParentItem(parent)

strparent=m_trdisktree.GetItemText(parent)

if(strparent.Find("\\")==2)

goto

end

temp+=strparent

temp+="\\"

}

end:

CString

root=m_trdisktree.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=imlst.Add(fileinfo.hIcon)

m_trdisktree.InsertItem(filefd.GetFileName(),imindex,imindex,rootitem)

}

}

*pResult

=

0

}

看完这段代码,就一定会啦

这类东东可以用2种方式解决

1,用假的树 ,就是 页面上用

<div>大类</div>

<ur>

<li>小类 </li>

<li>小类 </li>

<li>小类 </li>

</ur>

然后用Repeater去嵌套,2个Repeater嵌套出来,可以达到这个效果

2,用真正的树控件

这样子就好做了,只要绑定树就好了

比如:(列举个例子,我用的是ORM ,你可以换掉的)

#region 创建SubjectTreeView

/// <summary>

/// 绑定SubjectTreeView

/// </summary>

public void BangDTreeView()

{

//清楚原来节点

SubjectTreeView.Nodes.Clear()

List<ZhszSubjectEntity>subjectList = null

using (var adapter = new DataAccessAdapter())

{

LinqMetaData linq = new LinqMetaData(adapter)

var List = from subject in linq.ZhszSubject

orderby subject.FSort

select subject

subjectList = List.ToList<ZhszSubjectEntity>()

var depSubject = subjectList.Where(d =>d.FParentID == null).OrderBy(d =>d.FSort)

foreach (var item in depSubject)

{

TreeNode newNode = null

newNode = CreateNode(item.FName, item.FParentID.ToString(), "Folders.gif", true)

newNode.Name = item.FName

BindChildDepartmentTreeView(subjectList, (Guid)item.FID, newNode)

SubjectTreeView.Nodes.Add(newNode)

}

}

}

#endregion

#region 创建树节点

/// <summary>

/// 创建树节点

/// </summary>

/// <param name="treeName">名称</param>

/// <param name="tag">tag</param>

/// <param name="icon">图标</param>

/// <param name="expanded">是否展开</param>

/// <returns></returns>

public static TreeNode CreateNode(string treeName, string tag, string icon, bool expanded)

{

TreeNode node = new TreeNode()

node.Text = treeName

if (!string.IsNullOrEmpty(icon))

{

node.Image = new IconResourceHandle(icon)

}

node.Tag = tag

node.Name = tag

node.IsExpanded = expanded

return node

}

#endregion

#region 创建子节点

/// <summary>

/// 创建子节点

/// </summary>

/// <param name="SubjectList">集合</param>

/// <param name="FParentID">上级级id</param>

/// <param name="node"></param>

public static void BindChildDepartmentTreeView(List<ZhszSubjectEntity>SubjectList, Guid FParentID, TreeNode node)

{

TreeNode depChildNode

var depSubject = SubjectList.Where(d =>d.FParentID == FParentID).OrderBy(d =>d.FSort)

foreach (var depItem in depSubject)

{

depChildNode = CreateNode(depItem.FName, depItem.FParentID.ToString(), "sub.gif", false)

depChildNode.Name = depItem.FName

node.Nodes.Add(depChildNode)

}

}

#endregion

#region 树节点的点击事件

private void SubjectTreeView_AfterSelect(object sender, TreeViewEventArgs e)

{

if (e.Node.Tag.ToString() == "")

{

BangDGridView(null)

}

else

{

Guid fpid = new Guid(e.Node.Tag.ToString())

BangDGridView(fpid)

_Fpid = fpid

}

}

#endregion


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/11587230.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-17
下一篇2023-05-17

发表评论

登录后才能评论

评论列表(0条)

    保存