www.pudn.com > WinGOS.rar > GridCtrl.h


#ifndef _GOS_GRIDCTRL_H_ 
#define _GOS_GRIDCTRL_H_ 
 
enum _tagGridCtrl 
{ 
	gcmGetDSRow=WM_CTLBASE+1, 
	gcmGetDSCellData, 
	gcmGetRowState, 
	gcmAddRowState, 
	gcmRemoveRowState, 
	gcmActiveCell, 
	gcmDeactiveCell, 
	gcmDrawCell, 
	gcmDrawHeader, 
 
	GCS_TEXT			=0x0000, 
	GCS_INT				=0x0001, 
	GCS_UINT			=0x0002, 
	GCS_CHAR			=0x0003, 
	GCS_BYTE			=0x0004, 
	GCS_SHORT			=0x0005, 
	GCS_USHORT			=0x0006, 
	GCS_BOOL			=0x0007, 
	GCS_FLOAT			=0x0008, 
	GCS_DOUBLE			=0x0009, 
	GCS_DATE			=0x000a, 
	GCS_TIME			=0x000b, 
	GCS_DATETIME		=0x000c, 
	GCS_VARIENT			=0x000d, 
	GCS_BITMAP			=0x000e, 
	GCS_OWNERDRAW		=0x000f, 
	 
	GCS_ZOOMIN			=0x0100, 
	GCS_ZOOMOUT			=0x0200, 
	GCS_ZOOM			=0x0300, 
	GCS_STRETCH			=0x0400, 
	GCS_MULTILINE		=0x0100, 
	GCS_WORDBREAK		=0x0300, 
	GCS_UNDERLINE		=0x0400, 
	GCS_ICONLIKE		=0x0800, 
	GCS_STRLENEX		=0x0800, 
	GCS_LEFT			=0x1000, 
	GCS_RIGHT			=0x2000, 
	GCS_CENTER			=0x3000, 
	GCS_TOP				=0x4000, 
	GCS_BOTTOM			=0x8000, 
	GCS_VCENTER			=0xC000, 
	GCS_DTMASK			=0xf700, 
 
	GCS_SELECTED		=0x0010L, 
	GCS_FOCUSED			=0x0020L, 
	 
	GCS_ROWSELECTED		=0x00010000L, 
	GCS_ROWFOCUSED		=0x00020000L, 
	GCS_ROWPUSHED		=0x00020000L, 
 
	GCS_ICON			=GCS_BITMAP|GCS_ICONLIKE, 
	GCS_TYPEMASK		=0x000f, 
	GCS_STYLEMASK		=0x0ff0, 
	GCS_STATEMASK		=0xf000|GCS_FOCUSED, 
	GCS_COLMASK			=0xffff, 
	GCS_ROWMASK			=0xffff0000L, 
 
	GCS_CLICKED=1, 
}; 
 
typedef struct _tagGCDRAWCELLARG 
{ 
	int nRow; 
	int nCol; 
	PVOID pData; 
	DWORD nStyle; 
	CRect rect; 
}GCDRAWCELLARG,*PGCDRAWCELLARG; 
 
 
class CGridCtrl : public CWnd 
{ 
protected: 
	struct CColumn 
	{ 
		PVOID pData; 
		DWORD nStyle; 
		int nWidth; 
	}; 
public: 
	CGridCtrl(void); 
	~CGridCtrl(void); 
	LRESULT MsgProc(UINT message, WPARAM wParam, LPARAM lParam); 
//data source 
	POSITION GetDSRow(POSITION pos,int nOffset) 
		{ return (POSITION)MsgProc(gcmGetDSRow,WPARAM(pos),nOffset); } 
	POSITION GetDSCellData(POSITION pos,int nCol) 
		{ return (POSITION)MsgProc(gcmGetDSCellData,WPARAM(pos),nCol); } 
//scroll 
	BOOL ScrollRow(int nRows); 
//draw 
	void OnPaint(CDC* pDC); 
public: 
//operators 
	void InsertColumn(int nCol,LPCTSTR pszText,DWORD nStyle,int nWidth); 
	void DeleteColumn(int nCol); 
	void RedrawRow(int nRow); 
	DWORD AddRowState(int nRow,DWORD nState); 
	DWORD RemoveRowState(int nRow,DWORD nState); 
	BOOL ActiveCell(int nRow,int nCol); 
	BOOL DeactiveCell(int nRow,int nCol); 
	BOOL Create(DWORD nStyle,LPCRECT pRect,CPWnd* pParent); 
	DWORD GetRowState(int nRow); 
//helper 
	void GetRowRect(int nRow,LPRECT pRect); 
	void GetHeaderRect(LPRECT pRect); 
	void RefreshGridData(); 
	int HitTest(CPoint pt); 
//event 
	void OnMove(); 
	void OnDestroy(); 
	void OnDrawHeader(CDC* pDC,PGCDRAWCELLARG pArg); 
	void OnDrawCell(CDC* pDC,PGCDRAWCELLARG pArg); 
	void DrawText(CDC* pDC,PGCDRAWCELLARG pArg); 
	void DrawBitmap(CDC* pDC,PGCDRAWCELLARG pArg); 
protected: 
	int m_nHeaderHeight; 
	int m_nRowHeight; 
	int m_nCurGridRow; 
	int m_nCurGridCol; 
	CArray m_aGridRow; 
	CArray m_aGridCol; 
}; 
 
#endif //_GOS_GRIDCTRL_H_