UIDATA.H
上传用户:yatsl7111
上传日期:2007-01-08
资源大小:1433k
文件大小:8k
- //*******************************************************************************
- // COPYRIGHT NOTES
- // ---------------
- // You may use this source code, compile or redistribute it as part of your application
- // for free. You cannot redistribute it as a part of a software development
- // library without the agreement of the author. If the sources are
- // distributed along with the application, you should leave the original
- // copyright notes in the source code without any changes.
- // This code can be used WITHOUT ANY WARRANTIES at your own risk.
- //
- // For the latest updates to this code, check this site:
- // http://www.masmex.com
- // after Sept 2000
- //
- // Copyright(C) 2000 Philip Oldaker <email: philip@masmex.com>
- //*******************************************************************************
- #ifndef __LISTCTRLDATA_H__
- #define __LISTCTRLDATA_H__
- ////////////////////////////////////////////////
- // CUIODColumnCtrl
- // Interface for an owner draw control in a list control column
- ////////////////////////////////////////////////
- class CUIODColumnCtrl : public CObject
- {
- DECLARE_DYNAMIC(CUIODColumnCtrl);
- public:
- CUIODColumnCtrl();
- virtual ~CUIODColumnCtrl();
- public:
- virtual void DoPaint(CDC *PaintDC,CRect rcClient,bool bSelected)=0;
- protected:
- private:
- };
- inline CUIODColumnCtrl::CUIODColumnCtrl()
- {
- }
- inline CUIODColumnCtrl::~CUIODColumnCtrl()
- {
- }
- // Internal extension data for each row in the list control
- // if you wish to override the default behaviour
- // a class should be derived from this one and the GetListCtrlData method
- // should be overridden in the list control class
- class CTRL_EXT_CLASS CUIListCtrlData : public CObject
- {
- public:
- DECLARE_DYNAMIC(CUIListCtrlData)
- CUIListCtrlData(int nCols=1);
- ~CUIListCtrlData();
- void Init(int nCols);
- // functions to change the color of each row
- COLORREF GetTextColor(int nCol=0) const;
- COLORREF GetBkColor(int nCol=0) const;
- const CFont *GetFont(int nCol=0) const;
- void SetBkColor(COLORREF BkColor,int nCol=-1);
- void SetTextColor(COLORREF TextColor,int nCol=-1);
- void SetDefaultBkColor(int nCol=-1);
- void SetDefaultTextColor(int nCol=-1);
- void SetFont(CFont *pFont,int nCol=-1);
- void SetCtrl(CUIODColumnCtrl *pCtrl,int nCol);
- void DestroyCtrl(int nCol);
- // emulate the CListCtrl class by allowing user defined extension data
- DWORD GetExtData() const;
- void SetExtData(DWORD dwExtData);
- BOOL IsFontSet(int nCol=-1) const;
- protected:
- void DestroyFonts();
- void DestroyCtrls();
- void CreateNewFont(int nCol,LOGFONT &lf);
- // Get/Set Methods
- public:
- void SetAutoDelete(bool bAutoDelete);
- bool GetAutoDelete() const;
- int GetCtrlCount() const;
- CUIODColumnCtrl *GetCtrl(int nCol) const;
- void SetDeleted(bool bDeleted);
- bool IsDeleted() const;
- private:
- CDWordArray m_arBkColors;
- CDWordArray m_arTextColors;
- CObArray m_arFonts;
- DWORD m_dwExtData;
- CObArray m_arCtrl;
- bool m_bAutoDelete;
- bool m_bDeleted;
- };
- inline int CUIListCtrlData::GetCtrlCount() const
- {
- int nCount=0;
- for(int i=0;i < m_arCtrl.GetSize();i++)
- {
- if (m_arCtrl.GetAt(i) != NULL)
- {
- nCount++;
- }
- }
- return nCount;
- }
- inline CUIODColumnCtrl *CUIListCtrlData::GetCtrl(int nCol) const
- {
- CUIODColumnCtrl *pCtrl = (CUIODColumnCtrl*)m_arCtrl.GetAt(nCol);
- return pCtrl;
- }
- inline void CUIListCtrlData::DestroyCtrl(int nCol)
- {
- CUIODColumnCtrl *pOldCtrl = (CUIODColumnCtrl*)m_arCtrl[nCol];
- delete pOldCtrl;
- m_arCtrl[nCol] = NULL;
- }
- inline void CUIListCtrlData::SetCtrl(CUIODColumnCtrl *pCtrl,int nCol)
- {
- DestroyCtrl(nCol);
- ASSERT_KINDOF(CUIODColumnCtrl,pCtrl);
- m_arCtrl[nCol] = pCtrl;
- }
- inline void CUIListCtrlData::SetAutoDelete(bool bAutoDelete)
- {
- m_bAutoDelete = bAutoDelete;
- }
- inline bool CUIListCtrlData::GetAutoDelete() const
- {
- return m_bAutoDelete;
- }
- inline void CUIListCtrlData::SetDeleted(bool bDeleted)
- {
- m_bDeleted = bDeleted;
- }
- inline bool CUIListCtrlData::IsDeleted() const
- {
- return m_bDeleted;
- }
- inline const CFont *CUIListCtrlData::GetFont(int nCol) const
- {
- return (const CFont*)m_arFonts[nCol];
- }
- inline COLORREF CUIListCtrlData::GetTextColor(int nCol) const
- {
- return m_arTextColors[nCol];
- }
- inline COLORREF CUIListCtrlData::GetBkColor(int nCol) const
- {
- return m_arBkColors[nCol];
- }
- inline DWORD CUIListCtrlData::GetExtData() const
- {
- return m_dwExtData;
- }
- inline void CUIListCtrlData::SetBkColor(COLORREF BkColor,int nCol)
- {
- if (nCol == -1)
- {
- for(int i=0;i < m_arBkColors.GetSize();i++)
- {
- m_arBkColors[i] = BkColor;
- }
- }
- else
- m_arBkColors[nCol] = BkColor;
- }
- inline void CUIListCtrlData::SetTextColor(COLORREF TextColor,int nCol)
- {
- if (nCol == -1)
- {
- for(int i=0;i < m_arTextColors.GetSize();i++)
- {
- m_arTextColors[i] = TextColor;
- }
- }
- else
- m_arTextColors[nCol] = TextColor;
- }
- inline void CUIListCtrlData::SetDefaultTextColor(int nCol)
- {
- SetTextColor(::GetSysColor(COLOR_WINDOWTEXT),nCol);
- }
- inline void CUIListCtrlData::SetDefaultBkColor(int nCol)
- {
- SetBkColor(::GetSysColor(COLOR_WINDOW),nCol);
- }
- inline void CUIListCtrlData::SetExtData(DWORD dwExtData)
- {
- m_dwExtData = dwExtData;
- }
- // for ODBC databases
- class CTRL_EXT_CLASS CUIDBListCtrlData : public CUIListCtrlData
- {
- public:
- CUIDBListCtrlData(int nCols) : CUIListCtrlData(nCols) { }
- DECLARE_DYNAMIC(CUIDBListCtrlData)
- const GetRecNum() { return m_nRecNum; }
- void SetRecNum(long nRecNum) { m_nRecNum = nRecNum; }
- private:
- long m_nRecNum; // for ODBC connection to record sets
- };
- // used by the Ownerdraw combo box
- class CTRL_EXT_CLASS CUIComboBoxData : public CUIListCtrlData
- {
- DECLARE_DYNAMIC(CUIComboBoxData)
- public:
- CUIComboBoxData(int nCols) : CUIListCtrlData(nCols), m_nImageIndex(-1) {}
- CString GetText(int nCol = -1) const;
- int GetImageIndex() const { return m_nImageIndex; }
- void SetText(LPCTSTR szText) { m_strText = szText; }
- void SetImageIndex(int nImageIndex) { m_nImageIndex = nImageIndex; }
- private:
- CString m_strText; // for displaying text in OD combo boxes with columns
- int m_nImageIndex;
- };
- // keep our own copy of strings in the list control to ease sorting
- class CTRL_EXT_CLASS CUIStrListCtrlData : public CUIListCtrlData
- {
- public:
- DECLARE_DYNAMIC(CUIStrListCtrlData)
- CUIStrListCtrlData(int nColumns);
- CUIStrListCtrlData();
- LPTSTR GetString(int nCol);
- const CString &GetExtraString() const;
- void AddExtraString(LPCTSTR pszExtraText);
- int GetStringLen(int nCol) const;
- BOOL AddString(int nCol,LPCTSTR szText);
- private:
- CStringArray m_StringArray;
- CString m_strExtraText;
- };
- inline int CUIStrListCtrlData::GetStringLen(int nCol) const
- {
- return m_StringArray[nCol].GetLength();
- }
- inline void CUIStrListCtrlData::AddExtraString(LPCTSTR pszExtraText)
- {
- m_strExtraText = pszExtraText;
- }
- inline const CString &CUIStrListCtrlData::GetExtraString() const
- {
- return m_strExtraText;
- }
- // Used internally to help sorting
- class CUIODListCtrlSortInfo : public CObject
- {
- public:
- CUIODListCtrlSortInfo(int nSubItem,int ColType,BOOL bSortAscending);
- BOOL Ascending() const;
- int GetColumn() const;
- int GetColType() const;
- private:
- BOOL m_bSortAscending;
- int m_nSubItem;
- int m_ColType;
- };
- inline CUIODListCtrlSortInfo::CUIODListCtrlSortInfo(int nSubItem,int ColType,BOOL bSortAscending)
- : m_nSubItem(nSubItem),m_ColType(ColType),m_bSortAscending(bSortAscending)
- {
- }
- inline BOOL CUIODListCtrlSortInfo::Ascending() const
- {
- return m_bSortAscending;
- }
- inline int CUIODListCtrlSortInfo::GetColumn() const
- {
- return m_nSubItem;
- }
- inline int CUIODListCtrlSortInfo::GetColType() const
- {
- return m_ColType;
- }
- #endif // __LISTCTRLDATA_H__