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

对话框与窗口

开发平台:

Visual C++

  1. // XTPShortcutBarPaintManager.cpp : implementation of the CXTPShortcutBarPaintManager class.
  2. //
  3. // This file is a part of the XTREME SHORTCUTBAR 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/XTPDrawHelpers.h"
  24. #include "Common/XTPImageManager.h"
  25. #include "Common/XTPOffice2007Image.h"
  26. #include "Common/XTPSystemHelpers.h"
  27. #include "XTPShortcutBarPaintManager.h"
  28. #include "XTPShortcutBar.h"
  29. #include "XTPShortcutBarPane.h"
  30. #ifdef _DEBUG
  31. #undef THIS_FILE
  32. static char THIS_FILE[] = __FILE__;
  33. #define new DEBUG_NEW
  34. #endif
  35. //////////////////////////////////////////////////////////////////////
  36. // Construction/Destruction
  37. //////////////////////////////////////////////////////////////////////
  38. CXTPShortcutBarPaintManager::CXTPShortcutBarPaintManager()
  39. {
  40. m_bBoldItemCaptionFont = FALSE;
  41. m_pExpandIcon = NULL;
  42. m_bClearTypeTextQuality = FALSE;
  43. CXTPImageManagerIconHandle iconHandle;
  44. iconHandle.CreateIconFromResource(AfxFindResourceHandle(MAKEINTRESOURCE(XTP_IDI_SHORTCUT_EXPAND_ALPHA),
  45. RT_GROUP_ICON), MAKEINTRESOURCE(XTP_IDI_SHORTCUT_EXPAND_ALPHA), CSize(16, 16), TRUE);
  46. ASSERT(!iconHandle.IsEmpty());
  47. if (!iconHandle.IsEmpty())
  48. {
  49. m_pExpandIcon = new CXTPImageManagerIcon(0, 16, 16);
  50. m_pExpandIcon->SetNormalIcon(iconHandle);
  51. }
  52. m_nNormalIconWidth = 16;
  53. m_nExpandedIconWidth = 24;
  54. m_bUseStandardFont = TRUE;
  55. m_nPaneItemHeight = 0;
  56. m_rcCaptionPadding.SetRect(4, 0, 4, 0);
  57. m_rcItemCaptionPadding.SetRect(7, 0, 7, 0);
  58. }
  59. CXTPShortcutBarPaintManager::~CXTPShortcutBarPaintManager()
  60. {
  61. SAFE_DELETE(m_pExpandIcon);
  62. }
  63. void CXTPShortcutBarPaintManager::RefreshMetrics()
  64. {
  65. RefreshXtremeColors();
  66. m_fntPaneCaption.DeleteObject();
  67. m_fntPaneItemCaption.DeleteObject();
  68. LOGFONT lf;
  69. VERIFY(::SystemParametersInfo(SPI_GETICONTITLELOGFONT,
  70. sizeof(LOGFONT), &lf, 0));
  71. if (m_bClearTypeTextQuality && XTPSystemVersion()->IsClearTypeTextQualitySupported())
  72. {
  73. lf.lfQuality = 5;
  74. }
  75. BOOL bOfficeFont = !m_strOfficeFont.IsEmpty() && XTPDrawHelpers()->FontExists(m_strOfficeFont);
  76. if (bOfficeFont)
  77. {
  78. STRCPY_S(lf.lfFaceName, LF_FACESIZE, m_strOfficeFont);
  79. }
  80. lf.lfWeight = m_bBoldItemCaptionFont ? FW_BOLD : FW_NORMAL;
  81. m_fntPaneItemCaption.CreateFontIndirect(&lf);
  82. if (m_bUseStandardFont || !m_fntText.GetSafeHandle())
  83. {
  84. lf.lfWeight = FW_BOLD;
  85. m_fntText.DeleteObject();
  86. m_fntText.CreateFontIndirect(&lf);
  87. }
  88. if (bOfficeFont)
  89. {
  90. STRCPY_S(lf.lfFaceName, LF_FACESIZE, m_strOfficeFont);
  91. }
  92. else
  93. {
  94. STRCPY_S(lf.lfFaceName, LF_FACESIZE, _T("Arial"));
  95. }
  96. lf.lfWeight = FW_BOLD;
  97. lf.lfHeight = 20;
  98. m_fntPaneCaption.CreateFontIndirect(&lf);
  99. CWindowDC dc(CWnd::GetDesktopWindow());
  100. CXTPFontDC font(&dc, &m_fntPaneItemCaption);
  101. m_nPaneItemHeight = max(19, dc.GetTextExtent(_T(" "), 1).cy + 4);
  102. m_clrPushedText.SetStandardValue(GetXtremeColor(XPCOLOR_PUSHED_TEXT));
  103. m_clrSelectedText.SetStandardValue(GetXtremeColor(XPCOLOR_CHECKED_TEXT));
  104. m_clrHotText.SetStandardValue(GetXtremeColor(XPCOLOR_HIGHLIGHT_TEXT));
  105. m_clrNormalText.SetStandardValue(GetXtremeColor(COLOR_BTNTEXT));
  106. }
  107. void CXTPShortcutBarPaintManager::DrawExpandButton(CDC* pDC, CRect rc)
  108. {
  109. CPoint ptImage (rc.CenterPoint().x - 8, rc.CenterPoint().y - 8);
  110. if (m_pExpandIcon)
  111. {
  112. m_pExpandIcon->Draw(pDC, ptImage);
  113. }
  114. }
  115. BOOL CXTPShortcutBarPaintManager::IsShortcutItemTruncated(CDC* pDC, CXTPShortcutBarItem* pItem)
  116. {
  117. if (!pItem->IsExpanded())
  118. return FALSE;
  119. int nTexetWidth = pItem->GetItemRect().Width() - 5;
  120. CXTPImageManagerIcon* pImage = pItem->GetImage(m_nExpandedIconWidth);
  121. if (pImage)
  122. {
  123. nTexetWidth -= m_nExpandedIconWidth + 5;
  124. }
  125. CRect rcText(0, 0, 0, 0);
  126. CXTPFontDC font(pDC, &m_fntText);
  127. pDC->DrawText(pItem->GetCaption(), rcText, DT_LEFT | DT_SINGLELINE | DT_CALCRECT);
  128. return rcText.Width() > nTexetWidth;
  129. }
  130. void CXTPShortcutBarPaintManager::DrawShortcutItem(CDC* pDC, CXTPShortcutBarItem* pItem)
  131. {
  132. CRect rc = pItem->GetItemRect();
  133. CXTPShortcutBar* pBar = pItem->GetShortcutBar();
  134. pDC->SetTextColor(m_clrNormalText);
  135. FillShortcutItemEntry(pDC, pItem);
  136. CSize szIcon(pItem->IsExpanded() ? m_nExpandedIconWidth : m_nNormalIconWidth, 0);
  137. CXTPImageManagerIcon* pImage = pItem->GetImage(szIcon.cx);
  138. BOOL bSelected = pBar->GetHotItem() == pItem && (pBar->GetPressedItem() == NULL || pBar->GetPressedItem() == pItem),
  139. bPressed = pBar->GetPressedItem() == pItem, bChecked = pItem->IsSelected();
  140. if (pItem->IsExpanded())
  141. {
  142. CRect rcText(rc);
  143. rcText.left = 5;
  144. if (pImage)
  145. {
  146. CPoint ptImage (5, rc.CenterPoint().y - m_nExpandedIconWidth / 2);
  147. DrawImage(pDC, ptImage, szIcon, pImage, bSelected, bPressed, bChecked);
  148. rcText.left = 5 + m_nExpandedIconWidth + 5;
  149. }
  150. pDC->SetBkMode(TRANSPARENT);
  151. CXTPFontDC font(pDC, &m_fntText);
  152. pDC->DrawText(pItem->GetCaption(), rcText, DT_VCENTER | DT_LEFT | DT_SINGLELINE | DT_END_ELLIPSIS);
  153. }
  154. else
  155. {
  156. if (pItem->IsItemExpandButton())
  157. {
  158. DrawExpandButton(pDC, rc);
  159. }
  160. else if (pImage)
  161. {
  162. CPoint ptImage (rc.CenterPoint().x - m_nNormalIconWidth / 2, rc.CenterPoint().y - m_nNormalIconWidth / 2);
  163. DrawImage(pDC, ptImage, szIcon, pImage, bSelected, bPressed, bChecked);
  164. }
  165. }
  166. }
  167. int CXTPShortcutBarPaintManager::DrawPaneCaption(CDC* pDC, CXTPShortcutBarPane* pPane, BOOL bDraw)
  168. {
  169. if (bDraw)
  170. {
  171. CXTPFontDC font(pDC, &m_fntPaneCaption);
  172. CXTPClientRect rc(pPane);
  173. rc.bottom = rc.top + 24;
  174. pDC->FillSolidRect(rc, GetXtremeColor(COLOR_3DSHADOW));
  175. pDC->SetBkMode(TRANSPARENT);
  176. pDC->SetTextColor(GetXtremeColor(COLOR_WINDOW));
  177. CRect rcText(rc);
  178. rcText.DeflateRect(m_rcCaptionPadding);
  179. pDC->DrawText(pPane->GetCaption(), rcText, DT_LEFT | DT_SINGLELINE | DT_VCENTER | DT_END_ELLIPSIS);
  180. }
  181. return 24;
  182. }
  183. int CXTPShortcutBarPaintManager::DrawPaneItemCaption(CDC* pDC, CXTPShortcutBarPaneItem* pItem, BOOL bDraw)
  184. {
  185. if (bDraw)
  186. {
  187. CXTPFontDC font(pDC, &m_fntPaneItemCaption);
  188. CRect rc = pItem->GetCaptionRect();
  189. pDC->FillSolidRect(rc, GetXtremeColor(COLOR_3DFACE));
  190. pDC->FillSolidRect(0, rc.bottom - 1, rc.Width(), 1, GetXtremeColor(COLOR_3DSHADOW));
  191. pDC->SetBkMode(TRANSPARENT);
  192. pDC->SetTextColor(GetXtremeColor(COLOR_BTNTEXT));
  193. CRect rcText(rc);
  194. rcText.DeflateRect(m_rcItemCaptionPadding);
  195. pDC->DrawText(pItem->GetCaption(), rcText, DT_LEFT | DT_SINGLELINE | DT_VCENTER | DT_END_ELLIPSIS);
  196. }
  197. return m_nPaneItemHeight;
  198. }
  199. void CXTPShortcutBarPaintManager::Rectangle(CDC* pDC, CRect rc, int nPen, int nBrush)
  200. {
  201. pDC->FillSolidRect(rc, GetXtremeColor(nBrush));
  202. pDC->Draw3dRect(rc, GetXtremeColor(nPen), GetXtremeColor(nPen));
  203. }
  204. void CXTPShortcutBarPaintManager::Line(CDC* pDC, int x0, int y0, int x1, int y1, int nPen)
  205. {
  206. CXTPPenDC pen(*pDC, GetXtremeColor(nPen));
  207. pDC->MoveTo(x0, y0);
  208. pDC->LineTo(x1, y1);
  209. }
  210. //////////////////////////////////////////////////////////////////////////
  211. // CXTPShortcutBarOffice2003Theme
  212. CXTPShortcutBarOffice2003Theme::CXTPShortcutBarOffice2003Theme()
  213. {
  214. m_bShowTopLeftCaptionShadow = FALSE;
  215. }
  216. void CXTPShortcutBarOffice2003Theme::RefreshMetrics()
  217. {
  218. CXTPShortcutBarPaintManager::RefreshMetrics();
  219. m_grcSelected.SetStandardValue(GetXtremeColor(XPCOLOR_HIGHLIGHT_CHECKED));
  220. m_grcHot.SetStandardValue(GetXtremeColor(XPCOLOR_HIGHLIGHT));
  221. m_grcPushed.SetStandardValue(GetXtremeColor(XPCOLOR_HIGHLIGHT_PUSHED));
  222. m_grcShortcutItem.SetStandardValue(GetXtremeColor(COLOR_WINDOW), GetXtremeColor(COLOR_3DFACE));
  223. m_clrShortcutItemShadow.SetStandardValue(GetXtremeColor(XPCOLOR_FRAME));
  224. m_grcShortcutBarGripper.SetStandardValue(XTPColorManager()->grcShortcutBarGripper.clrLight,
  225. XTPColorManager()->grcShortcutBarGripper.clrDark);
  226. m_grcCaption.SetStandardValue(XTPColorManager()->grcCaption);
  227. m_clrCaptionText.SetStandardValue(GetXtremeColor(COLOR_WINDOW));
  228. m_grcItemCaption.SetStandardValue(XTPColorManager()->grcDockBar.clrDark, XTPColorManager()->grcDockBar.clrLight);
  229. m_grcItemHotCaption.SetStandardValue(m_grcItemCaption);
  230. m_clrItemCaptionText.SetStandardValue(GetXtremeColor(COLOR_BTNTEXT));
  231. if (XTPColorManager()->IsLowResolution())
  232. {
  233. m_grcShortcutItem.SetStandardValue(GetXtremeColor(COLOR_3DFACE));
  234. m_clrShortcutItemShadow.SetStandardValue(GetXtremeColor(COLOR_3DSHADOW));
  235. m_grcShortcutBarGripper.SetStandardValue(GetXtremeColor(COLOR_3DSHADOW));
  236. }
  237. if (!XTPColorManager()->IsLunaColorsDisabled())
  238. {
  239. XTPCurrentSystemTheme systemTheme = XTPColorManager()->GetCurrentSystemTheme();
  240. switch (systemTheme)
  241. {
  242. case xtpSystemThemeBlue:
  243. case xtpSystemThemeRoyale:
  244. case xtpSystemThemeAero:
  245. m_grcShortcutItem.SetStandardValue(RGB(203, 225, 252), RGB(125, 165, 224));
  246. break;
  247. case xtpSystemThemeOlive:
  248. m_grcShortcutItem.SetStandardValue(RGB(234, 240, 207), RGB(177, 192, 140));
  249. break;
  250. case xtpSystemThemeSilver:
  251. m_grcShortcutItem.SetStandardValue(RGB(225, 226, 236), RGB(149, 147, 177));
  252. break;
  253. }
  254. if (systemTheme != xtpSystemThemeUnknown)
  255. {
  256. m_grcSelected.SetStandardValue(RGB(251, 230, 148), RGB(238, 149, 21));
  257. m_grcPushed.SetStandardValue(RGB(232, 127, 8), RGB(247, 218, 124));
  258. m_grcHot.SetStandardValue(RGB(255, 255, 220), RGB(247, 192, 91));
  259. m_clrPushedText.SetStandardValue(0);
  260. }
  261. }
  262. m_clrItemCaptionTop.SetStandardValue(XTPColorManager()->grcDockBar.clrLight);
  263. m_clrItemCaptionShadow.SetStandardValue(m_clrShortcutItemShadow);
  264. m_grcItemHotCaption.SetStandardValue(m_grcItemCaption);
  265. }
  266. int CXTPShortcutBarOffice2003Theme::DrawPaneCaption(CDC* pDC, CXTPShortcutBarPane* pPane, BOOL bDraw)
  267. {
  268. if (bDraw)
  269. {
  270. CXTPFontDC font(pDC, &m_fntPaneCaption);
  271. CXTPClientRect rc(pPane);
  272. rc.bottom = rc.top + 24;
  273. XTPDrawHelpers()->GradientFill(pDC, rc, m_grcCaption, FALSE);
  274. if (m_bShowTopLeftCaptionShadow)
  275. {
  276. pDC->FillSolidRect(0, rc.top, rc.Width(), 1, RGB(0xFF, 0xFF, 0xFF));
  277. pDC->FillSolidRect(0, rc.top, 1, rc.Height(), RGB(0xFF, 0xFF, 0xFF));
  278. }
  279. pDC->SetBkMode(TRANSPARENT);
  280. pDC->SetTextColor(m_clrCaptionText);
  281. CRect rcText(rc);
  282. rcText.DeflateRect(m_rcCaptionPadding);
  283. pDC->DrawText(pPane->GetCaption(), rcText, DT_LEFT | DT_SINGLELINE | DT_VCENTER | DT_END_ELLIPSIS);
  284. }
  285. return 24;
  286. }
  287. int CXTPShortcutBarOffice2003Theme::DrawPaneItemCaption(CDC* pDC, CXTPShortcutBarPaneItem* pItem, BOOL bDraw)
  288. {
  289. if (bDraw)
  290. {
  291. CXTPFontDC font(pDC, &m_fntPaneItemCaption);
  292. CRect rc = pItem->GetCaptionRect();
  293. XTPDrawHelpers()->GradientFill(pDC, rc, m_grcItemCaption, FALSE);
  294. pDC->FillSolidRect(0, rc.bottom - 1, rc.Width(), 1, m_clrItemCaptionShadow);
  295. pDC->FillSolidRect(0, rc.top, rc.Width(), 1, m_clrItemCaptionTop);
  296. if (m_bShowTopLeftCaptionShadow)
  297. {
  298. pDC->FillSolidRect(0, rc.top + 1, rc.Width(), 1, RGB(0xFF, 0xFF, 0xFF));
  299. pDC->FillSolidRect(0, rc.top + 1, 1, rc.Height() - 2, RGB(0xFF, 0xFF, 0xFF));
  300. }
  301. pDC->SetBkMode(TRANSPARENT);
  302. pDC->SetTextColor(m_clrItemCaptionText);
  303. CRect rcText(rc);
  304. rcText.DeflateRect(m_rcItemCaptionPadding);
  305. pDC->DrawText(pItem->GetCaption(), rcText, DT_LEFT | DT_SINGLELINE | DT_VCENTER | DT_END_ELLIPSIS);
  306. }
  307. return m_nPaneItemHeight;
  308. }
  309. void CXTPShortcutBarOffice2003Theme::FillShortcutBar(CDC* pDC, CXTPShortcutBar* pShortcutBar)
  310. {
  311. CXTPClientRect rc(pShortcutBar);
  312. int nItemHeight = pShortcutBar->GetItemSize().cy;
  313. if (pShortcutBar->IsClientPaneVisible())
  314. {
  315. pDC->FillSolidRect(rc, GetXtremeColor(COLOR_WINDOW));
  316. int nTopExpandedLines = pShortcutBar->GetGripperRect().bottom +
  317. (pShortcutBar->GetExpandedLinesCount() - 1) * nItemHeight;
  318. XTPDrawHelpers()->GradientFill(pDC, CRect(0, nTopExpandedLines, rc.Width(), rc.bottom),
  319. m_grcShortcutItem, FALSE);
  320. }
  321. else
  322. {
  323. XTPDrawHelpers()->GradientFill(pDC, CRect(0, (pShortcutBar->GetExpandedLinesCount() - 1) * nItemHeight - 1, rc.Width(),
  324. rc.Height()) , m_grcShortcutItem, FALSE);
  325. }
  326. }
  327. void CXTPShortcutBarOffice2003Theme::DrawShortcutBarFrame(CDC* pDC, CXTPShortcutBar* pShortcutBar)
  328. {
  329. CXTPWindowRect rc(pShortcutBar);
  330. rc.OffsetRect(-rc.TopLeft());
  331. pDC->Draw3dRect(rc, m_clrShortcutItemShadow, m_clrShortcutItemShadow);
  332. }
  333. void CXTPShortcutBarOffice2003Theme::FillShortcutItemEntry(CDC* pDC, CXTPShortcutBarItem* pItem)
  334. {
  335. CXTPShortcutBar* pShortcutBar = pItem->GetShortcutBar();
  336. CRect rc = pItem->GetItemRect();
  337. CXTPClientRect rcShortcutBar(pShortcutBar);
  338. if (pItem->IsSelected() &&
  339. (pShortcutBar->GetHotItem() != pItem || (pShortcutBar->GetPressedItem() != NULL && pShortcutBar->GetPressedItem() != pItem)))
  340. {
  341. XTPDrawHelpers()->GradientFill(pDC, rc, m_grcSelected, FALSE);
  342. pDC->SetTextColor(m_clrSelectedText);
  343. }
  344. else if (pItem->IsSelected() ||
  345. (pShortcutBar->GetHotItem() == pItem && pShortcutBar->GetPressedItem() == pItem))
  346. {
  347. XTPDrawHelpers()->GradientFill(pDC, rc, m_grcPushed, FALSE);
  348. pDC->SetTextColor(m_clrPushedText);
  349. }
  350. else if ((pShortcutBar->GetHotItem() == pItem && pShortcutBar->GetPressedItem() == NULL) ||
  351. pShortcutBar->GetPressedItem() == pItem)
  352. {
  353. XTPDrawHelpers()->GradientFill(pDC, rc, m_grcHot, FALSE);
  354. pDC->SetTextColor(m_clrHotText);
  355. }
  356. else if (pItem->IsExpanded())
  357. {
  358. XTPDrawHelpers()->GradientFill(pDC, rc, m_grcShortcutItem, FALSE);
  359. }
  360. if (pItem->IsExpanded() && rc.bottom != rcShortcutBar.bottom)
  361. {
  362. pDC->FillSolidRect(0, rc.bottom - 1, rc.Width(), 1, m_clrShortcutItemShadow);
  363. }
  364. }
  365. int CXTPShortcutBarOffice2003Theme::DrawGripper(CDC* pDC, CXTPShortcutBar* pShortcutBar, BOOL bDraw)
  366. {
  367. if (bDraw)
  368. {
  369. CRect rc = pShortcutBar->GetGripperRect();
  370. XTPDrawHelpers()->GradientFill(pDC, rc, m_grcShortcutBarGripper, FALSE);
  371. int nRight = max (2, (rc.Width() - 4 * 9) / 2);
  372. for (int i = 0; i < 9; i++)
  373. {
  374. pDC->FillSolidRect(nRight, rc.top + 1, 2, 2, RGB(40, 50, 71));
  375. pDC->FillSolidRect(nRight + 1, rc.top + 2, 2, 2, RGB(249, 249, 251));
  376. pDC->FillSolidRect(nRight + 1, rc.top + 2, 1, 1, RGB(97, 116, 152));
  377. nRight += 4;
  378. }
  379. }
  380. return 7;
  381. }
  382. //////////////////////////////////////////////////////////////////////////
  383. // CXTPShortcutBarOfficeXPTheme
  384. void CXTPShortcutBarOfficeXPTheme::FillShortcutBar(CDC* pDC, CXTPShortcutBar* pShortcutBar)
  385. {
  386. CXTPClientRect rc(pShortcutBar);
  387. pDC->FillSolidRect(rc, GetXtremeColor(XPCOLOR_TOOLBAR_FACE));
  388. }
  389. void CXTPShortcutBarOfficeXPTheme::DrawShortcutBarFrame(CDC* pDC, CXTPShortcutBar* pShortcutBar)
  390. {
  391. CXTPWindowRect rc(pShortcutBar);
  392. rc.OffsetRect(-rc.TopLeft());
  393. pDC->Draw3dRect(rc, GetXtremeColor(COLOR_3DSHADOW), GetXtremeColor(COLOR_3DHIGHLIGHT));
  394. }
  395. void CXTPShortcutBarOfficeXPTheme::FillShortcutItemEntry(CDC* pDC, CXTPShortcutBarItem* pItem)
  396. {
  397. CXTPShortcutBar* pShortcutBar = pItem->GetShortcutBar();
  398. CRect rc = pItem->GetItemRect();
  399. if (pItem->IsSelected() &&
  400. (pShortcutBar->GetHotItem() != pItem || (pShortcutBar->GetPressedItem() != NULL && pShortcutBar->GetPressedItem() != pItem)))
  401. {
  402. Rectangle(pDC, rc, XPCOLOR_HIGHLIGHT_PUSHED_BORDER, XPCOLOR_HIGHLIGHT_CHECKED);
  403. pDC->SetTextColor(GetXtremeColor(XPCOLOR_CHECKED_TEXT));
  404. }
  405. else if (pItem->IsSelected() ||
  406. (pShortcutBar->GetHotItem() == pItem && pShortcutBar->GetPressedItem() == pItem))
  407. {
  408. Rectangle(pDC, rc, XPCOLOR_HIGHLIGHT_PUSHED_BORDER, XPCOLOR_HIGHLIGHT_PUSHED);
  409. pDC->SetTextColor(m_clrPushedText);
  410. }
  411. else if ((pShortcutBar->GetHotItem() == pItem && pShortcutBar->GetPressedItem() == NULL) ||
  412. pShortcutBar->GetPressedItem() == pItem)
  413. {
  414. Rectangle(pDC, rc, XPCOLOR_HIGHLIGHT_BORDER, XPCOLOR_HIGHLIGHT);
  415. pDC->SetTextColor(GetXtremeColor(XPCOLOR_HIGHLIGHT_TEXT));
  416. }
  417. }
  418. int CXTPShortcutBarOfficeXPTheme::DrawGripper(CDC* pDC, CXTPShortcutBar* pShortcutBar, BOOL bDraw)
  419. {
  420. if (bDraw)
  421. {
  422. CRect rc = pShortcutBar->GetGripperRect();
  423. pDC->FillSolidRect(rc, GetXtremeColor(COLOR_3DFACE));
  424. pDC->FillSolidRect(rc.left, rc.top, rc.Width(), 1, GetXtremeColor(COLOR_3DHIGHLIGHT));
  425. pDC->FillSolidRect(rc.left, rc.bottom - 1, rc.Width(), 1, GetXtremeColor(COLOR_3DSHADOW));
  426. Line(pDC, rc.CenterPoint().x - 16, rc.top + 3, rc.CenterPoint().x + 16, rc.top + 3, XPCOLOR_TOOLBAR_GRIPPER);
  427. Line(pDC, rc.CenterPoint().x - 16, rc.top + 5, rc.CenterPoint().x + 16, rc.top + 5, XPCOLOR_TOOLBAR_GRIPPER);
  428. }
  429. return 8;
  430. }
  431. //////////////////////////////////////////////////////////////////////////
  432. // CXTPShortcutBarOffice2000Theme
  433. void CXTPShortcutBarOffice2000Theme::FillShortcutBar(CDC* pDC, CXTPShortcutBar* pShortcutBar)
  434. {
  435. CXTPClientRect rc(pShortcutBar);
  436. pDC->FillSolidRect(rc, GetXtremeColor(COLOR_3DSHADOW));
  437. }
  438. void CXTPShortcutBarOffice2000Theme::DrawShortcutBarFrame(CDC* pDC, CXTPShortcutBar* pShortcutBar)
  439. {
  440. CXTPWindowRect rc(pShortcutBar);
  441. rc.OffsetRect(-rc.TopLeft());
  442. pDC->Draw3dRect(rc, GetXtremeColor(COLOR_3DSHADOW), GetXtremeColor(COLOR_3DHIGHLIGHT));
  443. }
  444. void CXTPShortcutBarOffice2000Theme::FillShortcutItemEntry(CDC* pDC, CXTPShortcutBarItem* pItem)
  445. {
  446. CXTPShortcutBar* pShortcutBar = pItem->GetShortcutBar();
  447. CRect rc = pItem->GetItemRect();
  448. if (pItem->IsSelected() &&
  449. (pShortcutBar->GetHotItem() != pItem || (pShortcutBar->GetPressedItem() != NULL && pShortcutBar->GetPressedItem() != pItem)))
  450. {
  451. pDC->Draw3dRect(rc, GetXtremeColor(COLOR_BTNTEXT), GetXtremeColor(COLOR_3DHIGHLIGHT));
  452. }
  453. else if (pItem->IsSelected() ||
  454. (pShortcutBar->GetHotItem() == pItem && pShortcutBar->GetPressedItem() == pItem))
  455. {
  456. pDC->Draw3dRect(rc, GetXtremeColor(COLOR_BTNTEXT), GetXtremeColor(COLOR_3DHIGHLIGHT));
  457. }
  458. else if ((pShortcutBar->GetHotItem() == pItem && pShortcutBar->GetPressedItem() == NULL) ||
  459. pShortcutBar->GetPressedItem() == pItem)
  460. {
  461. pDC->Draw3dRect(rc, GetXtremeColor(COLOR_3DHIGHLIGHT), GetXtremeColor(COLOR_BTNTEXT));
  462. }
  463. pDC->SetTextColor(GetXtremeColor(COLOR_3DHIGHLIGHT));
  464. }
  465. int CXTPShortcutBarOffice2000Theme::DrawGripper(CDC* pDC, CXTPShortcutBar* pShortcutBar, BOOL bDraw)
  466. {
  467. if (bDraw)
  468. {
  469. CRect rc = pShortcutBar->GetGripperRect();
  470. pDC->FillSolidRect(rc, GetXtremeColor(COLOR_3DFACE));
  471. }
  472. return 5;
  473. }
  474. void CXTPShortcutBarOffice2000Theme::DrawImage(CDC* pDC, CPoint pt, CSize sz, CXTPImageManagerIcon* pImage, BOOL bSelected, BOOL bPressed, BOOL bChecked)
  475. {
  476. if (bChecked) pImage->Draw(pDC, pt, bChecked && (bSelected || bPressed) ? pImage->GetHotIcon() : pImage->GetCheckedIcon(), sz);
  477. else if (!bSelected && !bPressed)
  478. {
  479. pImage->Draw(pDC, pt, pImage->GetIcon(), sz);
  480. }
  481. else if ((bSelected && !bPressed) || (!bSelected && bPressed))
  482. {
  483. pImage->Draw(pDC, pt, pImage->GetHotIcon(), sz);
  484. }
  485. else if ((bSelected && bPressed))
  486. pImage->Draw(pDC, CPoint(pt.x + 1, pt.y + 1), pImage->GetHotIcon(), sz);
  487. }
  488. void CXTPShortcutBarOfficeXPTheme::DrawImage(CDC* pDC, CPoint pt, CSize sz, CXTPImageManagerIcon* pImage, BOOL bSelected, BOOL bPressed, BOOL bChecked)
  489. {
  490. if (bChecked) pImage->Draw(pDC, pt, bChecked && (bSelected || bPressed) ? pImage->GetHotIcon() : pImage->GetCheckedIcon(), sz);
  491. else if (!bSelected && !bPressed)
  492. {
  493. pImage->Draw(pDC, pt, pImage->GetFadedIcon(), sz);
  494. }
  495. else if ((bSelected && !bPressed) || (!bSelected && bPressed))
  496. {
  497. pImage->Draw(pDC, CPoint(pt.x + 1, pt.y + 1), pImage->GetShadowIcon(), sz);
  498. pImage->Draw(pDC, CPoint(pt.x - 1, pt.y - 1), pImage->GetHotIcon(), sz);
  499. }
  500. else if (bSelected && bPressed)
  501. pImage->Draw(pDC, pt, pImage->GetHotIcon(), sz);
  502. }
  503. void CXTPShortcutBarOffice2003Theme::DrawImage(CDC* pDC, CPoint pt, CSize sz, CXTPImageManagerIcon* pImage, BOOL bSelected, BOOL bPressed, BOOL bChecked)
  504. {
  505. pImage->Draw(pDC, pt, bSelected || bPressed ? pImage->GetHotIcon(): bChecked ? pImage->GetCheckedIcon() : pImage->GetIcon(), sz);
  506. }
  507. //////////////////////////////////////////////////////////////////////////
  508. // CXTPShortcutBarOffice2007Theme
  509. CXTPShortcutBarOffice2007Theme::CXTPShortcutBarOffice2007Theme()
  510. {
  511. m_bBoldItemCaptionFont = TRUE;
  512. m_bShowTopLeftCaptionShadow = TRUE;
  513. m_bClearTypeTextQuality = TRUE;
  514. m_strOfficeFont = _T("Segoe UI");
  515. m_rcCaptionPadding.SetRect(8, 0, 8, 0);
  516. m_rcItemCaptionPadding.SetRect(8, 0, 8, 0);
  517. }
  518. void CXTPShortcutBarOffice2007Theme::RefreshMetrics()
  519. {
  520. CXTPShortcutBarOffice2003Theme::RefreshMetrics();
  521. CXTPOffice2007Images* pImages = XTPOffice2007Images();
  522. CXTPOffice2007Image* pImage = pImages->LoadFile(_T("SHORTCUTBARITEMS"));
  523. ASSERT(pImage);
  524. if (!pImage)
  525. return;
  526. COLORREF clrText = pImages->GetImageColor(_T("ShortcutBar"), _T("NormalText"));
  527. m_clrPushedText.SetStandardValue(clrText);
  528. m_clrNormalText.SetStandardValue(clrText);
  529. m_clrHotText.SetStandardValue(clrText);
  530. m_clrSelectedText.SetStandardValue(pImages->GetImageColor(_T("ShortcutBar"), _T("SelectedText")));
  531. m_clrShortcutItemShadow.SetStandardValue(pImages->GetImageColor(_T("ShortcutBar"), _T("FrameBorder")));
  532. m_grcCaption.SetStandardValue(pImages->GetImageColor(_T("ShortcutBar"), _T("CaptionLight")),
  533. pImages->GetImageColor(_T("ShortcutBar"), _T("CaptionDark")));
  534. m_clrCaptionText.SetStandardValue(pImages->GetImageColor(_T("ShortcutBar"), _T("CaptionText")));
  535. m_grcShortcutBarGripper.SetStandardValue(pImages->GetImageColor(_T("ShortcutBar"), _T("GripperLight")),
  536. pImages->GetImageColor(_T("ShortcutBar"), _T("GripperDark")));
  537. m_grcItemCaption.SetStandardValue(pImages->GetImageColor(_T("ShortcutBar"), _T("ItemNormalCaptionLight")),
  538. pImages->GetImageColor(_T("ShortcutBar"), _T("ItemNormalCaptionDark")));
  539. m_grcItemHotCaption.SetStandardValue(pImages->GetImageColor(_T("ShortcutBar"), _T("ItemHotCaptionLight")),
  540. pImages->GetImageColor(_T("ShortcutBar"), _T("ItemHotCaptionDark")));
  541. m_clrItemCaptionText.SetStandardValue(pImages->GetImageColor(_T("ShortcutBar"), _T("ItemCaptionText")));
  542. m_clrItemCaptionTop.SetStandardValue(pImages->GetImageColor(_T("ShortcutBar"), _T("ItemCaptionTop")));
  543. m_clrItemCaptionShadow.SetStandardValue(pImages->GetImageColor(_T("ShortcutBar"), _T("ItemCaptionShadow")));
  544. m_grcShortcutItem.SetStandardValue(RGB(227, 239, 255), RGB(192, 219, 255), 0.25f);
  545. }
  546. int CXTPShortcutBarOffice2007Theme::DrawPaneItemCaption(CDC* pDC, CXTPShortcutBarPaneItem* pItem, BOOL bDraw)
  547. {
  548. if (bDraw)
  549. {
  550. CXTPFontDC font(pDC, &m_fntPaneItemCaption);
  551. CRect rc = pItem->GetCaptionRect();
  552. COLORREF clrLight = pItem->IsHighlighted() ? m_grcItemHotCaption.clrLight : m_grcItemCaption.clrLight;
  553. COLORREF clrDark = pItem->IsHighlighted() ? m_grcItemHotCaption.clrDark : m_grcItemCaption.clrDark;
  554. XTPDrawHelpers()->GradientFill(pDC, CRect(rc.left, rc.top, rc.CenterPoint().x, rc.bottom), clrDark, clrLight, TRUE);
  555. XTPDrawHelpers()->GradientFill(pDC, CRect(rc.CenterPoint().x, rc.top, rc.right, rc.bottom), clrLight, clrDark, TRUE);
  556. pDC->FillSolidRect(0, rc.bottom - 1, rc.Width(), 1, m_clrItemCaptionShadow);
  557. pDC->FillSolidRect(0, rc.top, rc.Width(), 1, m_clrItemCaptionTop);
  558. if (m_bShowTopLeftCaptionShadow)
  559. {
  560. pDC->FillSolidRect(0, rc.top + 1, rc.Width(), 1, RGB(0xFF, 0xFF, 0xFF));
  561. pDC->FillSolidRect(0, rc.top + 1, 1, rc.Height() - 2, RGB(0xFF, 0xFF, 0xFF));
  562. }
  563. CRect rcText(rc);
  564. rcText.DeflateRect(m_rcItemCaptionPadding);
  565. if (pItem->IsExpandable())
  566. {
  567. CXTPOffice2007Image* pImage = XTPOffice2007Images()->LoadFile(_T("SHORTCUTBARGLYPHS"));
  568. ASSERT(pImage);
  569. if (!pImage)
  570. return m_nPaneItemHeight;
  571. CRect rcSrc(pImage->GetSource(pItem->IsExpanded() ? 2 : 3, 5));
  572. CRect rcDest(CPoint(rc.right - 2 - rcSrc.Width(), (rc.top + rc.bottom + 2 - rcSrc.Height()) / 2), rcSrc.Size());
  573. pImage->DrawImage(pDC, rcDest, rcSrc);
  574. rcText.right = rcDest.left - 2;
  575. }
  576. pDC->SetBkMode(TRANSPARENT);
  577. pDC->SetTextColor(m_clrItemCaptionText);
  578. pDC->DrawText(pItem->GetCaption(), rcText, DT_LEFT | DT_SINGLELINE | DT_VCENTER | DT_END_ELLIPSIS);
  579. }
  580. return m_nPaneItemHeight;
  581. }
  582. void CXTPShortcutBarOffice2007Theme::FillShortcutBar(CDC* pDC, CXTPShortcutBar* pShortcutBar)
  583. {
  584. CXTPOffice2007Image* pImage = XTPOffice2007Images()->LoadFile(_T("SHORTCUTBARITEMS"));
  585. if (!pImage)
  586. {
  587. CXTPShortcutBarOffice2003Theme::FillShortcutBar(pDC, pShortcutBar);
  588. return;
  589. }
  590. CXTPClientRect rc(pShortcutBar);
  591. int nItemHeight = pShortcutBar->GetItemSize().cy;
  592. if (pShortcutBar->IsClientPaneVisible())
  593. {
  594. pDC->FillSolidRect(rc, GetXtremeColor(COLOR_WINDOW));
  595. int nTopExpandedLines = pShortcutBar->GetGripperRect().bottom +
  596. (pShortcutBar->GetExpandedLinesCount() - 1) * nItemHeight;
  597. pImage->DrawImage(pDC, CRect(0, nTopExpandedLines, rc.Width(), rc.bottom), pImage->GetSource(0, 4));
  598. }
  599. else
  600. {
  601. pImage->DrawImage(pDC, CRect(0, (pShortcutBar->GetExpandedLinesCount() - 1) * nItemHeight - 1, rc.Width(),
  602. rc.Height()), pImage->GetSource(0, 4));
  603. }
  604. }
  605. void CXTPShortcutBarOffice2007Theme::FillShortcutItemEntry(CDC* pDC, CXTPShortcutBarItem* pItem)
  606. {
  607. CXTPOffice2007Image* pImage = XTPOffice2007Images()->LoadFile(_T("SHORTCUTBARITEMS"));
  608. if (!pImage)
  609. {
  610. CXTPShortcutBarOffice2003Theme::FillShortcutItemEntry(pDC, pItem);
  611. return;
  612. }
  613. CXTPShortcutBar* pShortcutBar = pItem->GetShortcutBar();
  614. CRect rc = pItem->GetItemRect();
  615. CXTPClientRect rcShortcutBar(pShortcutBar);
  616. if (pItem->IsSelected() &&
  617. (pShortcutBar->GetHotItem() != pItem || (pShortcutBar->GetPressedItem() != NULL && pShortcutBar->GetPressedItem() != pItem)))
  618. {
  619. pImage->DrawImage(pDC, rc, pImage->GetSource(2, 4));
  620. }
  621. else if (pItem->IsSelected() ||
  622. (pShortcutBar->GetHotItem() == pItem && pShortcutBar->GetPressedItem() == pItem))
  623. {
  624. pImage->DrawImage(pDC, rc, pImage->GetSource(3, 4));
  625. pDC->SetTextColor(m_clrPushedText);
  626. }
  627. else if ((pShortcutBar->GetHotItem() == pItem && pShortcutBar->GetPressedItem() == NULL) ||
  628. pShortcutBar->GetPressedItem() == pItem)
  629. {
  630. pImage->DrawImage(pDC, rc, pImage->GetSource(1, 4));
  631. pDC->SetTextColor(m_clrHotText);
  632. }
  633. else if (pItem->IsExpanded())
  634. {
  635. pImage->DrawImage(pDC, rc, pImage->GetSource(0, 4));
  636. }
  637. if (pItem->IsSelected())
  638. {
  639. pDC->SetTextColor(m_clrSelectedText);
  640. }
  641. if (pItem->IsExpanded() && rc.bottom != rcShortcutBar.bottom)
  642. {
  643. pDC->FillSolidRect(0, rc.bottom - 1, rc.Width(), 1, m_clrShortcutItemShadow);
  644. }
  645. }
  646. void CXTPShortcutBarOffice2007Theme::DrawExpandButton(CDC* pDC, CRect rc)
  647. {
  648. CXTPOffice2007Image* pImage = XTPOffice2007Images()->LoadFile(_T("SHORTCUTBARGLYPHS"));
  649. ASSERT(pImage);
  650. if (!pImage)
  651. {
  652. CXTPShortcutBarOffice2003Theme::DrawExpandButton(pDC, rc);
  653. return;
  654. }
  655. CRect rcSrc(pImage->GetSource(4, 5));
  656. CRect rcDest(CPoint((rc.left + rc.right - rcSrc.Width()) / 2, (rc.top + rc.bottom - rcSrc.Height()) / 2), rcSrc.Size());
  657. pImage->DrawImage(pDC, rcDest, rcSrc);
  658. }
  659. int CXTPShortcutBarOffice2007Theme::DrawGripper(CDC* pDC, CXTPShortcutBar* pShortcutBar, BOOL bDraw)
  660. {
  661. if (bDraw)
  662. {
  663. CXTPOffice2007Image* pImage = XTPOffice2007Images()->LoadFile(_T("SHORTCUTBARGRIPPER"));
  664. ASSERT(pImage);
  665. if (!pImage)
  666. {
  667. return CXTPShortcutBarOffice2003Theme::DrawGripper(pDC, pShortcutBar, bDraw);
  668. }
  669. CRect rc = pShortcutBar->GetGripperRect();
  670. XTPDrawHelpers()->GradientFill(pDC, rc, m_grcShortcutBarGripper, FALSE);
  671. pDC->FillSolidRect(rc.left, rc.top, rc.Width(), 1, m_clrShortcutItemShadow);
  672. pDC->FillSolidRect(rc.left, rc.top + 1, rc.Width(), 1, RGB(0xFF, 0xFF, 0xFF));
  673. pDC->FillSolidRect(rc.left, rc.bottom - 1, rc.Width(), 1, m_clrShortcutItemShadow);
  674. CRect rcSrc(pImage->GetSource());
  675. CRect rcDest(CPoint((rc.left + rc.right - rcSrc.Width()) / 2, (rc.top + rc.bottom - rcSrc.Height()) / 2), rcSrc.Size());
  676. pImage->DrawImage(pDC, rcDest, rcSrc);
  677. }
  678. return 9;
  679. }