www.pudn.com > DiskInfo.tgz > DiskTreeCtrl.h


#if !defined(AFX_DISKTREECTRL_H__8C14512F_A6A3_11D2_936E_0080C8E7F1DB__INCLUDED_) 
#define AFX_DISKTREECTRL_H__8C14512F_A6A3_11D2_936E_0080C8E7F1DB__INCLUDED_ 
 
#if _MSC_VER > 1000 
#pragma once 
#endif // _MSC_VER > 1000 
// DiskTreeCtrl.h : header file 
// 
#include "SuperGridCtrl.h" 
#include "Common/FlatHeaderCtrl.h" 
 
///////////////////////////////////////////////////////////////////////////// 
// CDiskTreeCtrl window 
 
#define WM_USER_SCANPROGRESS WM_USER + 102 
 
#define SCAN_PROGRESS_SET_RANGE		1 
#define SCAN_PROGRESS_SET_POS		2 
#define SCAN_PROGRESS_FINISHED		3 
 
class CDiskTreeCtrl; 
class CTreeListPrinting 
{ 
public: 
	CTreeListPrinting();//Constructor 
	BOOL OnPreparePrinting(CPrintInfo* pInfo, CView * cview, CDiskTreeCtrl * t_lc);//Guess # of pages 
	void OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo, CString & t_title, CString & t_date); 
	void OnPrint(CDC* pDC, CPrintInfo* pInfo); 
	void OnEndPrinting(CDC* pDC, CPrintInfo* pInfo); 
	 
protected: 
	//vars 
	CDiskTreeCtrl * lc;//List Control Pointer 
	CString TitleStr; 
	CString DateStr; 
	 
	CFont * pOldFont;//Font stuff 
	CFont BoldFont; 
	CFont lcFont; 
	 
	CRect page_rc;//Scaling Vars 
	int m_nRowHeight; 
	int m_nRowsPerPage; 
	int m_nMaxRowCount; 
	int hc_items; 
	unsigned int m_ratiox;//These two are for scaling output to the printer 
	unsigned int m_ratioy; 
	 
	//Protected functions------ 
	void PrintHeaderControl(CDC *pDC, CPrintInfo *pInfo); 
	void PrintHeader(CDC *pDC, CPrintInfo *pInfo); 
	void PrintFooter(CDC *pDC, CPrintInfo *pInfo); 
	void DrawRow(CDC *pDC, int nItem); 
	void draw_line_at(CDC *pDC, unsigned int y); 
	void compute_metrics(CDC *pDC); 
}; 
 
class CDiskTreeCtrl : public CSuperGridCtrl 
{ 
	double m_dCurFileSize; 
 
	int DrawRow(CDC *pDC, const CRect& rc, int nItem); 
 
	CFlatHeaderCtrl m_wndFlatHeader; 
// Construction 
public: 
	CDiskTreeCtrl(); 
 
	CTreeListPrinting lpr; 
	int DrawLine(CDC* pDC, int nItem, const CRect& rc); // return Offset; 
 
	BOOL OnPreparePrinting(CPrintInfo* pInfo, CView * cview) 
		{return lpr.OnPreparePrinting(pInfo, cview, this);} 
	void OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo, CString & t_title, CString & t_date) 
		{lpr.OnBeginPrinting(pDC, pInfo, t_title, t_date);} 
	void OnPrint(CDC* pDC, CPrintInfo* pInfo) 
		{lpr.OnPrint(pDC, pInfo);} 
	void OnEndPrinting(CDC* pDC, CPrintInfo* pInfo) 
		{lpr.OnEndPrinting(pDC, pInfo);} 
 
 
// Attributes 
public: 
	CImageList m_imgList; 
	CMyFolder* m_pFolder; 
 
	typedef struct tagDISKTREETHREADPARAMS 
	{ 
		CDiskTreeCtrl* pTreeCtrl; 
		CMyFolder* pFolder; 
		CTreeItem* pTreeItem; 
 
		double*			pdFileSize; 
		double			dTotalUsed; 
		bool bIsFolder; 
		 
		CWnd* pWnd; 
		int* pnThreadCode; 
	}DISKTREETHREADPARAMS; 
 
	CWinThread* m_pThread; 
	int m_nThreadCode; 
 
// Operations 
public: 
 
	static UINT ThreadFunc(LPVOID); 
	static void UpdateDir(CMyFolder * pCurDir, const char * charPath,  
		long double & dFileSize, CDiskTreeCtrl* pTreeCtrl, 
		CDiskTreeCtrl::CTreeItem* pTreeItem, 
		int* pnThreadCode, CWnd* pWnd,  
		DISKTREETHREADPARAMS* pThreadParams, bool bIsFolder, bool bRootFolder=false); 
	static int nOldProgress; 
	static long double dTotalUsedSize; 
 
	CMyFolder* GetSelectedFolder(); 
 
// Overrides 
	// ClassWizard generated virtual function overrides 
	//{{AFX_VIRTUAL(CDiskTreeCtrl) 
	//}}AFX_VIRTUAL 
 
// Implementation 
public: 
	void BuildItemRow(CTreeItem* pItem, CTreeItem* pRoot); 
	void BuildTreeToHTML(); 
	void PrintTree(CDC* pDC, const CPoint& ptStart, const CSize& szSize, int nStart, int nEnd); 
	static int GetNrSubFolders(LPCTSTR strRoot, bool bSub=false); 
	CString GetSelectedPath(); 
	CString GetItemPath(CTreeItem* pItem); 
	static int CompareChildren(const void* p1, const void* p2); 
	static int m_nSortCol; 
	static BOOL m_bSortAscending; 
	void Sort(CTreeItem* pParent); 
	void Stop(); 
	int GetIcon(const CTreeItem* pItem); 
	CString GetCurrentFolder(); 
	void OnGetdispinfo(NMHDR* pNMHDR, LRESULT* pResult); 
	void DeleteAll(); 
	void ResizeColumns(BOOL bInit=FALSE); 
	void UpdateFolders(); 
	virtual ~CDiskTreeCtrl(); 
 
	afx_msg void OnColumnClick(NMHDR* pNMHDR, LRESULT* pResult); 
 
	// Generated message map functions 
protected: 
	//{{AFX_MSG(CDiskTreeCtrl) 
	afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct); 
	afx_msg void OnSize(UINT nType, int cx, int cy); 
	//}}AFX_MSG 
 
	DECLARE_MESSAGE_MAP() 
}; 
 
///////////////////////////////////////////////////////////////////////////// 
 
//{{AFX_INSERT_LOCATION}} 
// Microsoft Visual C++ will insert additional declarations immediately before the previous line. 
 
#endif // !defined(AFX_DISKTREECTRL_H__8C14512F_A6A3_11D2_936E_0080C8E7F1DB__INCLUDED_)