!!本章将展示一个简单的文件系统树形目录
1. 使用WIN32 API来检索系统的硬盘驱动并遍历文件系统:
1) 对于涉及硬盘、文件遍历的操作MFC并没有提供封装好的类,只能通过WIN32 API来进行;
2) 获取计算机的硬盘驱动列表:
i. DWORD ::GetLogicalDrive(VOID);
ii. 返回的硬盘驱动列表就保存在一个DWORD中,位0表示驱动器A是否存在,位1表示驱动器B是否存在,以此类推;
3) 由于驱动器也有类型,比如硬盘、移动设备、网络远程硬盘、光驱等,因此也需要判断驱动器的类型:
i. UINT ::GetDriveType(LPCTSTR lpRootPathName);
ii. lpRootPathName是驱动器的路径,形式必须是Windows风格的,例如:C:\,但是在源代码中要转义"C:\\"
iii. 返回值UINT以DRIVE_打头,分别表示不同类型的驱动:
DRIVE_UNKNOWN:表示类型未知(一般是因为驱动款式太新或者错误发生);
DRIVE_NO_ROOT_DIR:驱动器没有根目录(通常是因为没有格式化);
DRIVE_REMOVABLE:移动设备;
DRIVE_CDROM:光驱;
DRIVE_REMOTE:远程驱动器(网络驱动器);
// 我们平时用的硬盘都符合下面两项
DRIVE_FIXED:驱动器是固定的;
DRIVE_RAMDISK:RAM驱动器;
4) 遍历文件系统的WIN32 API之前讲过,使用WIN32_FIND_DATA结构和相关函数即可;
2. 从标题栏删除文档名称:
1) 本程序虽然使用文档/目录视图,但是并没有用到文档的功能,因此想从标题栏去掉默认的文档名称;
2) 方法:在CMainFrame::PreCreateWindow中包含语句cs.style &= ~FWS_ADDTOTITLE即可;
3) 该样式本来是默认包含在框架窗口样式中的,现在将其去掉即可;
3. DriveTree程序:
1) MainFrm的PreCreateWindow:
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
if( !CFrameWnd::PreCreateWindow(cs) )
return FALSE;
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
cs.style &= ~FWS_ADDTOTITLE; // 由于没有用到文档就要去掉文档标题的显示
return TRUE;
}
2) CDriveTreeView:
.h:
// DriveTreeView.h : interface of the CDriveTreeView class
//
/
#if !defined(AFX_DRIVETREEVIEW_H__0618D2ED_8AB2_4A32_8014_6ABAE176EC9A__INCLUDED_)
#define AFX_DRIVETREEVIEW_H__0618D2ED_8AB2_4A32_8014_6ABAE176EC9A__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
class CDriveTreeView : public CTreeView
{
protected: // create from serialization only
CDriveTreeView();
DECLARE_DYNCREATE(CDriveTreeView)
// Attributes
public:
CDriveTreeDoc* GetDocument();
// Operations
public:
// Overrides
// ClassWizard generated virtual function overrides
//{
{AFX_VIRTUAL(CDriveTreeView)
public:
virtual void OnDraw(CDC* pDC); // overridden to draw this view
virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
protected:
virtual void OnInitialUpdate(); // called first time after construct
//}}AFX_VIRTUAL
// Implementation
public:
virtual ~CDriveTreeView();
#ifdef _DEBUG
virtual