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

对话框与窗口

开发平台:

Visual C++

  1. // XTPOffice2003Theme.cpp : implementation of the CXTPOffice2003Theme class.
  2. //
  3. // This file is a part of the XTREME COMMANDBARS 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 "Resource.h"
  22. #include "Common/XTPVC80Helpers.h"
  23. #include "Common/XTPImageManager.h"
  24. #include "Common/XTPDrawHelpers.h"
  25. #include "Common/XTPColorManager.h"
  26. #include "Common/XTPHookManager.h"
  27. #include "XTPControlButton.h"
  28. #include "XTPControlPopup.h"
  29. #include "XTPToolBar.h"
  30. #include "XTPPopupBar.h"
  31. #include "XTPDialogBar.h"
  32. #include "XTPControlComboBox.h"
  33. #include "XTPControls.h"
  34. #include "XTPMessageBar.h"
  35. #include "XTPOffice2003Theme.h"
  36. #ifdef _DEBUG
  37. #define new DEBUG_NEW
  38. #undef THIS_FILE
  39. static char THIS_FILE[] = __FILE__;
  40. #endif
  41. //////////////////////////////////////////////////////////////////////
  42. // CXTPOffice2003Theme
  43. CXTPOffice2003Theme::CXTPOffice2003Theme()
  44. {
  45. m_iconsInfo.bUseFadedIcons = FALSE;
  46. m_iconsInfo.bIconsWithShadow = FALSE;
  47. m_grcLunaChecked.SetStandardValue(RGB(255, 213, 140), RGB(255, 173, 85));
  48. m_grcLunaPushed.SetStandardValue(RGB(254, 142, 75), RGB(255, 207, 139));
  49. m_grcLunaSelected.SetStandardValue(RGB(255, 242, 200), RGB(255, 212, 151));
  50. m_bPlainSeparators = FALSE;
  51. }
  52. CXTPOffice2003Theme::~CXTPOffice2003Theme()
  53. {
  54. }
  55. void CXTPOffice2003Theme::RefreshMetrics()
  56. {
  57. CXTPOfficeTheme::RefreshMetrics();
  58. HWND hWnd = AfxGetMainWnd() ? AfxGetMainWnd()->GetSafeHwnd() : 0;
  59. m_themeStatusBar.OpenThemeData(hWnd, L"STATUS");
  60. m_clrMenuExpandedGripper.SetStandardValue(XTPColorManager()->LightColor(GetXtremeColor(COLOR_WINDOW), GetXtremeColor(XPCOLOR_MENUBAR_EXPANDED), 550), GetXtremeColor(XPCOLOR_MENUBAR_EXPANDED));
  61. m_clrCommandBar.SetStandardValue(XTPColorManager()->LightColor(GetXtremeColor(COLOR_3DFACE), GetXtremeColor(COLOR_WINDOW), 0xcd), GetXtremeColor(COLOR_3DFACE));
  62. m_clrDockBar.SetStandardValue(GetXtremeColor(COLOR_3DFACE), XTPColorManager()->LightColor(GetXtremeColor(COLOR_3DFACE), GetXtremeColor(COLOR_WINDOW), 0xcd));
  63. m_clrTearOffGripper.SetStandardValue(GetXtremeColor(XPCOLOR_TOOLBAR_FACE));
  64. m_clrToolbarShadow.SetStandardValue(GetXtremeColor(XPCOLOR_TOOLBAR_FACE));
  65. m_clrFloatingGripper.SetStandardValue(GetXtremeColor(COLOR_3DSHADOW));
  66. m_clrPopupControl.SetStandardValue(GetXtremeColor(XPCOLOR_MENUBAR_FACE),
  67. XTPColorManager()->LightColor(GetXtremeColor(COLOR_WINDOW), GetXtremeColor(COLOR_3DFACE), 550));
  68. m_clrToolbarExpand.SetStandardValue(XTPColorManager()->LightColor(GetXtremeColor(XPCOLOR_3DFACE), GetXtremeColor(COLOR_3DSHADOW), 51), GetXtremeColor(COLOR_3DSHADOW));
  69. m_bLunaTheme = FALSE;
  70. m_clrMenuExpand.SetStandardValue(GetXtremeColor(XPCOLOR_MENUBAR_FACE),
  71. XTPColorManager()->LightColor(GetXtremeColor(COLOR_WINDOW), GetXtremeColor(COLOR_3DFACE), 550));
  72. m_clrStatusPane.SetStandardValue(XTPColorManager()->LightColor(GetXtremeColor(COLOR_3DFACE), GetXtremeColor(COLOR_WINDOW), 70));
  73. m_arrColor[XPCOLOR_SPLITTER_FACE].SetStandardValue(XTPColorManager()->grcDockBar.clrDark);
  74. if (XTPColorManager()->IsLowResolution())
  75. {
  76. m_clrCommandBar.SetStandardValue(GetXtremeColor(COLOR_3DFACE));
  77. m_clrDockBar.SetStandardValue(GetXtremeColor(COLOR_3DFACE));
  78. m_clrPopupControl.SetStandardValue(GetXtremeColor(COLOR_3DFACE));
  79. m_clrToolbarExpand.SetStandardValue(GetXtremeColor(COLOR_3DFACE));
  80. }
  81. switch (GetCurrentSystemTheme())
  82. {
  83. case xtpSystemThemeBlue:
  84. case xtpSystemThemeRoyale:
  85. case xtpSystemThemeAero:
  86. {
  87. m_clrDockBar.SetStandardValue(RGB(158, 190, 245), RGB(196, 218, 250));
  88. m_clrToolbarShadow.SetStandardValue(RGB(59, 97, 156));
  89. m_clrCommandBar.SetStandardValue(RGB(221, 236, 254), RGB(129, 169, 226), 0.75f);
  90. m_clrFloatingGripper.SetStandardValue(RGB(42, 102, 201));
  91. m_clrPopupControl.SetStandardValue(RGB(227, 239, 255), RGB(147, 181, 231));
  92. m_clrToolbarExpand.SetStandardValue(RGB(117, 166, 241), RGB(0, 53, 145), 0.75f);
  93. m_clrMenuExpandedGripper.SetStandardValue(RGB(203, 221, 246), RGB(121, 161, 220));
  94. m_clrMenuExpand.SetStandardValue(0xFEEFE3, 0xE2A981);
  95. m_clrStatusPane.SetStandardValue(RGB(211, 211, 211));
  96. m_pShadowManager->SetShadowColor(RGB(0x16, 0x1E, 0x36));
  97. m_clrTearOffGripper.SetStandardValue(RGB(169, 199, 240));
  98. m_clrDisabledIcon.SetStandardValue(RGB(233, 236, 242), RGB(97, 122, 172));
  99. m_arrColor[XPCOLOR_EDITCTRLBORDER].SetStandardValue(RGB(203, 225, 252));
  100. m_arrColor[XPCOLOR_3DFACE].SetStandardValue(RGB(216, 231, 252));
  101. m_arrColor[XPCOLOR_3DSHADOW].SetStandardValue(RGB(158, 190, 245));
  102. m_arrColor[COLOR_APPWORKSPACE].SetStandardValue(RGB(144, 153, 174));
  103. m_arrColor[XPCOLOR_LABEL].SetStandardValue(RGB(189, 211, 247));
  104. INT nElements[] =
  105. {
  106. XPCOLOR_TOOLBAR_GRIPPER, XPCOLOR_SEPARATOR, XPCOLOR_DISABLED, XPCOLOR_MENUBAR_FACE, XPCOLOR_MENUBAR_BORDER, XPCOLOR_HIGHLIGHT, XPCOLOR_HIGHLIGHT_BORDER, XPCOLOR_HIGHLIGHT_PUSHED_BORDER, XPCOLOR_HIGHLIGHT_CHECKED_BORDER, XPCOLOR_HIGHLIGHT_PUSHED, XPCOLOR_HIGHLIGHT_CHECKED, XPCOLOR_TOOLBAR_FACE, XPCOLOR_PUSHED_TEXT
  107. };
  108. COLORREF clrValues[] =
  109. {
  110. RGB(39, 65, 118), RGB(106, 140, 203), RGB(109, 150, 208), RGB(246, 246, 246), RGB(0, 45, 150), RGB(255, 238, 194), RGB(0, 0, 128), RGB(0, 0, 128), RGB(0, 0, 128), RGB(254, 128, 62), RGB(255, 192, 111), RGB(196, 219, 249), 0
  111. };
  112. SetColors(sizeof(nElements)/sizeof(INT), nElements, clrValues);
  113. m_bLunaTheme = TRUE;
  114. }
  115. break;
  116. case xtpSystemThemeOlive:
  117. {
  118. m_clrDockBar.SetStandardValue(RGB(217, 217, 167), RGB(242, 241, 228));
  119. m_clrCommandBar.SetStandardValue(RGB(244, 247, 222), RGB(183, 198, 145), 0.3f);
  120. m_clrToolbarShadow.SetStandardValue(RGB(96, 128, 88));
  121. m_clrFloatingGripper.SetStandardValue(RGB(116, 134, 94));
  122. m_clrPopupControl.SetStandardValue(RGB(236, 240, 213), RGB(194, 206, 159));
  123. m_clrToolbarExpand.SetStandardValue(RGB(176, 194, 140), RGB(96, 119, 107), 0.3f);
  124. m_clrMenuExpandedGripper.SetStandardValue(RGB(230, 230, 209), RGB(164, 180, 120), 0.3f);
  125. m_clrMenuExpand.SetStandardValue(0xD5F0EC, 0x93C6B8);
  126. m_clrStatusPane.SetStandardValue(RGB(211, 211, 211));
  127. m_pShadowManager->SetShadowColor(RGB(0x1F, 0x22, 0x19));
  128. m_clrDisabledIcon.SetStandardValue(RGB(243, 244, 240), RGB(131, 144, 113));
  129. m_clrTearOffGripper.SetStandardValue(RGB(197, 212, 159));
  130. m_arrColor[XPCOLOR_EDITCTRLBORDER].SetStandardValue(RGB(216, 227, 182));
  131. m_arrColor[XPCOLOR_3DFACE].SetStandardValue(RGB(226, 231, 191));
  132. m_arrColor[XPCOLOR_3DSHADOW].SetStandardValue(RGB(171, 192, 138));
  133. m_arrColor[COLOR_APPWORKSPACE].SetStandardValue(RGB(151, 160, 123));
  134. m_arrColor[XPCOLOR_LABEL].SetStandardValue(RGB(222, 227, 189));
  135. INT nElements[] =
  136. {
  137. XPCOLOR_TOOLBAR_GRIPPER, XPCOLOR_SEPARATOR, XPCOLOR_DISABLED, XPCOLOR_MENUBAR_FACE, XPCOLOR_MENUBAR_BORDER, XPCOLOR_HIGHLIGHT, XPCOLOR_HIGHLIGHT_BORDER, XPCOLOR_HIGHLIGHT_CHECKED_BORDER, XPCOLOR_HIGHLIGHT_PUSHED_BORDER, XPCOLOR_HIGHLIGHT_PUSHED, XPCOLOR_HIGHLIGHT_CHECKED, XPCOLOR_TOOLBAR_FACE, XPCOLOR_PUSHED_TEXT
  138. };
  139. COLORREF clrValues[] =
  140. {
  141. RGB(81, 94, 51), RGB(96, 128, 88), RGB(159, 174, 122), RGB(244, 244, 238), RGB(117, 141, 94), RGB(255, 238, 194), RGB(63, 93, 56), RGB(63, 93, 56), RGB(63, 93, 56), RGB(254, 128, 62), RGB(255, 192, 111), RGB(209, 222, 173), 0
  142. };
  143. SetColors(sizeof(nElements)/sizeof(INT), nElements, clrValues);
  144. m_bLunaTheme = TRUE;
  145. }
  146. break;
  147. case xtpSystemThemeSilver:
  148. {
  149. m_clrDockBar.SetStandardValue(RGB(215, 215, 229), RGB(243, 243, 247));
  150. m_clrToolbarShadow.SetStandardValue(RGB(124, 124, 148));
  151. m_clrCommandBar.SetStandardValue(RGB(249, 249, 255), RGB(156, 155, 183), 0.75f);
  152. m_clrFloatingGripper.SetStandardValue(RGB(122, 121, 153));
  153. m_clrPopupControl.SetStandardValue(RGB(233, 231, 241), RGB(186, 185, 205));
  154. m_clrToolbarExpand.SetStandardValue(RGB(179, 178, 200), RGB(118, 116, 146), 0.75f);
  155. m_clrMenuExpandedGripper.SetStandardValue(RGB(215, 215, 226), RGB(133, 131, 162));
  156. m_clrMenuExpand.SetStandardValue(0xF1E8E8, 0xC5AEB0);
  157. m_clrStatusPane.SetStandardValue(RGB(236, 234, 218));
  158. m_pShadowManager->SetShadowColor(RGB(0x24, 0x20, 0x29));
  159. m_clrDisabledIcon.SetStandardValue(RGB(247, 245, 249), RGB(122, 121, 153));
  160. m_clrTearOffGripper.SetStandardValue(RGB(192, 192, 211));
  161. m_arrColor[XPCOLOR_EDITCTRLBORDER].SetStandardValue(RGB(214, 211, 231));
  162. m_arrColor[XPCOLOR_3DFACE].SetStandardValue(RGB(223, 223, 234));
  163. m_arrColor[XPCOLOR_3DSHADOW].SetStandardValue(RGB(177, 176, 195));
  164. m_arrColor[COLOR_APPWORKSPACE].SetStandardValue(RGB(155, 154, 179));
  165. m_arrColor[XPCOLOR_LABEL].SetStandardValue(RGB(214, 215, 231));
  166. INT nElements[] =
  167. {
  168. XPCOLOR_TOOLBAR_GRIPPER, XPCOLOR_SEPARATOR, XPCOLOR_DISABLED, XPCOLOR_MENUBAR_FACE, XPCOLOR_MENUBAR_BORDER, XPCOLOR_HIGHLIGHT, XPCOLOR_HIGHLIGHT_BORDER, XPCOLOR_HIGHLIGHT_CHECKED_BORDER, XPCOLOR_HIGHLIGHT_PUSHED_BORDER, XPCOLOR_HIGHLIGHT_PUSHED, XPCOLOR_HIGHLIGHT_CHECKED, XPCOLOR_TOOLBAR_FACE, XPCOLOR_PUSHED_TEXT
  169. };
  170. COLORREF clrValues[] =
  171. {
  172. RGB(84, 84, 117), RGB(110, 109, 143), RGB(168, 167, 190), RGB(253, 250, 255), RGB(124, 124, 148), RGB(255, 238, 194), RGB(75, 75, 111), RGB(75, 75, 111), RGB(75, 75, 111), RGB(254, 128, 62), RGB(255, 192, 111), RGB(219, 218, 228), 0
  173. };
  174. SetColors(sizeof(nElements)/sizeof(INT), nElements, clrValues);
  175. m_bLunaTheme = TRUE;
  176. }
  177. break;
  178. }
  179. if (m_bLunaTheme)
  180. {
  181. m_arrColor[XPCOLOR_HIGHLIGHT_DISABLED_BORDER].SetStandardValue(RGB(141, 141, 141));
  182. m_arrColor[XPCOLOR_TOOLBAR_GRAYTEXT].SetStandardValue(RGB(141, 141, 141));
  183. m_arrColor[XPCOLOR_MENUBAR_GRAYTEXT].SetStandardValue(RGB(141, 141, 141));
  184. m_arrColor[XPCOLOR_FLOATBAR_BORDER].SetStandardValue(m_clrFloatingGripper);
  185. }
  186. m_clrMenuGripper.SetStandardValue(m_clrCommandBar);
  187. CreateGradientCircle();
  188. }
  189. void CXTPOffice2003Theme::FillDockBar(CDC* pDC, CXTPDockBar* pBar)
  190. {
  191. if (((CWnd*)pBar)->GetStyle() & CBRS_RIGHT)
  192. pDC->FillSolidRect(CXTPClientRect((CWnd*)pBar), m_clrDockBar.clrDark);
  193. else
  194. {
  195. CXTPClientRect rc((CWnd*)pBar);
  196. CRect rcFill(rc.left, rc.top, max(rc.Width(), GetSystemMetrics(SM_CXFULLSCREEN) / 2), rc.bottom);
  197. XTPDrawHelpers()->GradientFill(pDC, rcFill, m_clrDockBar, TRUE, rc);
  198. }
  199. }
  200. void CXTPOffice2003Theme::FillMessageBar(CDC* pDC, CXTPMessageBar* pBar)
  201. {
  202. CXTPClientRect rc((CWnd*)pBar);
  203. CRect rcFill(rc.left, rc.top, max(rc.Width(), GetSystemMetrics(SM_CXFULLSCREEN) / 2), rc.bottom);
  204. XTPDrawHelpers()->GradientFill(pDC, rcFill, m_clrDockBar, TRUE, rc);
  205. CRect rcMessage = pBar->GetMessageRect();
  206. pDC->Draw3dRect(rcMessage, m_clrToolbarShadow, m_clrToolbarShadow);
  207. rcMessage.DeflateRect(1, 1);
  208. pDC->FillSolidRect(rcMessage, GetXtremeColor(COLOR_INFOBK));
  209. }
  210. void CXTPOffice2003Theme::ExcludeCorners(CDC* pDC, CRect rc)
  211. {
  212. pDC->ExcludeClipRect(rc.left, rc.top, rc.left + 1, rc.top + 1);
  213. pDC->ExcludeClipRect(rc.right - 1, rc.top, rc.right, rc.top + 1);
  214. pDC->ExcludeClipRect(rc.left, rc.bottom - 1, rc.left + 1, rc.bottom);
  215. pDC->ExcludeClipRect(rc.right - 1, rc.bottom - 1, rc.right, rc.bottom);
  216. }
  217. void CXTPOffice2003Theme::DrawPopupBarGripper(CDC* pDC, int x, int y, int cx, int cy, BOOL bExpanded)
  218. {
  219. XTPDrawHelpers()->GradientFill(pDC, CRect(CPoint(x, y), CSize(cx, cy)),
  220. bExpanded ? m_clrMenuExpandedGripper : m_clrMenuGripper, TRUE);
  221. }
  222. BOOL CXTPOffice2003Theme::HasFloatingBarGradientEntry(CXTPCommandBar* pBar)
  223. {
  224. return !IsFlatToolBar(pBar) && ((pBar->GetFlags() & xtpFlagAlignAny) != 0);
  225. }
  226. void CXTPOffice2003Theme::FillCommandBarEntry(CDC* pDC, CXTPCommandBar* pBar)
  227. {
  228. CXTPClientRect rc((CWnd*)pBar);
  229. if (pBar->GetPosition() == xtpBarPopup)
  230. {
  231. Rectangle(pDC, rc, XPCOLOR_MENUBAR_BORDER, XPCOLOR_MENUBAR_FACE);
  232. FillIntersectRect(pDC, (CXTPPopupBar*)pBar, GetXtremeColor(XPCOLOR_MENUBAR_FACE));
  233. }
  234. else if (IsFlatToolBar(pBar))
  235. {
  236. CRect rcFill(rc.left, rc.top, max(rc.Width(), GetSystemMetrics(SM_CXFULLSCREEN) / 2), rc.bottom);
  237. if (IsDockingPosition(pBar->GetPosition()))
  238. {
  239. CWnd* pParent = pBar->GetParent();
  240. if (pParent)
  241. {
  242. CRect rcClient;
  243. pParent->GetWindowRect(rcClient);
  244. pBar->ScreenToClient(rcClient);
  245. rcFill = CRect(rcClient.left, rc.top, rcClient.left + max(rcClient.Width(), GetSystemMetrics(SM_CXFULLSCREEN) / 2), rc.bottom);
  246. }
  247. }
  248. XTPDrawHelpers()->GradientFill(pDC, rcFill, m_clrDockBar, TRUE, rc);
  249. if (pBar->GetPosition() == xtpBarFloating)
  250. {
  251. COLORREF clr = GetXtremeColor(XPCOLOR_FLOATBAR_BORDER);
  252. pDC->Draw3dRect(rc, clr, clr);
  253. rc.DeflateRect(1, 1);
  254. pDC->Draw3dRect(rc, clr, clr);
  255. pDC->SetPixel(2, 2, clr);
  256. pDC->SetPixel(rc.right - 2, 2, clr);
  257. pDC->SetPixel(2, rc.bottom - 2, clr);
  258. pDC->SetPixel(rc.right - 2, rc.bottom - 2, clr);
  259. }
  260. }
  261. else if (pBar->GetPosition() == xtpBarTop || pBar->GetPosition() == xtpBarBottom)
  262. {
  263. COLORREF clr3DFace = GetXtremeColor(COLOR_3DFACE);
  264. pDC->FillSolidRect(rc, clr3DFace);
  265. CWnd* pWnd = pBar->GetParent();
  266. if (pWnd)
  267. {
  268. CXTPWindowRect rcFill((CWnd*)pWnd);
  269. pBar->ScreenToClient(rcFill);
  270. rcFill.right = rcFill.left + max(rcFill.Width(), GetSystemMetrics(SM_CXFULLSCREEN) / 2);
  271. XTPDrawHelpers()->GradientFill(pDC, rcFill, m_clrDockBar, TRUE, rc);
  272. pDC->ExcludeClipRect(rc.left, rc.top, rc.left + 3, rc.bottom);
  273. ExcludeCorners(pDC, CRect(rc.left + 3, rc.top + 1, rc.right, rc.bottom - 1));
  274. }
  275. CRect rcFill = rc;
  276. rcFill.top += 1;
  277. int nFirst = pBar->GetControls()->GetNext(-1, +1, FALSE, TRUE);
  278. if (nFirst != -1)
  279. {
  280. CRect rcRow = pBar->GetControls()->GetAt(nFirst)->GetRowRect();
  281. rcFill.bottom = rcRow.bottom + 1;
  282. }
  283. XTPDrawHelpers()->GradientFill(pDC, rcFill, m_clrCommandBar, FALSE);
  284. pDC->FillSolidRect(rcFill.left, rcFill.bottom, rcFill.Width(), rc.Height() - rcFill.Height() - 2, m_clrCommandBar.clrDark);
  285. pDC->FillSolidRect(rc.left + 5, rc.bottom - 1, rc.Width() - 7, 1, m_clrToolbarShadow);
  286. pDC->SelectClipRgn(0);
  287. }
  288. else if (pBar->GetPosition() == xtpBarLeft || pBar->GetPosition() == xtpBarRight)
  289. {
  290. COLORREF clr3DFace = GetXtremeColor(COLOR_3DFACE);
  291. pDC->FillSolidRect(rc, clr3DFace);
  292. CWnd* pWnd = pBar->GetParent();
  293. if (pWnd)
  294. {
  295. if (pWnd->GetStyle() & CBRS_RIGHT)
  296. pDC->FillSolidRect(rc, m_clrDockBar.clrDark);
  297. else
  298. {
  299. CXTPWindowRect rcFill((CWnd*)pWnd);
  300. pBar->ScreenToClient(rcFill);
  301. rcFill.right = rcFill.left + max(rcFill.Width(), GetSystemMetrics(SM_CXFULLSCREEN) / 2);
  302. XTPDrawHelpers()->GradientFill(pDC, rcFill, m_clrDockBar, TRUE, rc);
  303. }
  304. pDC->ExcludeClipRect(rc.left, rc.top, rc.right, rc.top + 3);
  305. ExcludeCorners(pDC, CRect(rc.left + 1, rc.top + 3, rc.right - 1, rc.bottom));
  306. }
  307. CRect rcFill = rc;
  308. rcFill.left += 1;
  309. int nFirst = pBar->GetControls()->GetNext(-1, +1, FALSE, TRUE);
  310. if (nFirst != -1)
  311. {
  312. CRect rcRow = pBar->GetControls()->GetAt(nFirst)->GetRowRect();
  313. rcFill.right = rcRow.right + 1;
  314. }
  315. XTPDrawHelpers()->GradientFill(pDC, rcFill, m_clrCommandBar, TRUE);
  316. pDC->FillSolidRect(rc.right - 1, rc.top + 5 , 1, rc.Height() - 7, m_clrToolbarShadow);
  317. pDC->SelectClipRgn(0);
  318. }
  319. else if (pBar->GetPosition() == xtpBarFloating && HasFloatingBarGradientEntry(pBar))
  320. {
  321. pDC->FillSolidRect(rc, GetXtremeColor(XPCOLOR_TOOLBAR_FACE));
  322. COLORREF clrBorder = GetXtremeColor(XPCOLOR_FLOATBAR_BORDER);
  323. pDC->Draw3dRect(rc, clrBorder, clrBorder);
  324. rc.DeflateRect(1, 1);
  325. pDC->Draw3dRect(rc, clrBorder, clrBorder);
  326. CXTPFontDC font(pDC, GetSmCaptionFont());
  327. CSize sz = pDC->GetTextExtent(_T(" "), 1);
  328. CRect rcFill(rc.left + 2, rc.top + 2 + max(15, sz.cy), rc.right - 2, rc.bottom - 2);
  329. for (int i = 0; i < pBar->GetControlCount(); i++)
  330. {
  331. CXTPControl* pControl = pBar->GetControl(i);
  332. if (pControl->GetWrap() && pControl->IsVisible() && pControl->GetRect().top > rcFill.top)
  333. {
  334. CRect rcRow(rcFill.left, rcFill.top, rcFill.right, pControl->GetRowRect().top);
  335. XTPDrawHelpers()->GradientFill(pDC, rcRow, m_clrCommandBar, FALSE);
  336. rcFill.top = rcRow.bottom;
  337. }
  338. }
  339. XTPDrawHelpers()->GradientFill(pDC, rcFill, m_clrCommandBar, FALSE);
  340. pDC->SetPixel(2, 2, clrBorder);
  341. pDC->SetPixel(rc.right - 2, 2, clrBorder);
  342. pDC->SetPixel(2, rc.bottom - 2, clrBorder);
  343. pDC->SetPixel(rc.right - 2, rc.bottom - 2, clrBorder);
  344. }
  345. else
  346. {
  347. CXTPOfficeTheme::FillCommandBarEntry(pDC, pBar);
  348. }
  349. }
  350. CSize CXTPOffice2003Theme::DrawCommandBarSeparator(CDC* pDC, CXTPCommandBar* pBar, CXTPControl* pControl, BOOL bDraw)
  351. {
  352. BOOL bSkipWrapSeparators = pBar->GetPosition() == xtpBarFloating && pBar->GetType() != xtpBarTypePopup;
  353. if (!bDraw && bSkipWrapSeparators)
  354. {
  355. return CSize(6, 0);
  356. }
  357. if (!bDraw)
  358. {
  359. return CXTPOfficeTheme::DrawCommandBarSeparator(pDC, pBar, pControl, bDraw);
  360. }
  361. CRect rc;
  362. pBar->GetClientRect(&rc);
  363. CRect rcControl = pControl->GetRect();
  364. CXTPPenDC pen (*pDC, GetXtremeColor(XPCOLOR_SEPARATOR));
  365. CRect rcRow = pControl->GetRowRect();
  366. if (pBar->GetPosition() == xtpBarRight || pBar->GetPosition() == xtpBarLeft)
  367. {
  368. if (!pControl->GetWrap())
  369. {
  370. Line(pDC, rcRow.left + 4, rcControl.top - 4, rcRow.right - 4, rcControl.top - 4, XPCOLOR_SEPARATOR);
  371. if (!m_bPlainSeparators) Line(pDC, rcRow.left + 5, rcControl.top - 3, rcRow.right - 3, rcControl.top - 3, COLOR_3DHIGHLIGHT);
  372. }
  373. else
  374. {
  375. Line(pDC, rcRow.right + 2, rcRow.top + 4, rcRow.right + 2, rcRow.bottom, XPCOLOR_SEPARATOR);
  376. Line(pDC, rcRow.right + 3, rcRow.top + 5, rcRow.right + 3, rcRow.bottom, COLOR_3DHIGHLIGHT);
  377. }
  378. }
  379. else if (pBar->GetPosition() == xtpBarTop || pBar->GetPosition() == xtpBarBottom || bSkipWrapSeparators)
  380. {
  381. if (!pControl->GetWrap())
  382. {
  383. Line(pDC, rcControl.left - 4, rcRow.top + 4, rcControl.left - 4, rcRow.bottom - 4, XPCOLOR_SEPARATOR);
  384. if (!m_bPlainSeparators) Line(pDC, rcControl.left - 3, rcRow.top + 5, rcControl.left - 3, rcRow.bottom - 3, COLOR_3DHIGHLIGHT);
  385. }
  386. else if (!bSkipWrapSeparators)
  387. {
  388. Line(pDC, rcRow.left + 4, rcRow.top - 4, rcRow.right, rcRow.top - 4, XPCOLOR_SEPARATOR);
  389. Line(pDC, rcRow.left + 5, rcRow.top - 3, rcRow.right, rcRow.top - 3, COLOR_3DHIGHLIGHT);
  390. }
  391. }
  392. else return CXTPOfficeTheme::DrawCommandBarSeparator(pDC, pBar, pControl, bDraw);
  393. return 0;
  394. }
  395. CSize CXTPOffice2003Theme::DrawDialogBarGripper(CDC* pDC, CXTPDialogBar* pBar, BOOL bDraw)
  396. {
  397. CSize sz(8, max(25, m_nTextHeight + 6));
  398. if (pDC && bDraw)
  399. {
  400. CRect rcGripper;
  401. pBar->GetClientRect(&rcGripper);
  402. rcGripper.DeflateRect(3, 3);
  403. rcGripper.bottom = rcGripper.top + sz.cy;
  404. if (pBar->IsActive())
  405. {
  406. if (m_bLunaTheme)
  407. XTPDrawHelpers()->GradientFill(pDC, rcGripper, m_grcLunaChecked, FALSE);
  408. else
  409. pDC->FillSolidRect(rcGripper, GetXtremeColor(XPCOLOR_HIGHLIGHT_CHECKED));
  410. }
  411. else
  412. {
  413. XTPDrawHelpers()->GradientFill(pDC, rcGripper, m_clrCommandBar, FALSE);
  414. }
  415. for (int y = rcGripper.top + 4; y < rcGripper.bottom - 5; y += 4)
  416. {
  417. pDC->FillSolidRect(CRect(4 + 2, y + 1, 6 + 2, y + 3), GetXtremeColor(COLOR_WINDOW));
  418. pDC->FillSolidRect(CRect(3 + 2, y, 5 + 2, y + 2), GetXtremeColor(XPCOLOR_TOOLBAR_GRIPPER));
  419. }
  420. }
  421. return sz;
  422. }
  423. CSize CXTPOffice2003Theme::DrawCommandBarGripper(CDC* pDC, CXTPCommandBar* pBar, BOOL bDraw)
  424. {
  425. if (pBar->IsDialogBar())
  426. return DrawDialogBarGripper(pDC, (CXTPDialogBar*)pBar, bDraw);
  427. CRect rc;
  428. pBar->GetClientRect(&rc);
  429. if (pBar->GetPosition() == xtpBarPopup && pBar->GetType() == xtpBarTypePopup)
  430. {
  431. return CXTPOfficeTheme::DrawCommandBarGripper(pDC, pBar, bDraw);
  432. }
  433. else if (pBar->GetPosition() == xtpBarFloating)
  434. {
  435. return CXTPOfficeTheme::DrawCommandBarGripper(pDC, pBar, bDraw);
  436. }
  437. else if (pBar->GetPosition() == xtpBarRight || pBar->GetPosition() == xtpBarLeft)
  438. {
  439. if (!pDC || !bDraw) return CSize(0, 8 + 1);
  440. for (int x = 5; x < rc.Width() - 7; x += 4)
  441. {
  442. pDC->FillSolidRect(CRect(x + 1, 4 + 3, x + 3, 6 + 3), GetXtremeColor(COLOR_WINDOW));
  443. pDC->FillSolidRect(CRect(x, 3 + 3, x + 2, 5 + 3), GetXtremeColor(XPCOLOR_TOOLBAR_GRIPPER));
  444. }
  445. }
  446. else if (pBar->GetPosition() == xtpBarTop || pBar->GetPosition() == xtpBarBottom)
  447. {
  448. if (!pDC || !bDraw) return CSize(6, 0);
  449. for (int y = 5; y < rc.Height() - 7; y += 4)
  450. {
  451. pDC->FillSolidRect(CRect(7, y + 1, 9, y + 3), GetXtremeColor(COLOR_WINDOW));
  452. pDC->FillSolidRect(CRect(6, y, 8, y + 2), GetXtremeColor(XPCOLOR_TOOLBAR_GRIPPER));
  453. }
  454. }
  455. return 0;
  456. }
  457. void CXTPOffice2003Theme::RectangleEx(CDC* pDC, CRect rc, int nColorBorder, BOOL bHoriz, CXTPPaintManagerColorGradient& color)
  458. {
  459. GradientFill(pDC, rc, color.clrLight, color.clrDark, bHoriz);
  460. Draw3dRect(pDC, rc, nColorBorder, nColorBorder);
  461. }
  462. void CXTPOffice2003Theme::DrawRectangle(CDC* pDC, CRect rc, BOOL bSelected, BOOL bPressed, BOOL bEnabled, BOOL bChecked, BOOL bPopuped, XTPBarType barType, XTPBarPosition barPosition /*= xtpBarPopup*/)
  463. {
  464. if (bPopuped)
  465. {
  466. XTPDrawHelpers()->GradientFill(pDC, rc, m_clrPopupControl, FALSE);
  467. Draw3dRect(pDC, rc, XPCOLOR_MENUBAR_BORDER, XPCOLOR_MENUBAR_BORDER);
  468. }
  469. else if (m_bLunaTheme && barType != xtpBarTypePopup && (IsDockingPosition(barPosition) || (barPosition == xtpBarFloating)))
  470. {
  471. BOOL bHoriz = IsVerticalPosition(barPosition);
  472. if (!bEnabled)
  473. {
  474. if (IsKeyboardSelected(bSelected))
  475. RectangleEx(pDC, rc, XPCOLOR_HIGHLIGHT_PUSHED_BORDER, bHoriz, bChecked ? m_grcLunaPushed : m_grcLunaSelected);
  476. else if (bChecked)
  477. RectangleEx(pDC, rc, XPCOLOR_HIGHLIGHT_DISABLED_BORDER, bHoriz, m_grcLunaChecked);
  478. return;
  479. }
  480. else if (bChecked == 2 && !bSelected && !bPressed)
  481. {
  482. Rectangle(pDC, rc, XPCOLOR_HIGHLIGHT_PUSHED_BORDER, XPCOLOR_3DFACE);
  483. }
  484. else if (bChecked && !bSelected && !bPressed) RectangleEx(pDC, rc, XPCOLOR_HIGHLIGHT_CHECKED_BORDER, bHoriz, m_grcLunaChecked);
  485. else if (bChecked && bSelected && !bPressed) RectangleEx(pDC, rc, XPCOLOR_HIGHLIGHT_PUSHED_BORDER, bHoriz, m_grcLunaPushed);
  486. else if (IsKeyboardSelected(bPressed) || (bSelected && bPressed)) RectangleEx(pDC, rc, XPCOLOR_HIGHLIGHT_PUSHED_BORDER, bHoriz, m_grcLunaPushed);
  487. else if (bSelected || bPressed) RectangleEx(pDC, rc, XPCOLOR_HIGHLIGHT_BORDER, bHoriz, m_grcLunaSelected);
  488. }
  489. else CXTPOfficeTheme::DrawRectangle(pDC, rc, bSelected, bPressed, bEnabled, bChecked, bPopuped, barType, barPosition);
  490. }
  491. void CXTPOffice2003Theme::DrawExpandSymbols(CDC* pDC, BOOL bVertical, CRect rc, BOOL bHiddenExists, COLORREF clr)
  492. {
  493. if (!bVertical)
  494. {
  495. CPoint pt = CPoint(rc.left + rc.Width()/2, rc.bottom - 6);
  496. CXTPPenDC pen(*pDC, clr);
  497. Line(pDC, CPoint(pt.x -2 , pt.y - 4), CPoint(pt.x + 3, pt.y - 4));
  498. Triangle(pDC, CPoint(pt.x -2 , pt.y - 1), CPoint(pt.x + 2, pt.y - 1), CPoint (pt.x, pt.y + 1), clr);
  499. if (bHiddenExists)
  500. {
  501. Triangle(pDC, CPoint(rc.left + 3, rc.top + 5), CPoint(rc.left + 4, rc.top + 6), CPoint(rc.left + 3, rc.top + 7), clr);
  502. Triangle(pDC, CPoint(rc.left + 7, rc.top + 5), CPoint(rc.left + 8, rc.top + 6), CPoint(rc.left + 7, rc.top + 7), clr);
  503. }
  504. }
  505. else
  506. {
  507. CPoint pt = CPoint(rc.right - 5, rc.CenterPoint().y);
  508. CXTPPenDC pen(*pDC, clr);
  509. Line(pDC, CPoint(pt.x - 5 , pt.y - 2), CPoint(pt.x - 5, pt.y + 3));
  510. Triangle(pDC, CPoint(pt.x , pt.y), CPoint(pt.x - 2, pt.y - 2), CPoint (pt.x - 2, pt.y + 2), clr);
  511. if (bHiddenExists)
  512. {
  513. Triangle(pDC, CPoint(rc.left + 5, rc.top + 3), CPoint(rc.left + 6, rc.top + 4), CPoint(rc.left + 7, rc.top + 3), clr);
  514. Triangle(pDC, CPoint(rc.left + 5, rc.top + 7), CPoint(rc.left + 6, rc.top + 8), CPoint(rc.left + 7, rc.top + 7), clr);
  515. }
  516. }
  517. }
  518. CSize CXTPOffice2003Theme::DrawSpecialControl(CDC* pDC, XTPSpecialControl controlType, CXTPControl* pButton, CXTPCommandBar* pBar, BOOL bDraw, LPVOID lpParam)
  519. {
  520. if (controlType == xtpButtonExpandToolbar)
  521. {
  522. if (!bDraw)
  523. {
  524. CSize szBar = *(CSize*)lpParam;
  525. if (!IsVerticalPosition(pBar->GetPosition()))
  526. pButton->SetRect(CRect(szBar.cx - (11 + 1), 1, szBar.cx - 0, szBar.cy - 0));
  527. else
  528. pButton->SetRect(CRect(0, szBar.cy - (11 + 1), szBar.cx - 0, szBar.cy - 0));
  529. }
  530. else
  531. {
  532. CRect rc = pButton->GetRect();
  533. if (!IsVerticalPosition(pBar->GetPosition()))
  534. {
  535. pDC->ExcludeClipRect(rc.right - 1, rc.top, rc.right, rc.top + 1);
  536. pDC->ExcludeClipRect(rc.right - 1, rc.bottom - 1, rc.right, rc.bottom);
  537. pDC->ExcludeClipRect(rc.left, rc.top + 1, rc.left + 1, rc.bottom - 1);
  538. }
  539. else
  540. {
  541. pDC->ExcludeClipRect(rc.left, rc.bottom - 1, rc.left + 1, rc.bottom);
  542. pDC->ExcludeClipRect(rc.right - 1, rc.bottom - 1, rc.right, rc.bottom);
  543. pDC->ExcludeClipRect(rc.left + 1, rc.top, rc.right - 1, rc.top + 1);
  544. }
  545. if (pButton->GetPopuped())
  546. {
  547. if (m_bLunaTheme) GradientFill(pDC, rc, m_grcLunaPushed.clrLight, m_grcLunaPushed.clrDark, IsVerticalPosition(pBar->GetPosition()));
  548. else pDC->FillSolidRect(rc, GetXtremeColor(XPCOLOR_HIGHLIGHT_CHECKED));
  549. }
  550. else if (pButton->GetSelected())
  551. {
  552. if (m_bLunaTheme) GradientFill(pDC, rc, m_grcLunaSelected.clrLight, m_grcLunaSelected.clrDark, IsVerticalPosition(pBar->GetPosition()));
  553. else pDC->FillSolidRect(rc, GetXtremeColor(XPCOLOR_HIGHLIGHT));
  554. }
  555. else
  556. {
  557. XTPDrawHelpers()->GradientFill(pDC, rc, m_clrToolbarExpand, IsVerticalPosition(pBar->GetPosition()));
  558. }
  559. COLORREF clrText = GetXtremeColor(pButton->GetPopuped() ? XPCOLOR_TOOLBAR_TEXT: pButton->GetSelected() ? XPCOLOR_HIGHLIGHT_TEXT : XPCOLOR_TOOLBAR_TEXT);
  560. BOOL bHiddenExists = *(BOOL*)lpParam;
  561. DrawExpandSymbols(pDC, IsVerticalPosition(pBar->GetPosition()), CRect(CPoint(rc.left + 1, rc.top + 1), rc.Size()) , bHiddenExists, GetXtremeColor(COLOR_BTNHIGHLIGHT));
  562. DrawExpandSymbols(pDC, IsVerticalPosition(pBar->GetPosition()), rc, bHiddenExists, clrText);
  563. pDC->SelectClipRgn(0);
  564. }
  565. return 0;
  566. }
  567. if (controlType == xtpButtonExpandMenu)
  568. {
  569. if (bDraw)
  570. {
  571. CXTPPaintManager::DrawControlEntry(pDC, pButton);
  572. CRect rcButton = pButton->GetRect();
  573. int nCenter = rcButton.CenterPoint().x;
  574. m_ilGradientCircle.Draw(pDC, 0, CPoint(nCenter - 7, rcButton.top + 1), ILD_NORMAL);
  575. int nTop = rcButton.top + 5;
  576. CXTPPenDC pen(pDC->GetSafeHdc(), 0);
  577. pDC->MoveTo(nCenter - 2, nTop);
  578. pDC->LineTo(nCenter, nTop + 2);
  579. pDC->LineTo(nCenter + 3, nTop - 1);
  580. pDC->MoveTo(nCenter - 2, nTop + 1);
  581. pDC->LineTo(nCenter, nTop + 3);
  582. pDC->LineTo(nCenter + 3, nTop);
  583. pDC->MoveTo(nCenter - 2, nTop + 4);
  584. pDC->LineTo(nCenter, nTop + 6);
  585. pDC->LineTo(nCenter + 3, nTop + 3);
  586. pDC->MoveTo(nCenter - 2, nTop + 5);
  587. pDC->LineTo(nCenter, nTop + 7);
  588. pDC->LineTo(nCenter + 3, nTop + 4);
  589. }
  590. return CSize(0, 18);
  591. }
  592. return CXTPOfficeTheme::DrawSpecialControl(pDC, controlType, pButton, pBar, bDraw, lpParam);
  593. }
  594. void CXTPOffice2003Theme::CreateGradientCircle()
  595. {
  596. const BYTE clrMask[16 * 16] =
  597. {
  598. 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xEA, 0xC6, 0xB4, 0xB4, 0xB4, 0xC6, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF,
  599. 0xFF, 0xFF, 0xFF, 0xEA, 0xEA, 0xEA, 0xEA, 0xC6, 0xB4, 0x90, 0x7E, 0x7E, 0xC6, 0xFF, 0xFF, 0xFF,
  600. 0xFF, 0xFF, 0xEA, 0xFC, 0xFC, 0xEA, 0xEA, 0xC6, 0xB4, 0x90, 0x7E, 0x6C, 0x5A, 0x90, 0xFF, 0xFF,
  601. 0xFF, 0xEA, 0xFC, 0xFC, 0xFC, 0xEA, 0xEA, 0xC6, 0xB4, 0x90, 0x7E, 0x6C, 0x5A, 0x36, 0x7E, 0xFF,
  602. 0xEA, 0xFC, 0xFC, 0xFC, 0xFC, 0xEA, 0xEA, 0xC6, 0xB4, 0x90, 0x7E, 0x6C, 0x5A, 0x36, 0x24, 0xEA,
  603. 0xEA, 0xFC, 0xFC, 0xFC, 0xFC, 0xEA, 0xEA, 0xC6, 0xB4, 0x90, 0x7E, 0x6C, 0x48, 0x36, 0x24, 0x5A,
  604. 0xEA, 0xEA, 0xEA, 0xEA, 0xEA, 0xEA, 0xC6, 0xB4, 0x90, 0x90, 0x7E, 0x6C, 0x48, 0x24, 0x12, 0x24,
  605. 0xC6, 0xEA, 0xEA, 0xEA, 0xC6, 0xC6, 0xC6, 0xB4, 0x90, 0x7E, 0x7E, 0x48, 0x36, 0x24, 0x12, 0x12,
  606. 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xB4, 0xB4, 0x90, 0x7E, 0x7E, 0x6C, 0x48, 0x36, 0x12, 0x12, 0x00,
  607. 0xC6, 0xB4, 0xB4, 0xB4, 0xB4, 0xB4, 0x90, 0x7E, 0x7E, 0x6C, 0x5A, 0x36, 0x24, 0x12, 0x00, 0x00,
  608. 0xC6, 0x90, 0x90, 0x90, 0x90, 0x90, 0x7E, 0x7E, 0x6C, 0x6C, 0x48, 0x36, 0x24, 0x12, 0x00, 0x36,
  609. 0xFC, 0x90, 0x7E, 0x7E, 0x7E, 0x7E, 0x6C, 0x6C, 0x5A, 0x5A, 0x36, 0x24, 0x12, 0x00, 0x00, 0xB4,
  610. 0xFF, 0xC6, 0x6C, 0x6C, 0x6C, 0x6C, 0x5A, 0x5A, 0x5A, 0x48, 0x36, 0x24, 0x12, 0x00, 0x48, 0xFF,
  611. 0xFF, 0xFF, 0xB4, 0x6C, 0x5A, 0x5A, 0x5A, 0x48, 0x48, 0x36, 0x24, 0x12, 0x00, 0x36, 0xFF, 0xFF,
  612. 0xFF, 0xFF, 0xFF, 0xC6, 0x5A, 0x48, 0x48, 0x48, 0x36, 0x24, 0x24, 0x12, 0x6C, 0xFF, 0xFF, 0xFF,
  613. 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xB4, 0x6C, 0x48, 0x36, 0x5A, 0x7E, 0xEA, 0xFF, 0xFF, 0xFF, 0xFF
  614. };
  615. m_ilGradientCircle.DeleteImageList();
  616. COLORREF clrLight = m_clrMenuExpand.clrLight;
  617. COLORREF clrDark = m_clrMenuExpand.clrDark;
  618. CWindowDC dc(CWnd::GetDesktopWindow());
  619. CDC dcCircle;
  620. dcCircle.CreateCompatibleDC(&dc);
  621. CBitmap bmp;
  622. VERIFY(bmp.CreateCompatibleBitmap(&dc, 16, 16));
  623. CBitmap* pOldBitmap = (CBitmap*)dcCircle.SelectObject(&bmp);
  624. for (int i = 0; i < 16 * 16; i++)
  625. {
  626. int n = clrMask[i];
  627. int nRed = GetRValue(clrDark) - n * (GetRValue(clrDark) - GetRValue(clrLight)) / 0xFF;
  628. int nGreen = GetGValue(clrDark) - n * (GetGValue(clrDark) - GetGValue(clrLight)) / 0xFF;
  629. int nBlue = GetBValue(clrDark) - n * (GetBValue(clrDark) - GetBValue(clrLight)) / 0xFF;
  630. dcCircle.SetPixel(i / 16, i % 16, n == 0xFF ? RGB(0, 0xFF, 0) : RGB(nRed, nGreen, nBlue));
  631. }
  632. dcCircle.SelectObject(pOldBitmap);
  633. m_ilGradientCircle.Create(16, 16, ILC_COLOR24 | ILC_MASK, 1, 0);
  634. m_ilGradientCircle.Add(&bmp, RGB(0, 0xFF, 0));
  635. ASSERT(m_ilGradientCircle.GetImageCount() == 1);
  636. }
  637. #define RGB_TO_RGBQUAD(r, g, b) (RGB(b, g, r))
  638. HBITMAP CXTPOffice2003Theme::GetModernBitmap(UINT nIDResource)
  639. {
  640. static const struct
  641. {
  642. DWORD rgbqFrom;
  643. DWORD rgbqTo;
  644. }
  645. modernColorMap[] =
  646. {
  647. { RGB_TO_RGBQUAD(0, 128, 0), RGB_TO_RGBQUAD(0, 151, 94) },
  648. { RGB_TO_RGBQUAD(255, 0, 0), RGB_TO_RGBQUAD(255, 87, 42) },
  649. { RGB_TO_RGBQUAD(128, 0, 0), RGB_TO_RGBQUAD(213, 79, 74) },
  650. { RGB_TO_RGBQUAD(0, 0, 255), RGB_TO_RGBQUAD(58, 123, 252) },
  651. { RGB_TO_RGBQUAD(0, 0, 128), RGB_TO_RGBQUAD(1, 81, 205) },
  652. { RGB_TO_RGBQUAD(128, 128, 128), RGB_TO_RGBQUAD(149, 147, 145) },
  653. { RGB_TO_RGBQUAD(128, 128, 0), RGB_TO_RGBQUAD(228, 167, 8) },
  654. { RGB_TO_RGBQUAD(192, 192, 192), RGB_TO_RGBQUAD(205, 198, 187) },
  655. { RGB_TO_RGBQUAD(255, 255, 0), RGB_TO_RGBQUAD(255, 218, 33) }
  656. };
  657. LPCTSTR lpszResourceName = MAKEINTRESOURCE(nIDResource);
  658. ASSERT(lpszResourceName != NULL);
  659. if (!lpszResourceName)
  660. return NULL;
  661. // determine location of the bitmap in resource fork
  662. HINSTANCE hInst = AfxFindResourceHandle(lpszResourceName, RT_BITMAP);
  663. if (!hInst)
  664. return NULL;
  665. HRSRC hRsrc = ::FindResource(hInst, lpszResourceName, RT_BITMAP);
  666. if (hRsrc == NULL)
  667. return NULL;
  668. HGLOBAL hglb = LoadResource(hInst, hRsrc);
  669. if (hglb == NULL)
  670. return NULL;
  671. LPBITMAPINFOHEADER lpBitmap = (LPBITMAPINFOHEADER)LockResource(hglb);
  672. if (lpBitmap == NULL)
  673. return NULL;
  674. // make copy of BITMAPINFOHEADER so we can modify the color table
  675. const int nColorTableSize = 16;
  676. UINT nSize = lpBitmap->biSize + nColorTableSize * sizeof(RGBQUAD);
  677. LPBITMAPINFOHEADER lpBitmapInfo = (LPBITMAPINFOHEADER)::malloc(nSize);
  678. if (lpBitmapInfo == NULL)
  679. return NULL;
  680. MEMCPY_S(lpBitmapInfo, lpBitmap, nSize);
  681. // color table is in RGBQUAD DIB format
  682. DWORD* pColorTable =
  683. (DWORD*)(((LPBYTE)lpBitmapInfo) + (UINT)lpBitmapInfo->biSize);
  684. COLORREF clrMask = XTPImageManager()->GetMaskColor();
  685. for (int iColor = 0; iColor < nColorTableSize; iColor++)
  686. {
  687. // look for matching RGBQUAD color in original
  688. for (int i = 0; i < _countof(modernColorMap); i++)
  689. {
  690. if (pColorTable[iColor] == modernColorMap[i].rgbqFrom
  691. && clrMask != pColorTable[iColor])
  692. {
  693. pColorTable[iColor] = modernColorMap[i].rgbqTo;
  694. break;
  695. }
  696. }
  697. }
  698. int nWidth = (int)lpBitmapInfo->biWidth;
  699. int nHeight = (int)lpBitmapInfo->biHeight;
  700. HDC hDCScreen = ::GetDC(NULL);
  701. HBITMAP hbm = ::CreateCompatibleBitmap(hDCScreen, nWidth, nHeight);
  702. if (hbm != NULL)
  703. {
  704. HDC hDCGlyphs = ::CreateCompatibleDC(hDCScreen);
  705. HBITMAP hbmOld = (HBITMAP)::SelectObject(hDCGlyphs, hbm);
  706. LPBYTE lpBits;
  707. lpBits = (LPBYTE)(lpBitmap + 1);
  708. lpBits += ((size_t)1 << (lpBitmapInfo->biBitCount)) * sizeof(RGBQUAD);
  709. StretchDIBits(hDCGlyphs, 0, 0, nWidth, nHeight, 0, 0, nWidth, nHeight,
  710. lpBits, (LPBITMAPINFO)lpBitmapInfo, DIB_RGB_COLORS, SRCCOPY);
  711. SelectObject(hDCGlyphs, hbmOld);
  712. ::DeleteDC(hDCGlyphs);
  713. }
  714. ::ReleaseDC(NULL, hDCScreen);
  715. // free copy of bitmap info struct and resource itself
  716. ::free(lpBitmapInfo);
  717. ::FreeResource(hglb);
  718. return hbm;
  719. }
  720. BOOL CXTPOffice2003Theme::LoadModernToolbarIcons(UINT nIDResource)
  721. {
  722. HBITMAP hbm = GetModernBitmap(nIDResource);
  723. if (!hbm)
  724. return FALSE;
  725. CBitmap bmp;
  726. bmp.Attach(hbm);
  727. return XTPImageManager()->SetIcons(nIDResource, bmp);
  728. }
  729. BOOL CXTPOffice2003Theme::LoadModernToolbarIcons(UINT nIDResource, UINT* pCommands, int nCount, CSize szIcon)
  730. {
  731. HBITMAP hbm = GetModernBitmap(nIDResource);
  732. if (!hbm)
  733. return FALSE;
  734. CBitmap bmp;
  735. bmp.Attach(hbm);
  736. return XTPImageManager()->SetIcons(bmp, pCommands, nCount, szIcon);
  737. }
  738. CRect CXTPOffice2003Theme::GetCommandBarBorders(CXTPCommandBar* pBar)
  739. {
  740. if (pBar->GetPosition() == xtpBarTop || pBar->GetPosition() == xtpBarBottom)
  741. return CRect(4, 2, 2, 2);
  742. else return CXTPOfficeTheme::GetCommandBarBorders(pBar);
  743. }
  744. CSize CXTPOffice2003Theme::DrawTearOffGripper(CDC* pDC, CRect rcGripper, BOOL bSelected, BOOL bDraw)
  745. {
  746. if (bDraw)
  747. {
  748. CRect rc(1, 1, rcGripper.right + 1, rcGripper.Height() + 1);
  749. pDC->FillSolidRect(rc, GetXtremeColor(XPCOLOR_MENUBAR_FACE));
  750. rc.DeflateRect(1, 1);
  751. int nLeft = rc.CenterPoint().x - min(32, rcGripper.Width() /2 - 10);
  752. int nRight = rc.CenterPoint().x + min(32, rcGripper.Width() /2 - 10);
  753. if (bSelected)
  754. Rectangle(pDC, rc, XPCOLOR_HIGHLIGHT_BORDER, XPCOLOR_HIGHLIGHT);
  755. else
  756. pDC->FillSolidRect(rc, m_clrTearOffGripper);
  757. for (int x = nLeft; x < nRight; x += 4)
  758. {
  759. pDC->FillSolidRect(CRect(x + 1, 4 + 1, x + 3, 6 + 1), GetXtremeColor(COLOR_BTNHIGHLIGHT));
  760. pDC->FillSolidRect(CRect(x, 3 + 1, x + 2, 5 + 1), GetXtremeColor(XPCOLOR_TOOLBAR_GRIPPER));
  761. }
  762. }
  763. return CSize(0, 9);
  764. }
  765. void CXTPOffice2003Theme::DrawStatusBarGripper(CDC* pDC, CRect rcClient)
  766. {
  767. if (m_themeStatusBar.IsAppThemed())
  768. {
  769. CRect rcGripper(rcClient.right - 18, rcClient.top, rcClient.right, rcClient.bottom);
  770. m_themeStatusBar.DrawThemeBackground(pDC->GetSafeHdc(), SP_GRIPPER, 0, &rcGripper, 0);
  771. }
  772. else
  773. {
  774. CXTPPenDC penBorder(*pDC, GetXtremeColor(COLOR_3DSHADOW));
  775. int i;
  776. for (i = 0; i < 3; i++)
  777. {
  778. pDC->MoveTo(rcClient.Width() - i * 5, rcClient.Height() - 1);
  779. pDC->LineTo(rcClient.Width(), rcClient.Height() - 1 - i * 5);
  780. pDC->MoveTo(rcClient.Width() - 1 - i * 5, rcClient.Height() - 1);
  781. pDC->LineTo(rcClient.Width(), rcClient.Height() - 2 - i * 5);
  782. pDC->MoveTo(rcClient.Width() - 2 - i * 5, rcClient.Height() - 1);
  783. pDC->LineTo(rcClient.Width(), rcClient.Height() - 3 - i * 5);
  784. }
  785. CXTPPenDC penBorderWhite(*pDC, GetXtremeColor(COLOR_BTNHIGHLIGHT));
  786. for (i = 0; i < 3; i++)
  787. {
  788. pDC->MoveTo(rcClient.Width() - 3 - i * 5, rcClient.Height() - 1);
  789. pDC->LineTo(rcClient.Width(), rcClient.Height() - 4 - i * 5);
  790. }
  791. }
  792. }
  793. void CXTPOffice2003Theme::DrawStatusBarPaneBorder(CDC* pDC, CRect rc, CXTPStatusBarPane* pPane, BOOL bGripperPane)
  794. {
  795. if (m_bThemedStatusBar && m_themeStatusBar.IsAppThemed())
  796. {
  797. CXTPPaintManager::DrawStatusBarPaneBorder(pDC, rc, pPane, bGripperPane);
  798. }
  799. else
  800. {
  801. pDC->Draw3dRect(rc, m_clrStatusPane, m_clrStatusPane);
  802. }
  803. }
  804. //////////////////////////////////////////////////////////////////////////
  805. // CXTPWhidbeyTheme
  806. CXTPWhidbeyTheme::CXTPWhidbeyTheme()
  807. {
  808. m_systemTheme = xtpSystemThemeUnknown;
  809. m_bPlainSeparators = TRUE;
  810. }
  811. CXTPWhidbeyTheme::~CXTPWhidbeyTheme()
  812. {
  813. }
  814. void CXTPWhidbeyTheme::RefreshMetrics()
  815. {
  816. CXTPOffice2003Theme::RefreshMetrics();
  817. m_clrToolbarExpand.SetStandardValue(XTPColorManager()->LightColor(GetXtremeColor(COLOR_WINDOW), GetXtremeColor(COLOR_3DFACE), 550),
  818. GetXtremeColor(COLOR_3DSHADOW));
  819. if (XTPColorManager()->IsLowResolution())
  820. {
  821. m_clrToolbarExpand.SetStandardValue(GetXtremeColor(COLOR_3DFACE));
  822. }
  823. switch (XTPColorManager()->GetCurrentSystemTheme())
  824. {
  825. case xtpSystemThemeBlue:
  826. m_clrCommandBar.SetStandardValue(RGB(250, 249, 245), RGB(192, 192, 168), 0.75f);
  827. m_clrToolbarExpand.SetStandardValue(RGB(238, 237, 234), RGB(152, 152, 126), 0.75f);
  828. m_clrDockBar.SetStandardValue(RGB(229, 229, 215), RGB(244, 241, 231));
  829. m_clrToolbarShadow.SetStandardValue(RGB(163, 163, 124));
  830. m_clrMenuExpandedGripper.SetStandardValue(RGB(204, 199, 186));
  831. m_clrMenuExpand.SetStandardValue(m_clrCommandBar);
  832. m_clrDisabledIcon.SetStandardValue(RGB(247, 245, 249), RGB(122, 121, 153));
  833. break;
  834. case xtpSystemThemeOlive:
  835. m_clrCommandBar.SetStandardValue(RGB(250, 249, 245), RGB(192, 192, 168), 0.75f);
  836. m_clrToolbarExpand.SetStandardValue(RGB(238, 237, 234), RGB(176, 172, 158), 0.75f);
  837. m_clrDockBar.SetStandardValue(RGB(229, 229, 215), RGB(244, 241, 231));
  838. m_clrToolbarShadow.SetStandardValue(RGB(163, 163, 124));
  839. m_clrMenuExpandedGripper.SetStandardValue(RGB(204, 199, 186));
  840. m_clrMenuExpand.SetStandardValue(m_clrCommandBar);
  841. m_clrDisabledIcon.SetStandardValue(RGB(236, 233, 216), RGB(172, 168, 153));
  842. m_arrColor[XPCOLOR_HIGHLIGHT].SetStandardValue(RGB(182, 198, 141));
  843. m_arrColor[XPCOLOR_HIGHLIGHT_PUSHED].SetStandardValue(RGB(147, 160, 112));
  844. m_arrColor[XPCOLOR_HIGHLIGHT_CHECKED].SetStandardValue(RGB(182, 198, 141));
  845. m_arrColor[XPCOLOR_PUSHED_TEXT].SetStandardValue(RGB(255, 255, 255));
  846. break;
  847. case xtpSystemThemeSilver:
  848. m_clrCommandBar.SetStandardValue(RGB(243, 244, 250), RGB(153, 151, 181), 0.75f);
  849. m_clrToolbarExpand.SetStandardValue(RGB(179, 178, 200), RGB(118, 116, 146), 0.75f);
  850. m_clrDockBar.SetStandardValue(RGB(215, 215, 229), RGB(243, 243, 247));
  851. m_clrMenuExpandedGripper.SetStandardValue(RGB(215, 215, 226), RGB(133, 131, 162));
  852. m_clrMenuExpand.SetStandardValue(0xF1E8E8, 0xC5AEB0);
  853. m_clrToolbarShadow.SetStandardValue(RGB(124, 124, 148));
  854. m_clrDisabledIcon.SetStandardValue(RGB(247, 245, 249), RGB(122, 121, 153));
  855. m_arrColor[XPCOLOR_TOOLBAR_GRAYTEXT].SetStandardValue(RGB(141, 141, 141));
  856. m_arrColor[XPCOLOR_MENUBAR_GRAYTEXT].SetStandardValue(RGB(141, 141, 141));
  857. m_arrColor[XPCOLOR_SEPARATOR].SetStandardValue(RGB(110, 109, 143));
  858. m_arrColor[XPCOLOR_TOOLBAR_GRIPPER].SetStandardValue(RGB(84, 84, 117));
  859. m_arrColor[XPCOLOR_TOOLBAR_FACE].SetStandardValue(RGB(219, 218, 228));
  860. m_clrTearOffGripper.SetStandardValue(RGB(192, 192, 211));
  861. m_clrFloatingGripper.SetStandardValue(RGB(122, 121, 153));
  862. m_arrColor[XPCOLOR_FLOATBAR_BORDER].SetStandardValue(RGB(122, 121, 153));
  863. INT nElements[] =
  864. {
  865. XPCOLOR_HIGHLIGHT, XPCOLOR_HIGHLIGHT_BORDER, XPCOLOR_HIGHLIGHT_CHECKED_BORDER, XPCOLOR_HIGHLIGHT_PUSHED_BORDER, XPCOLOR_HIGHLIGHT_PUSHED, XPCOLOR_HIGHLIGHT_CHECKED, XPCOLOR_PUSHED_TEXT
  866. };
  867. COLORREF clrValues[] =
  868. {
  869. RGB(255, 238, 194), RGB(75, 75, 111), RGB(75, 75, 111), RGB(75, 75, 111), RGB(254, 128, 62), RGB(255, 192, 111), 0
  870. };
  871. SetColors(sizeof(nElements)/sizeof(INT), nElements, clrValues);
  872. break;
  873. }
  874. m_clrMenuGripper.SetStandardValue(m_clrCommandBar);
  875. CreateGradientCircle();
  876. }
  877. //////////////////////////////////////////////////////////////////////////
  878. // CXTPVisualStudio2008Theme
  879. CXTPVisualStudio2008Theme::CXTPVisualStudio2008Theme()
  880. {
  881. m_nPopupBarTextPadding = 10;
  882. m_pShadowManager->SetShadowOptions(xtpShadowOfficeAlpha);
  883. }
  884. CXTPVisualStudio2008Theme::~CXTPVisualStudio2008Theme()
  885. {
  886. }
  887. void CXTPVisualStudio2008Theme::RefreshMetrics()
  888. {
  889. CXTPWhidbeyTheme::RefreshMetrics();
  890. m_clrMenuGripper.SetStandardValue(XTPColorManager()->LightColor(GetXtremeColor(COLOR_3DFACE), GetXtremeColor(COLOR_WINDOW), 40), GetXtremeColor(COLOR_3DFACE));
  891. m_clrMenuSelection.SetStandardValue(GetXtremeColor(COLOR_HIGHLIGHT));
  892. m_clrMenuSelectionBorder.SetStandardValue(GetXtremeColor(COLOR_HIGHLIGHT));
  893. m_clrMenuSelectionText.SetStandardValue(GetXtremeColor(COLOR_HIGHLIGHTTEXT));
  894. switch (XTPColorManager()->GetCurrentSystemTheme())
  895. {
  896. case xtpSystemThemeBlue:
  897. case xtpSystemThemeRoyale:
  898. {
  899. m_clrMenuSelectionBorder.SetStandardValue(RGB(152, 181, 226));
  900. m_clrMenuSelection.SetStandardValue(RGB(239,243,250), RGB(193,210,238));
  901. m_clrMenuSelectionText.SetStandardValue(0);
  902. m_clrMenuGripper.SetStandardValue(RGB(241, 241, 241));
  903. m_clrMenuExpandedGripper.SetStandardValue(RGB(215, 227, 234));
  904. m_arrColor[XPCOLOR_LABEL].SetStandardValue(RGB(221, 231, 238));
  905. }
  906. break;
  907. case xtpSystemThemeAero:
  908. {
  909. m_clrMenuSelectionBorder.SetStandardValue(RGB(150,217,249));
  910. m_clrMenuSelection.SetStandardValue(RGB(241,248,251), RGB(186,228,246));
  911. m_clrMenuSelectionText.SetStandardValue(0);
  912. m_clrMenuGripper.SetStandardValue(RGB(244,247,252), RGB(212,216,230));
  913. m_arrColor[XPCOLOR_SEPARATOR].SetStandardValue(RGB(160,160,180));
  914. m_clrDockBar.SetStandardValue(RGB(233,236,250), RGB(244,247,252));
  915. m_clrToolbarShadow.SetStandardValue(RGB(181,190,206));
  916. m_clrCommandBar.SetStandardValue(RGB(250,250,253), RGB(196,203,219), 0.75f);
  917. m_clrFloatingGripper.SetStandardValue(RGB(128, 128, 128));
  918. m_clrPopupControl.SetStandardValue(RGB(255, 255, 255), RGB(118, 184, 219));
  919. m_clrToolbarExpand.SetStandardValue(RGB(195,202,218), RGB(233,236,250), 0.75f);
  920. m_clrStatusPane.SetStandardValue(RGB(160,160,180));
  921. m_pShadowManager->SetShadowColor(0);
  922. m_clrDisabledIcon.SetStandardValue(RGB(244,247,252), RGB(113,124,152));
  923. m_arrColor[XPCOLOR_EDITCTRLBORDER].SetStandardValue(RGB(240, 240, 240));
  924. INT nElements[] =
  925. {
  926. XPCOLOR_TOOLBAR_GRIPPER, XPCOLOR_SEPARATOR, XPCOLOR_DISABLED, XPCOLOR_MENUBAR_FACE, XPCOLOR_MENUBAR_BORDER, XPCOLOR_HIGHLIGHT, XPCOLOR_HIGHLIGHT_BORDER, XPCOLOR_HIGHLIGHT_PUSHED_BORDER, XPCOLOR_HIGHLIGHT_CHECKED_BORDER, XPCOLOR_HIGHLIGHT_PUSHED, XPCOLOR_HIGHLIGHT_CHECKED, XPCOLOR_TOOLBAR_FACE, XPCOLOR_PUSHED_TEXT
  927. };
  928. COLORREF clrValues[] =
  929. {
  930. RGB(160,160,180), RGB(160,160,180), RGB(128,128,128), RGB(240, 240, 240), RGB(160, 160, 160), RGB(182,228,247), RGB(41,153,255), RGB(41,153,255), RGB(48,127,177), RGB(206,237,250), RGB(206,237,250), RGB(233,236,250), 0
  931. };
  932. SetColors(sizeof(nElements)/sizeof(INT), nElements, clrValues);
  933. m_grcLunaChecked.SetStandardValue(RGB(237,248,253), RGB(129,192,224));
  934. m_grcLunaPushed.SetStandardValue(RGB(228,245,252), RGB(124,177,204));
  935. m_grcLunaSelected.SetStandardValue(RGB(237,248,253), RGB(129,192,224));
  936. m_bLunaTheme = TRUE;
  937. }
  938. break;
  939. case xtpSystemThemeOlive:
  940. {
  941. m_clrMenuSelectionBorder.SetStandardValue(RGB(147,160,112));
  942. m_clrMenuSelection.SetStandardValue(RGB(239,242,227), RGB(194,207,158));
  943. m_clrMenuSelectionText.SetStandardValue(0);
  944. m_clrMenuGripper.SetStandardValue(RGB(247,246,239), RGB(233,230,214));
  945. }
  946. break;
  947. case xtpSystemThemeSilver:
  948. {
  949. m_clrMenuSelectionBorder.SetStandardValue(RGB(255,192,111));
  950. m_clrMenuSelection.SetStandardValue(RGB(255,246,204), RGB(255,194,115));
  951. m_clrMenuSelectionText.SetStandardValue(0);
  952. m_clrMenuGripper.SetStandardValue(RGB(232,233,242), RGB(193,193,211));
  953. m_arrColor[XPCOLOR_SEPARATOR].SetStandardValue(RGB(110,109,143));
  954. m_clrPopupControl.SetStandardValue(RGB(232,233,241), RGB(192,191,209));
  955. }
  956. break;
  957. }
  958. }
  959. void CXTPVisualStudio2008Theme::AdjustExcludeRect(CRect& rc, CXTPControl* pControl, BOOL /*bVertical*/)
  960. {
  961. CXTPCommandBar* pParent = pControl->GetParent();
  962. if (pParent->GetType() == xtpBarTypePopup)
  963. rc.InflateRect(1, 0);
  964. }
  965. CRect CXTPVisualStudio2008Theme::GetCommandBarBorders(CXTPCommandBar* pBar)
  966. {
  967. if (pBar->GetPosition() == xtpBarPopup && pBar->GetType() == xtpBarTypePopup)
  968. return CRect(4, 3, 4, 3);
  969. return CXTPWhidbeyTheme::GetCommandBarBorders(pBar);
  970. }
  971. void CXTPVisualStudio2008Theme::DrawPopupBarGripper(CDC* pDC, int x, int y, int cx, int cy, BOOL bExpanded)
  972. {
  973. XTPDrawHelpers()->GradientFill(pDC, CRect(CPoint(x, y), CSize(cx, cy)),
  974. bExpanded ? m_clrMenuExpandedGripper : m_clrMenuGripper, TRUE);
  975. pDC->FillSolidRect(x + cx, y, 1, cy, GetXtremeColor(XPCOLOR_SEPARATOR));
  976. pDC->FillSolidRect(x + cx + 1, y, 1, cy, GetXtremeColor(COLOR_3DHILIGHT));
  977. }
  978. void CXTPVisualStudio2008Theme::AlpaPixel(CDC* pDC, int x, int y, COLORREF clr, int nAlpha)
  979. {
  980. if (nAlpha == 255)
  981. {
  982. pDC->SetPixel(x, y, clr);
  983. }
  984. else
  985. {
  986. COLORREF clrOld = pDC->GetPixel(x, y);
  987. pDC->SetPixel(x, y, CXTPDrawHelpers::BlendColors(clr, clrOld, (double)nAlpha / 255));
  988. }
  989. }
  990. void CXTPVisualStudio2008Theme::DrawRectangle(CDC* pDC, CRect rc, BOOL bSelected, BOOL bPressed, BOOL bEnabled, BOOL bChecked, BOOL bPopuped, XTPBarType barType, XTPBarPosition barPosition)
  991. {
  992. if (barPosition == xtpBarPopup && barType == xtpBarTypePopup && bSelected && !bChecked && !bPressed)
  993. {
  994. XTPDrawHelpers()->GradientFill(pDC, CRect(rc.left + 1, rc.top + 1, rc.right - 1, rc.bottom - 1), m_clrMenuSelection, FALSE);
  995. COLORREF clrBorder = m_clrMenuSelectionBorder;
  996. pDC->FillSolidRect(rc.left + 3, rc.top, rc.Width() - 6, 1, clrBorder);
  997. pDC->FillSolidRect(rc.left + 3, rc.bottom - 1, rc.Width() - 6, 1, clrBorder);
  998. pDC->FillSolidRect(rc.left, rc.top + 3, 1, rc.Height() - 6, clrBorder);
  999. pDC->FillSolidRect(rc.right - 1 , rc.top + 3, 1, rc.Height() - 6, clrBorder);
  1000. AlpaPixel(pDC, rc.left + 1, rc.top + 1, clrBorder, 255);
  1001. AlpaPixel(pDC, rc.left + 1, rc.top, clrBorder, 60);
  1002. AlpaPixel(pDC, rc.left + 2, rc.top, clrBorder, 120);
  1003. AlpaPixel(pDC, rc.left, rc.top + 1, clrBorder, 60);
  1004. AlpaPixel(pDC, rc.left, rc.top + 2, clrBorder, 120);
  1005. AlpaPixel(pDC, rc.right - 2, rc.top + 1, clrBorder, 255);
  1006. AlpaPixel(pDC, rc.right - 3, rc.top, clrBorder, 120);
  1007. AlpaPixel(pDC, rc.right - 2, rc.top, clrBorder, 60);
  1008. AlpaPixel(pDC, rc.right - 1, rc.top + 1, clrBorder, 60);
  1009. AlpaPixel(pDC, rc.right - 1, rc.top + 2, clrBorder, 120);
  1010. AlpaPixel(pDC, rc.left + 1, rc.bottom - 2, clrBorder, 255);
  1011. AlpaPixel(pDC, rc.left + 1, rc.bottom - 1, clrBorder, 60);
  1012. AlpaPixel(pDC, rc.left + 2, rc.bottom - 1, clrBorder, 120);
  1013. AlpaPixel(pDC, rc.left, rc.bottom - 2, clrBorder, 60);
  1014. AlpaPixel(pDC, rc.left, rc.bottom - 3, clrBorder, 120);
  1015. AlpaPixel(pDC, rc.right - 2, rc.bottom - 2, clrBorder, 255);
  1016. AlpaPixel(pDC, rc.right - 3, rc.bottom - 1, clrBorder, 120);
  1017. AlpaPixel(pDC, rc.right - 2, rc.bottom - 1, clrBorder, 60);
  1018. AlpaPixel(pDC, rc.right - 1, rc.bottom - 2, clrBorder, 60);
  1019. AlpaPixel(pDC, rc.right - 1, rc.bottom - 3, clrBorder, 120);
  1020. return;
  1021. }
  1022. if (barType == xtpBarTypeMenuBar && bSelected && !bChecked && !bPressed && bEnabled)
  1023. {
  1024. COLORREF clrShadow = GetXtremeColor(COLOR_WINDOW);
  1025. COLORREF clrBorder = GetXtremeColor(XPCOLOR_HIGHLIGHT_BORDER);
  1026. pDC->FillSolidRect(rc.left + 1, rc.top, rc.Width() - 2, 1, clrShadow);
  1027. pDC->FillSolidRect(rc.left + 1, rc.bottom - 1, rc.Width() - 2, 1, clrShadow);
  1028. pDC->FillSolidRect(rc.left, rc.top + 1, 1, rc.Height() - 2, clrShadow);
  1029. pDC->FillSolidRect(rc.right - 1 , rc.top + 1, 1, rc.Height() - 2, clrShadow);
  1030. rc.DeflateRect(1, 1);
  1031. pDC->Draw3dRect(rc, clrBorder, clrBorder);
  1032. COLORREF clrPixel = CXTPDrawHelpers::BlendColors(clrBorder, clrShadow, 0.5);
  1033. pDC->SetPixel(rc.left, rc.top, clrPixel);
  1034. pDC->SetPixel(rc.left, rc.bottom - 1, clrPixel);
  1035. pDC->SetPixel(rc.right - 1, rc.top, clrPixel);
  1036. pDC->SetPixel(rc.right - 1, rc.bottom - 1, clrPixel);
  1037. rc.DeflateRect(1, 1);
  1038. if (!bPopuped)
  1039. {
  1040. if (m_bLunaTheme) XTPDrawHelpers()->GradientFill(pDC, rc, m_grcLunaSelected, FALSE);
  1041. else pDC->FillSolidRect(rc, GetXtremeColor(XPCOLOR_HIGHLIGHT));
  1042. }
  1043. else
  1044. XTPDrawHelpers()->GradientFill(pDC, rc, m_clrPopupControl, FALSE);
  1045. return;
  1046. }
  1047. if (barType != xtpBarTypePopup && bPopuped && bEnabled)
  1048. {
  1049. XTPDrawHelpers()->GradientFill(pDC, rc, m_clrPopupControl, FALSE);
  1050. Draw3dRect(pDC, rc, XPCOLOR_HIGHLIGHT_BORDER, XPCOLOR_HIGHLIGHT_BORDER);
  1051. return;
  1052. }
  1053. CXTPWhidbeyTheme::DrawRectangle(pDC, rc, bSelected, bPressed, bEnabled, bChecked, bPopuped, barType, barPosition);
  1054. }
  1055. COLORREF CXTPVisualStudio2008Theme::GetRectangleTextColor(BOOL bSelected, BOOL bPressed, BOOL bEnabled, BOOL bChecked, BOOL bPopuped, XTPBarType barType, XTPBarPosition barPosition)
  1056. {
  1057. if (barPosition == xtpBarPopup && barType == xtpBarTypePopup && bSelected && !bPressed && bEnabled)
  1058. {
  1059. return m_clrMenuSelectionText;
  1060. }
  1061. return CXTPWhidbeyTheme::GetRectangleTextColor(bSelected, bPressed, bEnabled, bChecked, bPopuped, barType, barPosition);
  1062. }
  1063. CSize CXTPVisualStudio2008Theme::DrawCommandBarSeparator(CDC* pDC, CXTPCommandBar* pBar, CXTPControl* pControl, BOOL bDraw)
  1064. {
  1065. if (!bDraw || pBar->GetType() != xtpBarTypePopup || pBar->GetPosition() != xtpBarPopup)
  1066. return CXTPWhidbeyTheme::DrawCommandBarSeparator(pDC, pBar, pControl, bDraw);
  1067. CRect rc;
  1068. pBar->GetClientRect(&rc);
  1069. CRect rcControl = pControl->GetRect();
  1070. CRect rcRow = pControl->GetRowRect();
  1071. if (!pControl->GetWrap())
  1072. {
  1073. HorizontalLine(pDC, rcControl.left - 1 + GetPopupBarGripperWidth(pBar) + m_nPopupBarTextPadding, rcControl.top - 2, rcControl.right + 1, GetXtremeColor(XPCOLOR_SEPARATOR));
  1074. HorizontalLine(pDC, rcControl.left - 1 + GetPopupBarGripperWidth(pBar) + m_nPopupBarTextPadding, rcControl.top - 1, rcControl.right + 1, GetXtremeColor(COLOR_3DHILIGHT));
  1075. }
  1076. else
  1077. {
  1078. VerticalLine(pDC, rcControl.left - 2, rcRow.top - 1, rcRow.bottom + 1, GetXtremeColor(XPCOLOR_SEPARATOR));
  1079. VerticalLine(pDC, rcControl.left - 1, rcRow.top - 1, rcRow.bottom + 1, GetXtremeColor(COLOR_3DHILIGHT));
  1080. }
  1081. return 0;
  1082. }