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

图形图象

开发平台:

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. /**********************************************************/
  18. /* implementation of class CUIListCtrlData                  */
  19. /*                                                        */
  20. /**********************************************************/
  21. #include "stdafx.h"
  22. #include "UIData.h"
  23. #ifdef _DEBUG
  24. #undef THIS_FILE
  25. static char BASED_CODE THIS_FILE[] = __FILE__;
  26. #endif
  27. /////////////////////////////////////////////////////////////////////////////
  28. // CIconObj
  29. IMPLEMENT_DYNAMIC(CUIODColumnCtrl, CObject)
  30. IMPLEMENT_DYNAMIC(CUIListCtrlData, CObject)
  31. IMPLEMENT_DYNAMIC(CUIDBListCtrlData, CUIListCtrlData)
  32. IMPLEMENT_DYNAMIC(CUIStrListCtrlData, CUIListCtrlData)
  33. IMPLEMENT_DYNAMIC(CUIComboBoxData, CUIListCtrlData)
  34. /////////////////////////////////////////////////////////////////////////////
  35. // CUIListCtrlData construction/destruction
  36. CUIListCtrlData::CUIListCtrlData(int nCols)
  37. {
  38. Init(nCols);
  39. }
  40. void CUIListCtrlData::Init(int nCols)
  41. {
  42. const int cMaxCols=50;
  43. m_arCtrl.SetSize(nCols < cMaxCols ? cMaxCols : nCols);
  44. m_arFonts.SetSize(nCols < cMaxCols ? cMaxCols : nCols);
  45. m_arTextColors.SetSize(nCols < cMaxCols ? cMaxCols : nCols);
  46. m_arBkColors.SetSize(nCols);
  47. for(int i=0;i < nCols;i++)
  48. {
  49. SetDefaultTextColor(i);
  50. SetDefaultBkColor(i);
  51. }
  52. m_dwExtData = 0;
  53. m_bAutoDelete = false;
  54. m_bDeleted = false;
  55. }
  56. CUIListCtrlData::~CUIListCtrlData()
  57. {
  58. DestroyCtrls();
  59. DestroyFonts();
  60. }
  61. void CUIListCtrlData::DestroyFonts()
  62. {
  63. CFont *pFont=NULL;
  64. for(int i=0;i < m_arFonts.GetSize();i++)
  65. {
  66. pFont = (CFont*)m_arFonts[i];
  67. delete pFont;
  68. }
  69. }
  70. void CUIListCtrlData::DestroyCtrls()
  71. {
  72. CUIODColumnCtrl *pCtrl=NULL;
  73. for(int i=0;i < m_arCtrl.GetSize();i++)
  74. {
  75. pCtrl = (CUIODColumnCtrl*)m_arCtrl[i];
  76. delete pCtrl;
  77. }
  78. }
  79. BOOL CUIListCtrlData::IsFontSet(int nCol) const
  80. {
  81. if (nCol == -1)
  82. {
  83. BOOL bRet=TRUE;
  84. for(int i=0;i < m_arFonts.GetSize();i++)
  85. {
  86. if (m_arFonts[i] == NULL)
  87. {
  88. bRet = FALSE;
  89. break;
  90. }
  91. }
  92. return bRet;
  93. }
  94. return(m_arFonts[nCol] && ((CFont*)m_arFonts[nCol])->GetSafeHandle() != NULL);
  95. }
  96. void CUIListCtrlData::SetFont(CFont *pFont,int nCol) 
  97. LOGFONT lf;
  98. pFont->GetLogFont(&lf);
  99. if (nCol == -1)
  100. {
  101. for(int i=0;i < m_arFonts.GetSize();i++)
  102. {
  103. CreateNewFont(i,lf);
  104. }
  105. }
  106. else
  107. {
  108. CreateNewFont(nCol,lf);
  109. }
  110. }
  111. void CUIListCtrlData::CreateNewFont(int nCol,LOGFONT &lf)
  112. {
  113. CFont *pNewFont = NULL;
  114. CFont *pOldFont = (CFont*)m_arFonts[nCol];
  115. if (pOldFont)
  116. {
  117. if (pOldFont->GetSafeHandle())
  118. pOldFont->DeleteObject();
  119. pNewFont = pOldFont;
  120. }
  121. else
  122. pNewFont = new CFont;
  123. pNewFont->CreateFontIndirect(&lf);
  124. m_arFonts[nCol] = pNewFont;
  125. }
  126. /////////////////////////////////////////////////////////////////////////////
  127. //
  128. // CUIComboBoxData 
  129. // 
  130. /////////////////////////////////////////////////////////////////////////////
  131. // columns in a combo box
  132. CString CUIComboBoxData::GetText(int nCol) const
  133. TCHAR szDest[256];
  134. if (nCol == -1 || m_strText.IsEmpty())
  135. return m_strText; 
  136. LPCTSTR p = m_strText; 
  137. LPTSTR pDest;
  138. nCol++;
  139. while (nCol > 0) 
  140. {
  141. pDest = szDest;
  142. while (*p && *p != _T('t')) 
  143. {
  144.   *pDest = *p;
  145.   pDest = _tcsinc(pDest);
  146.   p = _tcsinc(p);
  147. }
  148.    nCol--;
  149.    if (*p == _T('t'))
  150.    p = _tcsinc(p);
  151.    else
  152.    break;
  153. *pDest = '';
  154. CString str;
  155. if (nCol)
  156. str.Empty();
  157. else
  158. str = szDest;
  159. return str;
  160. }
  161. /////////////////////////////////////////////////////////////////////////////
  162. // CUIStrListCtrlData 
  163. /////////////////////////////////////////////////////////////////////////////
  164. CUIStrListCtrlData::CUIStrListCtrlData(int nColumns) : CUIListCtrlData(nColumns)
  165. {
  166. m_StringArray.SetSize(nColumns);
  167. }
  168. LPTSTR CUIStrListCtrlData::GetString(int nCol)
  169. return (LPTSTR)(LPCTSTR)m_StringArray[nCol];
  170. }
  171. // return TRUE if needs updating
  172. BOOL CUIStrListCtrlData::AddString(int nCol,LPCTSTR szStr)
  173. if (nCol < 0)
  174. return FALSE;
  175. BOOL ret = !m_StringArray[nCol].IsEmpty();
  176. m_StringArray[nCol] = szStr;
  177. return ret;
  178. }
  179. /////////////////////////////////////////////////////////////////////////////