www.pudn.com > ExtListctrl_new000.rar > ExtListCtrl.h


#ifndef __EXTLISTCTRL_H__ 
#define __EXTLISTCTRL_H__ 
 
#if _MSC_VER > 1000 
#pragma once 
#endif // _MSC_VER > 1000 
// ExtListCtrl.h : header file 
 
#include "Ext.h" 
#include "ExtHeaderCtrl.h" 
#include  
 
///////////////////////////////////////////////////////////////////////////// 
// CExtListCtrl window 
 
enum COLUMNTYPE{ 
	CJ_NORMAL = 0, // 
	CJ_COMBO       // 
}; 
 
enum ListCompareType {   
	ELCT_INTEGER = 0, 
    ELCT_DOUBLE, 
    ELCT_STRING_CASE, 
    ELCT_STRING_NOCASE  
}; 
 
enum ListOperatorType {  
	ELOT_LT = 0,    //  <   less than 
    ELOT_GT,        //  >   greater than 
    ELOT_LTE,       //  <=  less than or equal 
    ELOT_GTE,       //  >=  greather than or equal 
    ELOT_EQ         //  ==  equal 
};  
 
class CExtListCtrl : public CListCtrl 
{ 
// Construction 
public: 
	CExtListCtrl(); 
	virtual ~CExtListCtrl(); 
 
// Attributes 
public: 
 
// Operations 
public: 
 
// Overrides 
	// ClassWizard generated virtual function overrides 
	//{{AFX_VIRTUAL(CExtListCtrl) 
	public: 
	virtual BOOL PreTranslateMessage(MSG* pMsg); 
	protected: 
	virtual BOOL PreCreateWindow(CREATESTRUCT& cs); 
	virtual void PreSubclassWindow(); 
	//}}AFX_VIRTUAL 
 
// Implementation 
public: 
	LONG  SetStyle(DWORD dwStyle); 
	LONG  GetStyle(); 
	DWORD SetExtendedStyle(DWORD dwNewStyle); 
	DWORD GetExtendedStyle(); 
	BOOL  ModifyStyle(DWORD dwRemove, DWORD dwAdd, UINT nFlags = 0); 
	BOOL  ModifyStyleEx(DWORD dwRemove, DWORD dwAdd, UINT nFlags = 0); 
	void  Modify(int nItem, BOOL bModify); 
	BOOL  ItemModified(int nItem); 
	 
	// Header 
	int InsertColumn(int nCol, const LVCOLUMN* pColumn); 
	int InsertColumn(int nCol, LPCTSTR lpszColumnHeading, int nWidth, int nFormat = LVCFMT_LEFT, int nSubItem = -1); 
    void SetEditable(BOOL bEditable = TRUE); 
	BOOL DeleteColumn(int nCol); 
	void DeleteAllColumns(); 
	CHeaderCtrl* GetHeaderCtrl() const; 
	int GetColumnCount(); 
	void SetSortable(BOOL bSortable); 
    // 
	BOOL EnsureVisible(int nItem, BOOL bPartialOK); 
	int InsertItem(); 
	int InsertItem(const LVITEM* pItem); 
	int InsertItem(int nItem, LPCTSTR lpszItem, int nImage = -1); 
	int InsertItem(UINT nMask, int nItem, LPCTSTR lpszItem, UINT nState, UINT nStateMask, int nImage, LPARAM lParam); 
	// 
	BOOL DeleteItem(int nItem); 
	BOOL DeleteAllItems(); 
 
	BOOL SetItemText(int nItem, int nSubItem, LPCTSTR lpszItem, UINT nFormat = DT_LEFT); 
	BOOL SetItemText(int nItem, int nSubItem, INT lpszItem, UINT nFormat = DT_LEFT); 
	BOOL SetItemText(int nItem, int nSubItem, UINT lpszItem, UINT nFormat = DT_LEFT); 
	BOOL SetItemText(int nItem, int nSubItem, LONG lpszItem, UINT nFormat = DT_LEFT); 
	BOOL SetItemText(int nItem, int nSubItem, ULONG lpszItem, UINT nFormat = DT_LEFT); 
	BOOL SetItemText(int nItem, int nSubItem, DOUBLE lpszItem, int nPrecision = -1, UINT nFormat = DT_LEFT); 
	BOOL SetItemTextEx(int nItem, int nSubItem, LPCTSTR lpszItem, LPCTSTR lpszItemEx); 
	BOOL SetItemTextEx(int nItem, int nSubItem, LPCTSTR lpszItemEx); 
 
	CString GetItemText(int nItem, int nSubItem); 
	CString GetItemTextEx(int nItem, int nSubItem); 
 
	BOOL SetItemImage(int nItem, int nSubItem, int nImage); 
	int  GetItemImage(int nItem, int nSubItem); 
    // 
	BOOL  SetItemData(int nItem, DWORD dwData); 
	DWORD GetItemData(int nItem) const; 
    // 
	void SetBkColor(int nItem, int nSubItem, COLORREF crColor, BOOL bRedraw = FALSE); 
	void SetTextColor(int nItem, int nSubItem, COLORREF crColor, BOOL bRedraw = FALSE); 
 
	BOOL SetItemState(int nItem, UINT nState, BOOL bState = TRUE); 
	UINT GetItemState(int nItem); 
 
	BOOL SetCheck(int nItem, int nSubItem, BOOL bChecked = TRUE); 
	BOOL GetCheck(int nItem, int nSubItem); 
 
	int  GetSelectedItem(); 
	BOOL SelectItem(int nItem); 
	int  Find(LPCTSTR lpszItem, int nSubItem, int nBegin = 0); 
	int  FindEx(LPCTSTR lpszItem, int nSubItem, int nBegin = 0); 
	// Generated message map functions 
protected: 
	CFont       m_Font; 
	LOGFONT     m_Logfont; 
 
	LV_ITEM    m_lvItem; 
 
	CExtHeaderCtrl m_pHeader; 
    //Edit 
	CEdit     *m_pWndEdit;    
	POINT      m_ptEdit; 
	BOOL       m_bEditable; 
    //Sort 
	int             m_nSortedColumn; 
	BOOL            m_bSortAscending; 
	BOOL            m_bSortable; 
	ListCompareType m_nCompareAs; 
 
	// Every subitem. 
	struct EXT_ITEM 
	{ 
		DWORD dwData; 
		BOOL  bModify; 
		CArray   lpszItemEx;  //  
		CArray crTxColor;   // Text color 
		CArray crBkColor;   // Background color 
		CArray           nChecked;    // -1:not check 0:no check 1:check 
		CArray         nFormat;     // DT_LEFT DT_CENTER DT_RIGHT 
	}; 
    // Sort 
	struct EXT_SORT 
	{ 
		DWORD dwData; 
		UINT  nState; 
		CStringArray lpszItem; 
		CStringArray lpszItemEx; 
		CArray nImage; 
		CArray nChecked; 
		CArray nFormat; 
	}; 
 
	// 
	LONG  _GetStyle(); 
	BOOL  _GetHeaderColumn(); 
	int   _GetHeaderFMT(int nCol); 
	UINT  _GetItemFMT(int nItem, int nSubItem); 
	DWORD _AllocItemMemory(int nItem); 
	void  _FreeItemMemory(int nItem); 
	void  _UpdateColumn(int nCol, BOOL bInsert); 
	void  _MouseClkMonitor(UINT nMsg, UINT nFlags, CPoint point, BOOL bTriggerEdit); 
	void  _ItemCheckMonitor(UINT nMsg, int nItem, int nSubItem); 
	int   _GetCheck(int nItem, int nSubItem); 
	void  _StartEdit(int nItem, int nSubItem); 
	void  _EndEdit(BOOL bCommit = TRUE); 
	// 
	void         _QuickSort(int p, int r); 
	int          _Partition(int p, int r); 
	BOOL         _SwapRow(int nRow1, int nRow2); 
	virtual BOOL _CompareBy(CString str1, CString str2, ListOperatorType op); 
 
	COLORREF _BKColorFor(int nItem, int nSubItem, EXT_ITEM *pItem); 
	COLORREF _TXColorFor(int nItem, int nSubItem, EXT_ITEM *pItem); 
	COLORREF _BKColorForItem(int nItem, EXT_ITEM *pItem); 
	COLORREF _TXColorForItem(int nItem, EXT_ITEM *pItem); 
	COLORREF _BKColorForSubItem(int nItem, int nSubItem, EXT_ITEM *pItem); 
	COLORREF _TXColorForSubItem(int nItem, int nSubItem, EXT_ITEM *pItem); 
 
	virtual void _SwitchTo(DWORD dwDrawStage, LRESULT* pResult, BOOL bDefault); 
 
	virtual BOOL  _IsDraw(); 
	virtual DWORD _OnDraw(CDC *pDC, const CRect rcItem); 
 
	virtual BOOL  _IsPostDraw(); 
	virtual DWORD _OnPostDraw(CDC *pDC, const CRect rcItem); 
 
	virtual BOOL  _IsItemDraw(int nItem); 
	virtual DWORD _OnItemDraw(CDC *pDC, int nItem); 
 
	virtual BOOL  _IsItemPostDraw(int nItem); 
	virtual DWORD _OnPostDraw(CDC *pDC, int nItem); 
 
	virtual BOOL  _IsSubItemDraw(int nItem, int nSubItem); 
	virtual DWORD _OnSubItemDraw(CDC *pDC, int nItem, int nSubItem); 
 
	virtual BOOL  _IsSubItemPostDraw(int nItem, int nSubItem); 
	virtual DWORD _OnSubItemPostDraw(CDC *pDC, int nItem, int nSubItem); 
 
	virtual void  _CalcRect(int nItem, int nSubItem, CRect &rcItem, CRect &rcLabel, CRect &rcCheck, EXT_ITEM *pItem); 
	virtual void  _CalcItemRect(int nItem, CRect &rcItem, CRect &rcLabel, CRect &rcCheck, EXT_ITEM *pItem); 
	virtual void  _CalcSubItemRect(int nItem, int nSubItem, CRect &rcItem, CRect &rcLabel, CRect &rcCheck, EXT_ITEM *pItem); 
	virtual DWORD _DrawText(CDC *pDC, int nItem, int nSubItem, CRect rcLabel, EXT_ITEM *pItem); 
	virtual DWORD _DrawCheckbox(CDC *pDC, int nItem, int nSubItem, CRect rcCheck, EXT_ITEM *pItem); 
	//{{AFX_MSG(CExtListCtrl) 
	afx_msg int  OnCreate(LPCREATESTRUCT lpCreateStruct); 
	afx_msg void OnColumnclick(NMHDR* pNMHDR, LRESULT* pResult); 
	afx_msg void OnLButtonDown(UINT nFlags, CPoint point); 
	afx_msg void OnLButtonDblClk(UINT nFlags, CPoint point); 
	afx_msg void OnCustomDraw(NMHDR* pNMHDR, LRESULT* pResult); 
	afx_msg void OnDestroy(); 
	//}}AFX_MSG 
 
	DECLARE_MESSAGE_MAP() 
}; 
 
///////////////////////////////////////////////////////////////////////////// 
 
//{{AFX_INSERT_LOCATION}} 
// Microsoft Visual C++ will insert additional declarations immediately before the previous line. 
 
#endif // __EXTLISTCTRL_H__