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


#if !defined(AFX_DISKLISTCTRL_H__A1B4C7A9_A445_11D2_9363_0080C8E7F1DB__INCLUDED_) 
#define AFX_DISKLISTCTRL_H__A1B4C7A9_A445_11D2_9363_0080C8E7F1DB__INCLUDED_ 
 
#if _MSC_VER > 1000 
#pragma once 
#endif // _MSC_VER > 1000 
// DiskListCtrl.h : header file 
// 
#include  
 
#include "Common/DiBitmap.h" 
 
#define WM_DISKLIST_NOTIFY		WM_USER + 164 
#define WM_DISKLIST_UPDATE		WM_USER + 165 
 
///////////////////////////////////////////////////////////////////////////// 
// CDiskListCtrl window 
 
 
 
class CDiskListCtrl : public CWnd 
{ 
// Construction 
public: 
	CDiskListCtrl(); 
	 
	 
	typedef struct tagTHREADPARAMS 
	{ 
		char charPath[MAX_PATH]; 
		int nItemCode; 
		 
		int* pnThreadCode; 
		int* pnFileCount; 
		int* pnFolderCount; 
		long double* pldTotalSpace; 
		LPARAM lParam; 
	}THREADPARAMS; 
// Attributes 
public: 
	class CItemInfo; 
	typedef CTypedPtrArray CItemArray; 
		 
	CItemArray m_arrayFolder, m_arrayDrive; 
 
	CFont m_fontTitle; 
	CImageList m_imgTypeList; 
 
	BOOL m_bEnableBackground; 
	CDIBitmap m_bmpDriveBack, m_bmpFreeBack, m_bmpTotalBack,  
		m_bmpFolderBack, m_bmpHighBack, m_bmpPressedBack; 
 
	int m_nMouseInCode; //0-n buttons -1 - -6 title bar 
	int m_nMouseDownCode; 
	BOOL m_bMouseDown; 
 
	double m_dRedAlert; 
	double m_dYellowAlert; 
 
	int m_nNrThread; 
 
// Operations 
public: 
 
// Overrides 
	// ClassWizard generated virtual function overrides 
	//{{AFX_VIRTUAL(CDiskListCtrl) 
	public: 
	virtual BOOL Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext = NULL); 
	//}}AFX_VIRTUAL 
 
// Implementation 
public: 
	void EmptyFolderArray(); 
	void OnItemUpdate(WPARAM wParam, LPARAM lParam); 
	void UpdateAbortedFolders(); 
	void OnStartUpdate(int n); 
	void OnFinishedUpdate(int n); 
	void OnPause(); 
	void OnStopAll(); 
	int GetSize(); 
	static int CompareItemSize(const void* f1, const void* f2); 
	static int m_nSortCode; 
	void SortItems(int n); 
	void RedrawItem(int i); 
	int HitTestEx(CPoint pt); 
	void GetTotalUsage(int& nCount, long double& ldTotal, long double& ldFree); 
	void InitCtrl(); 
	void Update(BOOL bFolders = FALSE); 
	void DrawTotalItem(CDC *pDC, const CRect& rcClient); 
	void DrawDrive(CDC* pDC, const CRect& rcClient, int nItem); 
	void DrawFolder(CDC* pDC, const CRect& rcClient, int nItem); 
	int GetFolderSize(); 
	int GetDriveSize(); 
	int GetItemHeight(const CRect& rcClient, BOOL bTitle=FALSE); 
	void GetItemRect(const CRect &rcClient, CRect& rc, int nType, int nPos); 
	void DeleteAll(); 
	BOOL AddFolder(const CString& str); 
	BOOL AddDrive(const CString& str); 
	virtual ~CDiskListCtrl(); 
 
	// Generated message map functions 
protected: 
	//{{AFX_MSG(CDiskListCtrl) 
	afx_msg void OnPaint(); 
	afx_msg BOOL OnEraseBkgnd(CDC* pDC); 
	afx_msg BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message); 
	afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct); 
	afx_msg void OnMouseMove(UINT nFlags, CPoint point); 
	afx_msg void OnLButtonDown(UINT nFlags, CPoint point); 
	afx_msg void OnLButtonUp(UINT nFlags, CPoint point); 
	afx_msg void OnTimer(UINT nIDEvent); 
	//}}AFX_MSG 
	DECLARE_MESSAGE_MAP() 
}; 
 
class CDiskListCtrl::CItemInfo : public CObject 
{ 
public: 
	inline BOOL GetFinished(); 
	void StopThread(); 
	CDiskListCtrl* m_pCtrl; 
	static UINT ThreadFunc(LPVOID); 
	static void UpdateDir(THREADPARAMS* pThreadParams); 
 
	void UpdateFolder(int nItemCode); 
	double GetUsage(); 
	void Reset(); 
	BOOL Update(); 
	CItemInfo(CDiskListCtrl* pCtrl); 
	~CItemInfo(); 
 
	//BOOL	m_bIsDrive; 
	BOOL	m_bAvailable; 
	UINT	m_nDriveType; 
 
	CString m_strDriveName;		// Folder Name in folder mode 
	CString	m_strTitle;			// E.g. (C:) System  
	CString	m_strPartitionType; 
 
	int m_nFileCount; 
	int m_nFolderCount; 
	long double m_ldTotalSpace; 
	long double m_ldFreeSpace; 
 
	CWinThread* m_pThread; 
	int m_nThreadCode; // -1 terminat 0 pause 1 continue 
}; 
 
 
 
///////////////////////////////////////////////////////////////////////////// 
 
//{{AFX_INSERT_LOCATION}} 
// Microsoft Visual C++ will insert additional declarations immediately before the previous line. 
 
#endif // !defined(AFX_DISKLISTCTRL_H__A1B4C7A9_A445_11D2_9363_0080C8E7F1DB__INCLUDED_)