CListCtrl控件重绘源码---持续更新

来源:互联网 发布:火箭22连胜麦迪数据 编辑:程序博客网 时间:2024/05/20 01:36



下载源码请到以下地址:http://download.csdn.net/detail/dongdan_002/8252897




代码功能见头文件:

#include "MyHeadCtrl.h"// Added by ClassView#if _MSC_VER > 1000#pragma once#endif // _MSC_VER > 1000// MyListCtrl1.h : header file///********************************************** CExArray扩展类:功能类似于CArray* 用处:管理CELLVALUE结构指针* 功能:添加、删除、获取结构(CELLVALUE)指针**********************************************/template<class T>class CExArray{public:CExArray(int nSize=10){m_dwSize=10;m_dwCurCount=0;m_pVal=NULL;m_pVal=new T[nSize];};virtual ~CExArray(){if(m_pVal!=NULL){delete[] m_pVal;m_pVal=NULL;}};//////////////////////public:void Add(T& cell);BOOL GetAt(DWORD dwRow,DWORD dwCol,T& cell);BOOL GetAt(DWORD dwIndex,T& cell);T* GetAt(DWORD dwRow,DWORD dwCol);T* GetAt(DWORD dwIndex);void DelAt(DWORD dwRow,DWORD dwCOl);void DelAll(void);int  GetCount(void);private:T *m_pVal;DWORD m_dwSize;DWORD m_dwCurCount;};/**************************************************************************************** 类名称:CMyListCtrl :public CListCtrl* 类说明:CMyListCtrl类是继承自CListCtrl类,对CListCtrl类进行重绘和扩长新功能* 功能:可以设置列表的行高大小  *可以设置列表头的行高大小*可以设置单元格的文本颜色、背景颜色、字体*可以设置列头每一列的文本颜色、背景颜色、字体*可以通过鼠标双击某个单元格显示控件(CEdit、CComboBox)对该单元格中内容修改*可以再单元格中显示位图资源***************************************************************************************/class CMyListCtrl : public CListCtrl{// Constructionpublic:CMyListCtrl();// Attributespublic:// Operationspublic://0-char,1-int,2-float,3-char* ; 0-IDC_EDIT,1-IDC_CMB,注意:pData,pComboStr只是存储他的指针!void Attach(DWORD dwItem,DWORD dwSubItem,void* pData,unsigned char cDataType=0,unsigned char cCtrlType=0,\ int nComboStr=0,CString* pComboStr=NULL);//设置某一个单元格中最大可写的字符串void SetStrMaxLen(int nRow,int nCol,int nMaxLen=256);//获取ItemValue Change的Numint GetItemChangeNum(void);//在调用GetNextItemChange之前先调用这个函数一次既可以了bool GetFirstItemChange(int& row,int& col);//获取ItemValue Change的行号和列号bool GetNextItemChange(int& row,int& col);/////////////////////////////////////////////////////////////// 设置表头高度void SetHeadHeight(float Height);// Gradient - 渐变系数,立体背景用,不用渐变设为0void SetHeadBKColor(COLORREF rgb,int Gradient,int col=-1);///////////////////////////////////////////////////////////////设置行颜色void SetRowColor(int row,COLORREF color);//取消设置的行颜色void UnSetRowColor(int row);//设置列颜色void SetColColor(int col,COLORREF color); //设置单元格颜色void SetItemColor(int row,int col,COLORREF color);//设置行文本颜色void SetRowTextColor(int row,COLORREF color);//取消设置的行文本颜色void UnSetRowTextColor(int row);//设置列文本颜色void SetColTextColor(int col,COLORREF color);//设置单元格文本颜色void SetItemTextColor(int row,int col,COLORREF color);//设置行高void SetRowHeigt(int nHeight);//设置头部字体void SetHeadFont(int nSize,BOOL bBold,BOOL bItalic,BOOL bUnderLine,LPCTSTR pszName="宋体");//设置头部字体颜色void SetHeadTextColor(COLORREF color,int col=-1);////////////////////////////////////////////////////////////////设置整个列表的字体void SetFont(int nSize,BOOL bBold,BOOL bItalic,BOOL bUnderLine,LPCTSTR pszName="宋体");//设置一列的字体void SetColFont(int col,int nSize,BOOL bBold,BOOL bItalic,BOOL bUnderLine,LPCTSTR pszName="宋体");//设置某一个单元格中的字体void SetItemFont(int row,int col,int nSize,BOOL bBold,BOOL bItalic,BOOL bUnderLine,LPCTSTR pszName="宋体");//设置列头某一列的字体void SetHeadColFont(int col,int nFontSize,BOOL Bold,BOOL Italic,BOOL UnderLine,LPCTSTR pszFontName="宋体");/////////////////////////////////////////////////////////////////查找某一列背景颜色int FindColColor(int col ,COLORREF &color);//查找某一行背景颜色int FindRowColor(int row ,COLORREF &color);//查找某一个单元格背景颜色int FindItemColor(int col,int row,COLORREF &color);//查找某一行文本颜色int FindRowTextColor(int row,COLORREF &color);//查找某一列文本颜色int FindColTextColor(int col,COLORREF &color);//查找某一单元格文本颜色int FindItemTextColor(int col,int row,COLORREF &color);//查找某一列的字体int FindColFont(int col);//查找某一个单元格的字体int FindItemFont(int row,int col);// Overrides// ClassWizard generated virtual function overrides//{{AFX_VIRTUAL(CMyListCtrl)protected:virtual void PreSubclassWindow();//}}AFX_VIRTUAL// Implementationpublic://插入一行,第一列写入Int值int InsertItemInt(int nItem,int val);//在指定单元格写入Int值BOOL SetItemInt(int nItem,int nSubItem,int val);//在指定单元格写入Float值BOOL SetItemFloat(int nItem,int nSubItem,float val);//获取指定单元格的值转化为Int类型int GetItemInt(int nItem,int nSubItem);//获取指定单元格的值转化为Float类型float GetItemFloat(int nItem,int nSubItem);////////////////////////////////////////////////////////////////////////////清空列表void Clear(void);//清空列表头void ClearHead(void);//设置回调函数(KillComboBox的回调)void SetCallbackFunc(COMBOKILLFOCUS pFunc,CDialog* pDlg=NULL);// 单元格左键双击事件void SetItemDblClkFunc(ITEMDBLCLK pFunc,int nColItem,void* pParam);//获取当前选中的行int GetCurSel(void);//获取上一次选中的行int GetPrevSel(void);//设置当前选中的行void SetCurSel(int nItem);//设置选中一列的模式void SetColSelectMode(bool bColSelect=TRUE);//设置选中一行的模式void SetLineSelectMode(bool bLineSelect=TRUE,bool bLineSelectBkColor=TRUE);//COMBOBOX控件Value Change 时用于更新void UpdateCombo(int nCol,CString* pComboStr,int nComboStr);//设置单元中图片void SetItemImage(int row,int col,UINT nIDResource);//取消单元中的图片void UnSetItemImage(int row,int col);//判断单元格中是否有图片BOOL IsItemImage(int row,int col);//更新单元格中的文本串void Update(int row,int col,LPCTSTR pszTxt);//获取单元格的Rectvoid GetCellRect(int nItem,int nSubItem,CRect& rect);//插入一列(Format=DT_LEFT、DT_CENTER、DT_RIGHT)int InsertColumn(int col,LPCTSTR pszHead,UINT Format,int nHeadWidth);//插入所有列void InsertColumn(int num,CString* pHead,UINT Format,int* pHeadWidth);//响应的消息virtual ~CMyListCtrl();virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);afx_msg void OnMeasureItem(int nIDCtl, LPMEASUREITEMSTRUCT lpMeasureItemStruct);void MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct);//私有函数private:void UpdateCharData(CELLVALUE* pcv,CString& strItem);void UpdateUCharData(CELLVALUE* pcv,CString& strItem);void UpdateStringData(CELLVALUE* pcv,CString& strItem);void UpdateIntData(CELLVALUE* pcv,CString& strItem);void UpdateLongData(CELLVALUE* pcv,CString& strItem);void UpdateFloatData(CELLVALUE* pcv,CString& strItem);void UpdateDoubleData(CELLVALUE* pcv,CString& strItem);// Generated message map functions//afx_msg void OnNMCustomdraw(NMHDR *pNMHDR, LRESULT *pResult);protected://{{AFX_MSG(CMyListCtrl)afx_msg void OnSetfocusEdit();afx_msg void OnKillfocusEdit();afx_msg void OnSetfocusCombo();afx_msg void OnKillfocusCombo();afx_msg void OnLButtonDown(UINT nFlags, CPoint point);afx_msg void OnLButtonDblClk(UINT nFlags, CPoint point);afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);afx_msg void OnColumnclick(NMHDR* pNMHDR, LRESULT* pResult);//}}AFX_MSGDECLARE_MESSAGE_MAP()//类的私有成员变量private:int m_nCurSelCol;//当前选中的列int m_nPrevSelected;//上一次选中的行int m_nCurSelected;//当前选中的行bool m_bLineSelected;bool m_bLineSelectedMode;//一行选中模式int m_nColSelected;bool m_bColSelectedMode;//一列选中模式bool m_bLineSelectBkColor;//行选中模式时,选中一行是否需要背景色//Private FunctionBOOL CreateCtrl(CELLVALUE* pCV);///////////////////////////////CMyHeadCtrl m_Head;CFont *m_pFont;/////////////////////////////////控件CEdit* m_pEdit;CComboBox* m_pCombo;////////////////////////////////////////////////////////stFont* m_pItemFont;//保存Item字体int m_nFont,m_nFontSize;////////////////////////////CExArray<CELLVALUE> m_val;//CExArray<CELLSTYLE> m_stl;CFont *m_pCmbFont;/////////////////CArray<stColor,stColor&> m_ptrListRow;//保存行颜色CArray<stColor,stColor&> m_ptrListCol;//保存列颜色CArray<stColor,stColor&> m_ptrListItem;//保存Item颜色表CArray<stColor,stColor&> m_colTextColor;//保存列字体颜色CArray<stColor,stColor&> m_rowTextColor;//保存行字体颜色CArray<stColor,stColor&> m_ItemTextColor;//保存单元格字体颜色/////////////////CELLVALUE* m_pCV;int m_nRowHeight;//行高!/////////////////////////CALLBACK FUNCTIONCOMBOKILLFOCUS m_pComboKillFocus;ITEMDBLCLK m_pItemDblClk;//CALLBACK FUNCTION PARAMS COMBOKILLFOCUSCDialog* m_pDlg;//CALLBACK FUNCTION PARAMS ITEMDLBCLKint m_nColItem;void* m_pVoid; // 返回的参数///////////////////////////////////////////////////用于GetNextItemChange(int& row,int& col)函数int m_nCurItemChange;};///////////////////////////////////////////////////////////////////////////////{{AFX_INSERT_LOCATION}}// Microsoft Visual C++ will insert additional declarations immediately before the previous line.#endif // !defined(AFX_MYLISTCTRL1_H__6F14775C_CA2F_464E_84E6_D400E924309E__INCLUDED_)
</pre><pre name="code" class="cpp">


0 0
原创粉丝点击