colorlis.cpp
上传用户:szled88
上传日期:2015-04-09
资源大小:43957k
文件大小:4k
源码类别:

对话框与窗口

开发平台:

Visual C++

  1. // colorlis.cpp : implementation file
  2. //
  3. // This file is a part of the XTREME TOOLKIT PRO MFC class library.
  4. // (c)1998-2008 Codejock Software, All Rights Reserved.
  5. //
  6. // THIS SOURCE FILE IS THE PROPERTY OF CODEJOCK SOFTWARE AND IS NOT TO BE
  7. // RE-DISTRIBUTED BY ANY MEANS WHATSOEVER WITHOUT THE EXPRESSED WRITTEN
  8. // CONSENT OF CODEJOCK SOFTWARE.
  9. //
  10. // THIS SOURCE CODE CAN ONLY BE USED UNDER THE TERMS AND CONDITIONS OUTLINED
  11. // IN THE XTREME TOOLKIT PRO LICENSE AGREEMENT. CODEJOCK SOFTWARE GRANTS TO
  12. // YOU (ONE SOFTWARE DEVELOPER) THE LIMITED RIGHT TO USE THIS SOFTWARE ON A
  13. // SINGLE COMPUTER.
  14. //
  15. // CONTACT INFORMATION:
  16. // support@codejock.com
  17. // http://www.codejock.com
  18. //
  19. /////////////////////////////////////////////////////////////////////////////
  20. #include "stdafx.h"
  21. #include "wordpad.h"
  22. #include "colorlis.h"
  23. #ifdef _DEBUG
  24. #undef THIS_FILE
  25. static char BASED_CODE THIS_FILE[] = __FILE__;
  26. #endif
  27. /////////////////////////////////////////////////////////////////////////////
  28. // CColorMenu
  29. /*
  30. int BASED_CODE CColorMenu::indexMap[17] = {
  31. 0,      //black
  32. 19,     //white
  33. 13,     //red
  34. 14,     //green
  35. 16,     //blue
  36. 15,     //yellow
  37. 17,     //magenta
  38. 18,     //cyan
  39. 1,      //dark red
  40. 2,      //dark green
  41. 4,      //dark blue
  42. 3,      //light brown
  43. 5,      //purple
  44. 6,      //dark cyan
  45. 7,      //light gray
  46. 12,     //gray
  47. 0};     //automatic
  48. */
  49. int BASED_CODE CColorMenu::indexMap[17] = {
  50. 0,      //black
  51. 1,      //dark red
  52. 2,      //dark green
  53. 3,      //light brown
  54. 4,      //dark blue
  55. 5,      //purple
  56. 6,      //dark cyan
  57. 12,     //gray
  58. 7,      //light gray
  59. 13,     //red
  60. 14,     //green
  61. 15,     //yellow
  62. 16,     //blue
  63. 17,     //magenta
  64. 18,     //cyan
  65. 19,     //white
  66. 0};     //automatic
  67. CColorMenu::CColorMenu()
  68. {
  69. VERIFY(CreatePopupMenu());
  70. ASSERT(GetMenuItemCount()==0);
  71. for (int i=0; i<=16;i++)
  72. VERIFY(AppendMenu(MF_OWNERDRAW, ID_COLOR0+i, (LPCTSTR)(DWORD_PTR)(ID_COLOR0+i)));
  73. }
  74. COLORREF CColorMenu::GetColor(UINT id)
  75. {
  76. ASSERT(id >= ID_COLOR0);
  77. ASSERT(id <= ID_COLOR16);
  78. if (id == ID_COLOR16) // autocolor
  79. return ::GetSysColor(COLOR_WINDOWTEXT);
  80. else
  81. {
  82. CPalette* pPal = CPalette::FromHandle( (HPALETTE) GetStockObject(DEFAULT_PALETTE));
  83. ASSERT(pPal != NULL);
  84. PALETTEENTRY pe;
  85. if (pPal->GetPaletteEntries(indexMap[id-ID_COLOR0], 1, &pe) == 0)
  86. return ::GetSysColor(COLOR_WINDOWTEXT);
  87. else
  88. return RGB(pe.peRed,pe.peGreen,pe.peBlue);
  89. //      return PALETTEINDEX(CColorMenu::indexMap[id-ID_COLOR0]);
  90. }
  91. }
  92. void CColorMenu::DrawItem(LPDRAWITEMSTRUCT lpDIS)
  93. {
  94. ASSERT(lpDIS->CtlType == ODT_MENU);
  95. UINT id = (UINT)(WORD)lpDIS->itemID;
  96. ASSERT(id == lpDIS->itemData);
  97. ASSERT(id >= ID_COLOR0);
  98. ASSERT(id <= ID_COLOR16);
  99. CDC dc;
  100. dc.Attach(lpDIS->hDC);
  101. CRect rc(lpDIS->rcItem);
  102. ASSERT(rc.Width() < 500);
  103. if (lpDIS->itemState & ODS_FOCUS)
  104. dc.DrawFocusRect(&rc);
  105. COLORREF cr = (lpDIS->itemState & ODS_SELECTED) ?
  106. ::GetSysColor(COLOR_HIGHLIGHT) :
  107. dc.GetBkColor();
  108. CBrush brushFill(cr);
  109. cr = dc.GetTextColor();
  110. if (lpDIS->itemState & ODS_SELECTED)
  111. dc.SetTextColor(::GetSysColor(COLOR_HIGHLIGHTTEXT));
  112. int nBkMode = dc.SetBkMode(TRANSPARENT);
  113. dc.FillRect(&rc, &brushFill);
  114. rc.left += 50;
  115. CString strColor;
  116. strColor.LoadString(id);
  117. dc.TextOut(rc.left,rc.top,strColor,strColor.GetLength());
  118. rc.left -= 45;
  119. rc.top += 2;
  120. rc.bottom -= 2;
  121. rc.right = rc.left + 40;
  122. CBrush brush(GetColor(id));
  123. CBrush* pOldBrush = dc.SelectObject(&brush);
  124. dc.Rectangle(rc);
  125. dc.SelectObject(pOldBrush);
  126. dc.SetTextColor(cr);
  127. dc.SetBkMode(nBkMode);
  128. dc.Detach();
  129. }
  130. void CColorMenu::MeasureItem(LPMEASUREITEMSTRUCT lpMIS)
  131. {
  132. ASSERT(lpMIS->CtlType == ODT_MENU);
  133. UINT id = (UINT)(WORD)lpMIS->itemID;
  134. ASSERT(id == lpMIS->itemData);
  135. ASSERT(id >= ID_COLOR0);
  136. ASSERT(id <= ID_COLOR16);
  137. CDisplayIC dc;
  138. CString strColor;
  139. strColor.LoadString(id);
  140. CSize sizeText = dc.GetTextExtent(strColor,strColor.GetLength());
  141. ASSERT(sizeText.cx < 500);
  142. lpMIS->itemWidth = sizeText.cx + 50;
  143. lpMIS->itemHeight = sizeText.cy;
  144. }