www.pudn.com > MFCVista.rar > IListCtrl.h


#pragma once 
#include "IontrlPos.h" 
class AFX_EXT_CLASS CIListCtrl : public CListCtrl,public CIontrlPos 
{ 
protected:		 
	CPen			m_GridPen;//画Grid的画笔 
	COLORREF		m_clrStripe,//条纹的颜色 
					m_clrFocus;//焦点的颜色		 
	CEdit			*m_pEditCell;//编辑框控制	 
	bool			m_bOwnerEditCtrl; 
	int				m_iCountColumn,//Column的数量   只读的 
					m_iOldSelItem,//当前选择的前一次Item 
					m_iCurSelItem,//当前选择的Item 
					m_iItemHeight,//一个Item的高度 
					m_iItem,m_iSub;//当前在编辑的Item数据 
protected://内部使用的rubbish变量 
	CRect		m_rctItem;//一个格子 
	int			m_iSubItem,//子列的索引 
				m_iCurColumn; 
	CFont		m_fnt; 
	CImageList	m_imgList; 
	CBitmap		m_bmpList; 
	bool		m_bNoColumnHeader; 
	bool		m_bHaveEditCtrl, 
				m_bMouseDown; 
	CPoint		m_posOldMouse; 
public: 
	CIListCtrl(); 
	virtual ~CIListCtrl(); 
protected: 
	DECLARE_DYNAMIC(CIListCtrl) 
	DECLARE_MESSAGE_MAP() 
public: 
	afx_msg void OnPaint(); 
	afx_msg void OnLButtonDown(UINT nFlags, CPoint point); 
	afx_msg BOOL OnMouseWheel(UINT nFlags, short zDelta, CPoint pt); 
	afx_msg void OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar); 
	afx_msg void OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar); 
	afx_msg void OnHdnBegintrack(NMHDR *pNMHDR, LRESULT *pResult); 
	afx_msg BOOL OnEraseBkgnd(CDC* pDC); 
	afx_msg void OnEnKillfocus(); 
protected: 
	int		GetDragWidth(int iColumn); 
protected: 
	virtual CString GetText(int iItem,int iSubItem);//精简文字 
	virtual CRect	&GetEditCtrlRect(CRect &rctEditCtrl,int iItem,int iSubItem);//得到EDIT控件有效区域 
	virtual void	DrawItemImage(CDC &dc,int nItem); 
	virtual void	DrawGridText(CDC &dc);//往格子里写数据	不一定是TEXT 
	virtual void	DrawGridLines(CDC &dc,CPen &penDrawGrid);//画Grid线 
	virtual void	DrawStripe(CDC &dc);//画条纹  奇偶画格子 
	virtual void	DrawSelFocus(CDC &dc,CRect &rect,COLORREF rectClr,int iItem,int iOldItem);//画选中的焦点框 
	virtual	void	SetAttributeDC(CDC &dc,int iItem,int iSubItem,int iOldItem,CRect &rctItem);//正在添入格子中的数据,可以设置DC的属性,可以设置格子的背景色,和文字的颜 
	virtual void	PreSubclassWindow(); 
	virtual void	GetItemHeight(int &iHeight); 
public: 
	bool	SetAtt(UINT nBmpList=0,bool bHaveEditCtrl=1,UINT nEditCtrlType=WS_BORDER|WS_CHILD|ES_AUTOHSCROLL);//失败则无法继续其他操作 
	void	ScrollToLine(int nLine);//滚动到nLine行 
	int		GetSelectedItem();//得到选中的ITEM 
	bool	SetGridLineColor(COLORREF clrGridLine);//设置GridLine的颜色 
	void	SetStripeColor(COLORREF clrStripe);//设置条纹的颜色 
	void	SetFocusColor(COLORREF clrFocus);//设置焦点的颜色 
	void	InsertColumn(int nCol,const LVCOLUMN *pColumn); 
	void	InsertColumn(int nCol,LPCTSTR lpszColumnHeading,int nFormat=LVCFMT_LEFT,int nWidth=-1,int nSubItem=-1); 
	BOOL	DeleteAllItems(); 
	void	SetItemImage(int nItem,int nImage); 
	int		GetItemImage(int nItem);//失败返回 -1 
	CString GetColumnText(int nCol); 
	//属性 
	int		GetColumnCount(); 
	CEdit	&GetEditControl(); 
	void	SetEditCtrl(CEdit *pEditCtrl); 
	void	SetHeaderCtrl(CHeaderCtrl *pHhdrHeader); 
	int		GetItemHeight(); 
	//Edit控制 
	void	ShowEditCtrl(int bShow=SW_SHOW);//显示编辑控件 
	void	CommitEditCtrl();//提交编辑框的编辑	 
	void	SetCurSel(int iSel); 
	void	SetLastEditPos(); 
};