UIDATA.H
上传用户:yatsl7111
上传日期:2007-01-08
资源大小:1433k
文件大小:8k
源码类别:

图形图象

开发平台:

Visual C++

  1. //*******************************************************************************
  2. // COPYRIGHT NOTES
  3. // ---------------
  4. // You may use this source code, compile or redistribute it as part of your application 
  5. // for free. You cannot redistribute it as a part of a software development 
  6. // library without the agreement of the author. If the sources are 
  7. // distributed along with the application, you should leave the original 
  8. // copyright notes in the source code without any changes.
  9. // This code can be used WITHOUT ANY WARRANTIES at your own risk.
  10. // 
  11. // For the latest updates to this code, check this site:
  12. // http://www.masmex.com 
  13. // after Sept 2000
  14. // 
  15. // Copyright(C) 2000 Philip Oldaker <email: philip@masmex.com>
  16. //*******************************************************************************
  17. #ifndef __LISTCTRLDATA_H__
  18. #define __LISTCTRLDATA_H__ 
  19. ////////////////////////////////////////////////
  20. // CUIODColumnCtrl
  21. // Interface for an owner draw control in a list control column
  22. ////////////////////////////////////////////////
  23. class CUIODColumnCtrl : public CObject
  24. {
  25. DECLARE_DYNAMIC(CUIODColumnCtrl);
  26. public:
  27. CUIODColumnCtrl();
  28. virtual ~CUIODColumnCtrl();
  29. public:
  30. virtual void DoPaint(CDC *PaintDC,CRect rcClient,bool bSelected)=0;
  31. protected:
  32. private:
  33. };
  34. inline CUIODColumnCtrl::CUIODColumnCtrl()
  35. {
  36. }
  37. inline CUIODColumnCtrl::~CUIODColumnCtrl()
  38. {
  39. }
  40. // Internal extension data for each row in the list control
  41. // if you wish to override the default behaviour
  42. // a class should be derived from this one and the GetListCtrlData method
  43. // should be overridden in the list control class
  44. class CTRL_EXT_CLASS CUIListCtrlData : public CObject 
  45. {
  46. public:
  47.     DECLARE_DYNAMIC(CUIListCtrlData)
  48.     CUIListCtrlData(int nCols=1);
  49.     ~CUIListCtrlData();
  50. void Init(int nCols);
  51.     // functions to change the color of each row
  52.     COLORREF GetTextColor(int nCol=0) const;
  53.     COLORREF GetBkColor(int nCol=0) const;
  54. const CFont *GetFont(int nCol=0) const;
  55.     void SetBkColor(COLORREF BkColor,int nCol=-1);
  56.     void SetTextColor(COLORREF TextColor,int nCol=-1);
  57. void SetDefaultBkColor(int nCol=-1);
  58. void SetDefaultTextColor(int nCol=-1);
  59. void SetFont(CFont *pFont,int nCol=-1);
  60. void SetCtrl(CUIODColumnCtrl *pCtrl,int nCol);
  61. void DestroyCtrl(int nCol);
  62. // emulate the CListCtrl class by allowing user defined extension data 
  63. DWORD GetExtData() const;
  64. void SetExtData(DWORD dwExtData);
  65. BOOL IsFontSet(int nCol=-1) const;
  66. protected:
  67. void DestroyFonts();
  68. void DestroyCtrls();
  69. void CreateNewFont(int nCol,LOGFONT &lf);
  70. // Get/Set Methods
  71. public:
  72. void SetAutoDelete(bool bAutoDelete);
  73. bool GetAutoDelete() const;
  74. int GetCtrlCount() const;
  75. CUIODColumnCtrl *GetCtrl(int nCol) const;
  76. void SetDeleted(bool bDeleted);
  77. bool IsDeleted() const;
  78. private:
  79.     CDWordArray m_arBkColors;
  80.     CDWordArray m_arTextColors;
  81. CObArray m_arFonts;
  82. DWORD m_dwExtData;
  83. CObArray m_arCtrl;
  84. bool m_bAutoDelete;
  85. bool m_bDeleted;
  86. };
  87. inline int CUIListCtrlData::GetCtrlCount() const
  88. {
  89. int nCount=0;
  90. for(int i=0;i < m_arCtrl.GetSize();i++)
  91. {
  92. if (m_arCtrl.GetAt(i) != NULL)
  93. {
  94. nCount++;
  95. }
  96. }
  97. return nCount;
  98. }
  99. inline CUIODColumnCtrl *CUIListCtrlData::GetCtrl(int nCol) const
  100. {
  101. CUIODColumnCtrl *pCtrl = (CUIODColumnCtrl*)m_arCtrl.GetAt(nCol);
  102. return pCtrl;
  103. }
  104. inline void CUIListCtrlData::DestroyCtrl(int nCol)
  105. {
  106. CUIODColumnCtrl *pOldCtrl = (CUIODColumnCtrl*)m_arCtrl[nCol];
  107. delete pOldCtrl;
  108. m_arCtrl[nCol] = NULL;
  109. }
  110. inline void CUIListCtrlData::SetCtrl(CUIODColumnCtrl *pCtrl,int nCol) 
  111. {
  112. DestroyCtrl(nCol);
  113. ASSERT_KINDOF(CUIODColumnCtrl,pCtrl);
  114. m_arCtrl[nCol] = pCtrl;
  115. }
  116. inline void CUIListCtrlData::SetAutoDelete(bool bAutoDelete)
  117. {
  118. m_bAutoDelete = bAutoDelete;
  119. }
  120. inline bool CUIListCtrlData::GetAutoDelete() const
  121. {
  122. return m_bAutoDelete;
  123. }
  124. inline void CUIListCtrlData::SetDeleted(bool bDeleted)
  125. {
  126. m_bDeleted = bDeleted;
  127. }
  128. inline bool CUIListCtrlData::IsDeleted() const
  129. {
  130. return m_bDeleted;
  131. }
  132. inline const CFont *CUIListCtrlData::GetFont(int nCol) const
  133. return (const CFont*)m_arFonts[nCol]; 
  134. }
  135. inline COLORREF CUIListCtrlData::GetTextColor(int nCol) const
  136. return m_arTextColors[nCol]; 
  137. }
  138. inline COLORREF CUIListCtrlData::GetBkColor(int nCol) const 
  139. return m_arBkColors[nCol]; 
  140. }
  141. inline DWORD CUIListCtrlData::GetExtData() const 
  142. return m_dwExtData; 
  143. }
  144. inline void CUIListCtrlData::SetBkColor(COLORREF BkColor,int nCol) 
  145. if (nCol == -1)
  146. {
  147. for(int i=0;i < m_arBkColors.GetSize();i++)
  148. {
  149. m_arBkColors[i] = BkColor;
  150. }
  151. }
  152. else
  153. m_arBkColors[nCol] = BkColor; 
  154. }
  155. inline void CUIListCtrlData::SetTextColor(COLORREF TextColor,int nCol) 
  156. if (nCol == -1)
  157. {
  158. for(int i=0;i < m_arTextColors.GetSize();i++)
  159. {
  160. m_arTextColors[i] = TextColor;
  161. }
  162. }
  163. else
  164. m_arTextColors[nCol] = TextColor; 
  165. }
  166. inline void CUIListCtrlData::SetDefaultTextColor(int nCol) 
  167. SetTextColor(::GetSysColor(COLOR_WINDOWTEXT),nCol); 
  168. }
  169. inline void CUIListCtrlData::SetDefaultBkColor(int nCol) 
  170. SetBkColor(::GetSysColor(COLOR_WINDOW),nCol); 
  171. }
  172. inline void CUIListCtrlData::SetExtData(DWORD dwExtData) 
  173. m_dwExtData = dwExtData; 
  174. }
  175. // for ODBC databases
  176. class CTRL_EXT_CLASS CUIDBListCtrlData : public CUIListCtrlData 
  177. {
  178. public:
  179. CUIDBListCtrlData(int nCols) : CUIListCtrlData(nCols) { }
  180.     DECLARE_DYNAMIC(CUIDBListCtrlData)
  181. const GetRecNum() { return m_nRecNum; }
  182. void SetRecNum(long nRecNum) { m_nRecNum = nRecNum; }
  183. private:
  184. long m_nRecNum; // for ODBC connection to record sets
  185. };
  186. // used by the Ownerdraw combo box
  187. class CTRL_EXT_CLASS CUIComboBoxData : public CUIListCtrlData 
  188. {
  189.     DECLARE_DYNAMIC(CUIComboBoxData)
  190. public:
  191. CUIComboBoxData(int nCols) : CUIListCtrlData(nCols), m_nImageIndex(-1) {}
  192. CString GetText(int nCol = -1) const;
  193. int GetImageIndex() const { return m_nImageIndex; } 
  194. void SetText(LPCTSTR szText) { m_strText = szText; }
  195. void SetImageIndex(int nImageIndex) { m_nImageIndex = nImageIndex; }
  196. private:
  197. CString m_strText; // for displaying text in OD combo boxes with columns
  198. int m_nImageIndex;
  199. };
  200. // keep our own copy of strings in the list control to ease sorting
  201. class CTRL_EXT_CLASS CUIStrListCtrlData : public CUIListCtrlData 
  202. {
  203. public:
  204.     DECLARE_DYNAMIC(CUIStrListCtrlData)
  205. CUIStrListCtrlData(int nColumns);
  206. CUIStrListCtrlData();
  207. LPTSTR GetString(int nCol);
  208. const CString &GetExtraString() const;
  209. void AddExtraString(LPCTSTR pszExtraText);
  210. int GetStringLen(int nCol) const;
  211. BOOL AddString(int nCol,LPCTSTR szText);
  212. private:
  213. CStringArray m_StringArray;
  214. CString m_strExtraText;
  215. };
  216. inline int CUIStrListCtrlData::GetStringLen(int nCol) const
  217. return m_StringArray[nCol].GetLength();
  218. }
  219. inline void CUIStrListCtrlData::AddExtraString(LPCTSTR pszExtraText) 
  220. m_strExtraText = pszExtraText;
  221. }
  222. inline const CString &CUIStrListCtrlData::GetExtraString() const
  223. return m_strExtraText;
  224. }
  225. // Used internally to help sorting
  226. class CUIODListCtrlSortInfo : public CObject
  227. {
  228. public:
  229. CUIODListCtrlSortInfo(int nSubItem,int ColType,BOOL bSortAscending);
  230. BOOL Ascending() const;
  231. int GetColumn() const;
  232. int GetColType() const;
  233. private:
  234. BOOL m_bSortAscending;
  235. int m_nSubItem;
  236. int m_ColType;
  237. };
  238. inline CUIODListCtrlSortInfo::CUIODListCtrlSortInfo(int nSubItem,int ColType,BOOL bSortAscending) 
  239. : m_nSubItem(nSubItem),m_ColType(ColType),m_bSortAscending(bSortAscending)
  240. {
  241. }
  242. inline BOOL CUIODListCtrlSortInfo::Ascending() const
  243. {
  244. return m_bSortAscending;
  245. }
  246. inline int CUIODListCtrlSortInfo::GetColumn() const
  247. {
  248. return m_nSubItem;
  249. }
  250. inline int CUIODListCtrlSortInfo::GetColType() const
  251. {
  252. return m_ColType;
  253. }
  254. #endif // __LISTCTRLDATA_H__