⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 driveview.cpp

📁 c++系统开发实例精粹内附的80例源代码 环境:windows2000,c++6.0
💻 CPP
📖 第 1 页 / 共 2 页
字号:


/****************************************************
	The followinf Member Functions were copied from
	an article by Jeff Prosise available on the
	MSDN CD.

  1) AddDrives
  2) AddDirectoryNodes
  3) AddDumyNodes
  4) DeleteChildren
  5) GetDriveNode
  6) GetPathFromItem
  7) HasSubDirectory
  8) InitTree
  9) IsDriveNode
 10) IsMediaValid
 11) SetButtonState

*****************************************************/



// DriveView.cpp : implementation file
//

#include "stdafx.h"
#include "MultiDrives.h"
#include "DriveView.h"

#include "MultiDrivesDoc.h"
#include "MultiDrivesView.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

//#define ICO_CLSDFLD       0
//#define ICO_OPENFLD       1
//#define ICO_GENERALFILE   2
//#define ICO_DRIVE         3
//#define ICO_CDDRV         4

/////////////////////////////////////////////////////////////////////////////
// CDriveView

IMPLEMENT_DYNCREATE(CDriveView, CView)

CDriveView::CDriveView()
{
		bControlsCreated = FALSE;
		DeviceName = "";
}

CDriveView::~CDriveView()
{
}


BEGIN_MESSAGE_MAP(CDriveView, CView)
	//{{AFX_MSG_MAP(CDriveView)
	ON_WM_DESTROY()
	ON_WM_SIZE()
	ON_WM_CREATE()

	ON_NOTIFY(TVN_ITEMEXPANDING, ID_TREECTRL, OnItemexpanding)
	ON_NOTIFY(TVN_SELCHANGING, ID_TREECTRL, OnSelchanging)

	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CDriveView drawing

void CDriveView::OnDraw(CDC* pDC)
{
	CDocument* pDoc = GetDocument();
	// TODO: add draw code here
}

/////////////////////////////////////////////////////////////////////////////
// CDriveView diagnostics

#ifdef _DEBUG
void CDriveView::AssertValid() const
{
	CView::AssertValid();
}

void CDriveView::Dump(CDumpContext& dc) const
{
	CView::Dump(dc);
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CDriveView message handlers

void CDriveView::OnDestroy() 
{
	CView::OnDestroy();
	
	// TODO: Add your message handler code here

	m_FlatButton.DestroyWindow();
	m_ImageHolder->DestroyWindow();
	m_DriveLetter->DestroyWindow();
	CStatusBarCtrl* sb = (CStatusBarCtrl*)FromHandle(hwndStatusBar);
	sb->DestroyWindow();
	m_TreeCtrl.DestroyWindow();


}


void CDriveView::OnInitialUpdate() 
{
	CView::OnInitialUpdate();
	
	// TODO: Add your specialized code here and/or call the base class
}

void CDriveView::CreateImageList()
{
	
	
	m_TreeCtrl.SetImageList(NULL, 0);
	m_img.Create(16, 16, ILC_COLOR8 | ILC_MASK,  9, 9);

}

void CDriveView::OnSize(UINT nType, int cx, int cy) 
{
	CView::OnSize(nType, cx, cy);
	
	// TODO: Add your message handler code here

	if(	bControlsCreated )
	{
		int BORDER = 20;
		m_FlatButton.MoveWindow(-1,0,cx+2,20);

		m_ImageHolder->MoveWindow(5,2,15,15);
		m_DriveLetter->MoveWindow(25,2,cx-25,16);	
		m_TreeCtrl.MoveWindow(0,BORDER,cx, cy-(BORDER*2)-2);
		CStatusBarCtrl* sb = (CStatusBarCtrl*)FromHandle(hwndStatusBar);
		sb->MoveWindow(0,cy-BORDER,cx,BORDER);
		int strPartDim[2]= {cx/2, -1};
		sb->SetParts(2, strPartDim);

	}

}

int CDriveView::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
	if (CView::OnCreate(lpCreateStruct) == -1)
		return -1;
	
	// TODO: Add your specialized creation code here

//	m_TreeCtrl = new CTreeCtrl;
	m_TreeCtrl.Create(WS_CHILD|
		               WS_VISIBLE|
		               TVS_HASLINES|
		               TVS_LINESATROOT|
					   TVS_HASBUTTONS, 
					   CRect(0,0,0,0), 
					   this , 
					   ID_TREECTRL);

	CreateImageList();

	m_FlatButton.Create("", WS_CHILD |
		                    WS_VISIBLE|
							WS_DISABLED|
							BS_PUSHBUTTON,
							CRect(0,0,0,0),
							this,
							0);


	m_ImageHolder = new CStatic;
	m_ImageHolder->Create("", 
		                  SS_ICON|
		                  WS_CHILD|
						  WS_VISIBLE,
						  CRect(0,0,0,0), 
						  this, 
						  0xffff);

	m_DriveLetter = new CStatic;
	m_DriveLetter->Create("",
		                  WS_CHILD|WS_VISIBLE|SS_LEFT,
						  CRect(0,0,0,0),
						  this,
						  0xffff);

   LOGFONT lf;
   memset(&lf, 0, sizeof(LOGFONT));   // Clear out structure.
   lf.lfHeight = 12;                  // Request a 20-pixel-high font
   strcpy(lf.lfFaceName, "MS SANS SERIF");    //    with face name "Arial".
   m_font.CreateFontIndirect(&lf);    // Create the font.

   // Use the font to paint a control. This code assumes
   // a control named IDC_TEXT1 in the dialog box.
   m_DriveLetter->SetFont(&m_font);


    hwndStatusBar = CreateWindowEx( 
            0L,                                 // no extended styles
            STATUSCLASSNAME,                    // status bar
            "",                                 // no text 
            SBARS_SIZEGRIP | WS_CHILD | WS_BORDER | WS_VISIBLE | TBSTYLE_FLAT,  // styles
            0,0,0,0,                            // x, y, cx, cy
            this->m_hWnd ,                      // parent window
            (HMENU)0,                           // window ID
            NULL,                               // instance
            NULL);      

	bControlsCreated = TRUE;

	return 0;
}


CString CDriveView::GetPathFromItem(HTREEITEM hItem)
{


    CString strPathName, string;
    while (hItem != NULL) 
	{
		if(hItem == m_drives_root)
		{
			string = m_TreeCtrl.GetItemText(hItem);
			string = string.Mid(string.Find('(', 0)+1,2) + _T("\\");
		}
		else
		{
			string = m_TreeCtrl.GetItemText (hItem);
	        if ((string.Right (1) != "\\") && !strPathName.IsEmpty ())
				string += "\\";
		}
		strPathName = string + strPathName;
        hItem = m_TreeCtrl.GetParentItem (hItem);
    }
	

	return strPathName;

}


void CDriveView::OnItemexpanding(NMHDR* pNMHDR, LRESULT* pResult) 
{

	NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
	TV_ITEM itm= pNMTreeView->itemNew;
	HTREEITEM hItem = pNMTreeView->itemNew.hItem;

	SetStatusText(m_TreeCtrl.GetItemText(hItem));
//	if (itm.state & TVIS_EXPANDED)
		if((hItem == m_drives_root)) // && itm.state & TVIS_EXPANDED);
		{
			CString strPathName = m_TreeCtrl.GetItemText(hItem);
			strPathName = strPathName.Mid(strPathName.Find('(', 0)+1,2) + _T("\\");
			ExpandBranch(itm.hItem, strPathName);
		}
		else
		{
			CString strPathName;
			strPathName = GetPathFromItem(hItem) + _T("\\");
			ExpandBranch(itm.hItem, strPathName);
		}
//	else
//	{
//		DeleteAllChild(itm.hItem);
//	}
	
	*pResult = 0;
	return;

}

void CDriveView::OnSelchanging(NMHDR* pNMHDR, LRESULT* pResult) 
{

	NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
	HTREEITEM hItem = pNMTreeView->itemNew.hItem;
	SetStatusText(m_TreeCtrl.GetItemText(hItem));

//	CString cItemText = m_TreeCtrl->GetItemText(hItem);

//    CString strPathName = GetPathFromItem (hItem);
//	*pResult = FALSE;

// 	CWaitCursor wait;

//    if (!AddDirectoryNodes (hItem, strPathName))
//       *pResult = TRUE;

//	SetStatusText(cItemText);	
//	*pResult = 0;

}



void CDriveView::SetStatusText(CString strPathName)
{
	CStatusBarCtrl* sb = (CStatusBarCtrl*)FromHandle(hwndStatusBar);
	sb->SetText(strPathName, 0, 0);
}

void CDriveView::InitializeView(CString strDrive, UINT nType)
{
	m_drives_root = AddItem(strDrive, NULL, TRUE, -1, -1 );
	m_DriveLetter->SetWindowText(DeviceName);
	m_ImageHolder->SetIcon(m_img.ExtractIcon(0));
}

BOOL CDriveView::PreCreateWindow(CREATESTRUCT& cs) 
{
	// TODO: Add your specialized code here and/or call the base class
	
	return CView::PreCreateWindow(cs);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -