[MFC]DriveTree应用:CTreeView的示例

本博客介绍如何在MFC中创建一个显示文件系统树形目录的应用,通过WIN32 API获取硬盘驱动列表,判断驱动器类型,并遍历文件系统。同时,讨论了如何从标题栏移除文档名称,提供了DriveTree程序的实现细节,包括CMainFrame::PreCreateWindow中的关键代码调整。
摘要由CSDN通过智能技术生成

!!本章将展示一个简单的文件系统树形目录


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 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值