VC6向导生成资源管理器界面 收藏
一、框架生成
打开VC6,新建一个 MFC AppWizard(exe) 工程;
1 在向导第一步中选择应用程序类型是"单文档",确保,在"文档/查看体系结构支持"检查框中打上对勾;
2 在向导第二步中根据实际情况选择是否支持数据库,我这里选择不支持数据库;
3 在向导第三步中选择不需要复合文档支持;也不需要复合文件支持;
4 在向导第四步中默认即可;
5 在向导第五步中选择风格是"Windows 资源管理器样式";
6 在向导第六步中对你的选择做一下确认,可以看到左边视图的基类是CTreeView,应用程序视图的基类是CListView;
点击确定即可完成,点击运行按钮就可看到效果.
二、初始化树形视图
1 修改LeftView.h
在类的声明之前包含右视图的头文件,声明类的保护成员 CGldogView* m_listView以便通过tree事件对右视图进行通信; 声明类的保护成员CImageList ImgTree对树的图标进行操作;
#include "usbdogview.h"
class CLeftView : public CTreeView
2 打开LeftView.c 在树形视图中添加树根、树枝和树叶;
void CLeftView::OnInitialUpdate()
{
CTreeView::OnInitialUpdate();
ImgTree.Create (16,16,ILC_COLOR|ILC_MASK,3,3);//创建图标列表
ImgTree.Add (AfxGetApp()->LoadIcon (IDR_MAINFRAME));
ImgTree.Add (AfxGetApp()->LoadIcon (IDI_dir));
CTreeCtrl& CtlTree=(CTreeCtrl&)GetTreeCtrl ();
CtlTree.SetBkColor (RGB(210,230,190));
CtlTree.SetImageList (&ImgTree,TVSIL_NORMAL);
int i=0;
TV_INSERTSTRUCT tvRoot;//树根
TV_INSERTSTRUCT tvSecond;//树枝
TV_INSERTSTRUCT tvThree;//树叶
tvRoot.hParent=NULL;
tvRoot.item.pszText="系统管理";
tvRoot.item.mask=TVIF_TEXT|TVIF_IMAGE|TVIF_SELECTEDIMAGE;
tvRoot.item.iImage=i;
tvRoot.item.iSelectedImage=i;
HTREEITEM item_root=CtlTree.InsertItem (&tvRoot);
int ii;
CString strSecond[2]={"2F00","3F00"};
CString strThree[2][3]={{"0001","0002","0003"},{"001","002"}};
for(i=0;i<2;i++)
{
tvSecond.hParent=item_root;
tvSecond.item.pszText=(LPTSTR)(LPCTSTR)strSecond[i];
tvSecond.item.mask=TVIF_TEXT|TVIF_IMAGE|TVIF_SELECTEDIMAGE;
tvSecond.item.iImage=1;
tvSecond.item.iSelectedImage=2;
HTREEITEM item_second=CtlTree.InsertItem (&tvSecond);
switch(i)
{
case 0:
ii=3;
break;
case 1:
ii=2;
break;
default:
break;
}
for(int j=0;j<ii;j++)
{tvThree.hParent=item_second;
tvThree.item.pszText=(LPTSTR)(LPCTSTR)strThree[i][j];
tvThree.item.mask=TVIF_TEXT|TVIF_IMAGE|TVIF_SELECTEDIMAGE;
tvThree.item.iImage=1;
tvThree.item.iSelectedImage=2;
CtlTree.InsertItem (&tvThree);
}
}
//设置列表视图的风格
CtlTree.Expand(item_root,TVE_EXPAND);
DWORD dwStyle=GetWindowLong(CtlTree.m_hWnd ,GWL_STYLE);
dwStyle|=TVS_HASBUTTONS|TVS_HASLINES|TVS_LINESATROOT;
::SetWindowLong (CtlTree.m_hWnd ,GWL_STYLE,dwStyle);
}
三、初始化列表视图
打开应用程序视图文件修改OnInitialUpdate()函数如下:
CListView::OnInitialUpdate();
CListCtrl &listCtrl=(CListCtrl&)GetListCtrl();
listCtrl.ModifyStyle (0,LVS_REPORT);
listCtrl.ModifyStyle (LVS_EDITLABELS,0);//禁止修改列标题
listCtrl.SetExtendedStyle (LVS_EX_FULLROWSELECT|LVS_EX_ONECLICKACTIVATE|LVS_EX_INFOTIP|LVS_EX_SUBITEMIMAGES|LVS_EX_GRIDLINES);
listCtrl.InsertColumn (0,"文件ID",LVCFMT_LEFT,50);
listCtrl.InsertColumn (1,"操作权限",LVCFMT_LEFT,100);
listCtrl.InsertColumn (2,"占用空间(字节)",LVCFMT_LEFT,100);
listCtrl.InsertColumn (3,"已用空间(字节)",LVCFMT_LEFT,100);
listCtrl.InsertColumn (4,"空闲空间(字节)",LVCFMT_LEFT,100);
listCtrl.InsertColumn (5,"创建时间",LVCFMT_LEFT,100);
listCtrl.InsertColumn (6,"最近更新时间",LVCFMT_LEFT,100);
listCtrl.InsertColumn (7,"创建者",LVCFMT_LEFT,100);
效果如下图所示:
四、树视图与列表视图的通信
1、在右边的列表视图中添加处理左视图数据的公用方法void recievedata(CString strInfo);
2、recievedata函数的实现
void CUsbdogView::recievedata(CString strInfo)
{
CListCtrl &listCtrl=(CListCtrl&)GetListCtrl();
if(strInfo=="0001")
{ listCtrl.DeleteAllItems ();
listCtrl.InsertItem(0,"0001");
listCtrl.SetItemText(0,1,"r/w/d");
listCtrl.SetItemText(0,2,"300");
listCtrl.SetItemText(0,3,"200");
listCtrl.SetItemText(0,4,"100");
listCtrl.SetItemText(0,5,"2008.08.08 010302");
listCtrl.SetItemText(0,6,"2008.08.09 231105");
listCtrl.SetItemText(0,7,"jiadelin");
}
this->Invalidate (FALSE);
}
3、在树视图中建立消息映射并调用列表视图的recievedata方法实现通信
4、实现OnSelchanged方法
void CLeftView::OnSelchanged(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
// TODO: Add your control notification handler code here
CTreeCtrl& CtlTree=(CTreeCtrl&)GetTreeCtrl ();
HTREEITEM select_item=CtlTree.GetSelectedItem ();
CString str=CtlTree.GetItemText (select_item);
CSplitterWnd* m_wndSplitter=(CSplitterWnd*)GetParent();
m_listView=(CUsbdogView*)m_wndSplitter->GetPane (0,1);
m_listView->recievedata(str);
*pResult = 0;
}
全文完.
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/jiadelin/archive/2008/08/20/2799336.aspx