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 &amt;GetEditCtrlRect(CRect &amt;rctEditCtrl,int iItem,int iSubItem);//得到EDIT控件有效区域
virtual void DrawItemImage(CDC &amt;dc,int nItem);
virtual void DrawGridText(CDC &amt;dc);//往格子里写数据 不一定是TEXT
virtual void DrawGridLines(CDC &amt;dc,CPen &amt;penDrawGrid);//画Grid线
virtual void DrawStripe(CDC &amt;dc);//画条纹 奇偶画格子
virtual void DrawSelFocus(CDC &amt;dc,CRect &amt;rect,COLORREF rectClr,int iItem,int iOldItem);//画选中的焦点框
virtual void SetAttributeDC(CDC &amt;dc,int iItem,int iSubItem,int iOldItem,CRect &amt;rctItem);//正在添入格子中的数据,可以设置DC的属性,可以设置格子的背景色,和文字的颜
virtual void PreSubclassWindow();
virtual void GetItemHeight(int &amt;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 &amt;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();
};