ColorListBox.CPP
上传用户:juying163
上传日期:2014-09-24
资源大小:5867k
文件大小:6k
源码类别:

GIS编程

开发平台:

Visual C++

  1. #include "stdafx.h"
  2. #include "ColorListBox.h"
  3. #ifdef _DEBUG
  4. #define new DEBUG_NEW
  5. #undef THIS_FILE
  6. static char THIS_FILE[] = __FILE__;
  7. #endif
  8. /////////////////////////////////////////////////////////////////////////////
  9. // CColorListBox
  10. CColorListBox::CColorListBox()
  11. {
  12. }
  13. CColorListBox::~CColorListBox()
  14. {
  15. }
  16. BEGIN_MESSAGE_MAP(CColorListBox, CListBox)
  17. //{{AFX_MSG_MAP(CColorListBox)
  18. // NOTE - the ClassWizard will add and remove mapping macros here.
  19. //}}AFX_MSG_MAP
  20. END_MESSAGE_MAP()
  21. /////////////////////////////////////////////////////////////////////////////
  22. // CColorListBox message handlers
  23. void CColorListBox::DrawItem(LPDRAWITEMSTRUCT lpdis) 
  24. {
  25. if (lpdis->itemID < 0)
  26. return; 
  27. COLORREF cr=(COLORREF)lpdis->itemData;//RGB in item data
  28. COLORREF cvText;
  29. COLORREF cvBack;
  30. CString itemString; 
  31. if ((lpdis->itemState & ODS_SELECTED) && // if item has been selected
  32. (lpdis->itemAction & (ODA_SELECT | ODA_DRAWENTIRE)))
  33. DrawFocusRect(lpdis->hDC, &lpdis->rcItem); 
  34. if (!(lpdis->itemState & ODS_SELECTED) && // if item has been deselected
  35. (lpdis->itemAction & ODA_SELECT))
  36. DrawFocusRect(lpdis->hDC, &lpdis->rcItem); 
  37. if(lpdis->itemData) // if color information is present
  38. cvText = SetTextColor(lpdis->hDC, RGB(0,0,0));
  39. else // if no color information, use default system colors
  40. cvText = SetTextColor(lpdis->hDC, RGB(255,255,255));//GetSysColor((lpdis->itemState & ODS_SELECTED)
  41. //? COLOR_HIGHLIGHTTEXT : COLOR_WINDOWTEXT)); 
  42. // always use system colors for background
  43. cvBack = SetBkColor(lpdis->hDC, cr);//GetSysColor((lpdis->itemState & ODS_SELECTED)
  44. //? COLOR_HIGHLIGHT : COLOR_WINDOW)); 
  45. // get and display item text
  46. GetText(lpdis->itemID, itemString );
  47. DrawText(lpdis->hDC, itemString, -1, &lpdis->rcItem, DT_LEFT | DT_SINGLELINE); 
  48. // restore DC colors
  49. SetTextColor(lpdis->hDC, cvText); 
  50. SetBkColor(lpdis->hDC,cr); 
  51.  
  52. CDC*pDC=CDC::FromHandle(lpdis->hDC);
  53. if(lpdis->itemAction & ODA_DRAWENTIRE)
  54. {
  55. CBrush br(cr);
  56. pDC->FillRect(&lpdis->rcItem,&br);
  57. }
  58.     if((lpdis->itemState & ODS_SELECTED)&&
  59.        (lpdis->itemAction & (ODA_SELECT | ODA_DRAWENTIRE)))
  60.     {
  61.          COLORREF crHilite=RGB(255-GetRValue(cr),255-GetGValue(cr),255-GetBValue(cr ));
  62.          CBrush br( crHilite);
  63.          pDC->FrameRect( &lpdis->rcItem,&br );
  64.     }
  65.     if(!(lpdis->itemState&ODS_SELECTED)&&(lpdis->itemAction&ODA_SELECT))
  66. {
  67. CBrush br( cr);
  68.         pDC->FrameRect(&lpdis->rcItem,&br);
  69. }
  70. //***********************************************
  71. // original AddString() method
  72. //
  73. // purpose: Add a string to the listbox
  74. //
  75. // parameters: 
  76. // lpszItem: pointer to item text
  77. //
  78. // remarks:
  79. // provided because CListBox::AddString is 
  80. // NOT virtual
  81. //
  82. // return: item index
  83. //***********************************************
  84. int CColorListBox::AddString( LPCTSTR lpszItem)
  85. {
  86. return ((CListBox*)this)->AddString(lpszItem);
  87. //***********************************************
  88. // new AddString() method
  89. //
  90. // purpose: Add a string to the listbox
  91. //
  92. // parameters: 
  93. // lpszItem: pointer to item text
  94. // rgb: text color as a COLORREF
  95. //
  96. // return: item index
  97. //***********************************************
  98. int CColorListBox::AddString( LPCTSTR lpszItem,COLORREF rgb )
  99. {
  100.   
  101. int item = AddString(lpszItem);
  102. if(item >=0)
  103. SetItemData(item,rgb);
  104. return item;
  105. //***********************************************
  106. // new InsertString() method
  107. //
  108. // purpose: Insert a string to the listbox
  109. //
  110. // parameters: 
  111. // nIndex: index of inserted item
  112. // lpszItem: pointer to item text
  113. // rgb: text color as a COLORREF
  114. //
  115. // return: item index
  116. //***********************************************
  117. int CColorListBox::InsertString( int nIndex, LPCTSTR lpszItem, COLORREF rgb)
  118. {
  119. int item = ((CListBox*)this)->InsertString(nIndex,lpszItem);
  120. if(item >=0)
  121. SetItemData(item,rgb);
  122. return item; 
  123. }
  124. //void CColorListBox::AddColorItem(COLORREF color)
  125. //{
  126. //  //Listbox does not have the LBS_HASSTRINGS style,so the
  127. //  
  128. // //normal listbox string is used to store an RGB color
  129. //     
  130. //int item=AddString((LPCTSTR) color);
  131. // 
  132. //
  133. //    
  134. //}
  135. //
  136. #define COLOR_ITEM_HEIGHT     20
  137. void CColorListBox::MeasureItem(LPMEASUREITEMSTRUCT lpMIS)
  138.  AfxMessageBox("1");
  139.          lpMIS->itemHeight =COLOR_ITEM_HEIGHT;
  140. }
  141. //void CColorListBox::Drawltem(LPDRAWITEMSTRUCT lpDIS)
  142. //{
  143. //  
  144. //
  145. // CDC*pDC=CDC::FromHandle(lpDIS->hDC);
  146. //
  147. // COLORREF cr=(COLORREF)lpDIS->itemData;//RGB in item data
  148. //
  149. // if(lpDIS->itemAction & ODA_DRAWENTIRE)
  150. // {
  151. // CBrush br(cr);
  152. // pDC->FillRect(&lpDIS->rcItem,&br);
  153. //
  154. // }
  155. //
  156. //    if((lpDIS->itemState & ODS_SELECTED)&&
  157. //       (lpDIS->itemAction & (ODA_SELECT | ODA_DRAWENTIRE)))
  158. //    {
  159. //         COLORREF crHilite=RGB(255-GetRValue(cr),255-GetGValue(cr),255-GetBValue(cr ));
  160. //         CBrush br( crHilite);
  161. //         pDC->FrameRect( &lpDIS->rcItem,&br );
  162. //    }
  163. //
  164. //    if(!(lpDIS->itemState&ODS_SELECTED)&&(lpDIS->itemAction&ODA_SELECT))
  165. // {
  166. // CBrush br( cr);
  167. //        pDC->FrameRect(&lpDIS->rcItem,&br);
  168. // }
  169. //}
  170. //int CColorListBox::Compareltem(LPCOMPAREITEMSTRUCT lpCIS)
  171. //{  AfxMessageBox("3");
  172. //
  173. // COLORREF cr1=(COLORREF)lpCIS->itemData1;
  174. //
  175. // COLORREF cr2=(COLORREF)lpCIS->itemData2;
  176. //
  177. // if(cr1== cr2)  return 0;//exact match
  178. //
  179. // int intensity1=GetRValue(cr1)+GetGValue(cr1)+GetBValue(cr1);
  180. //
  181. // int intensity2=GetRValue(cr2)+GetGValue(cr2)+GetBValue(cr2);
  182. //
  183. // if(intensity1<intensity2)
  184. //           return-1;//lower intensity goes first
  185. //    else if(intensity1>intensity2)
  186. //           return 1;//higher intensity goes second
  187. //    if(GetBValue(cr1)>GetBValue(cr2))
  188. //          return -1;
  189. //    else if(GetGValue(cr1)>GetGValue(cr2))
  190. //          return -3;
  191. //    else if(GetRValue(cr1)>GetRValue(cr2))
  192. //          return -1;
  193. //    else
  194. //         return 1;
  195. //}