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

对话框与窗口

开发平台:

Visual C++

  1. // MsMoneyTheme.cpp: implementation of the CMsMoneyTheme class.
  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 "GUI_MsMoney.h"
  22. #include "MsMoneyTheme.h"
  23. #ifdef _DEBUG
  24. #undef THIS_FILE
  25. static char THIS_FILE[]=__FILE__;
  26. #define new DEBUG_NEW
  27. #endif
  28. //////////////////////////////////////////////////////////////////////
  29. // Construction/Destruction
  30. //////////////////////////////////////////////////////////////////////
  31. CMsMoneyTheme::CMsMoneyTheme(COLORREF clrGradientLight, COLORREF clrGradientDark, COLORREF clrLineLight, COLORREF clrLineDark)
  32. {
  33. m_clrGradientLight = clrGradientLight;
  34. m_clrGradientDark = clrGradientDark;
  35. m_clrLineLight = clrLineLight;
  36. m_clrLineDark = clrLineDark;
  37. }
  38. CMsMoneyTheme::~CMsMoneyTheme()
  39. {
  40. }
  41. void CMsMoneyTheme::FillCommandBarEntry(CDC* pDC, CXTPCommandBar* pBar)
  42. {
  43. CXTPClientRect rc(pBar);
  44. if (pBar->GetType() == xtpBarTypeMenuBar)
  45. {
  46. pDC->FillSolidRect(rc, RGB(91, 91, 91));
  47. }
  48. else if (pBar->GetType() == xtpBarTypeNormal)
  49. {
  50. GradientFill(pDC, rc, m_clrGradientLight, m_clrGradientDark, FALSE);
  51. CXTPPenDC pen(*pDC, 0);
  52. for (int i = rc.top + 1; i < rc.bottom; i+= 3)
  53. {
  54. pDC->FillSolidRect(rc.left, i, rc.Width(), 1, XTPDrawHelpers()->BlendColors(m_clrLineLight, m_clrLineDark, (float)(1.0 - ((i - rc.top)) / (float)rc.Height())));
  55. }
  56. }
  57. else if (pBar->GetType() == xtpBarTypePopup)
  58. {
  59. pDC->FillSolidRect(rc, RGB(91, 91, 91));
  60. pDC->Draw3dRect(rc, RGB(68, 68, 68), RGB(68, 68, 68));
  61. }
  62. }
  63. CSize CMsMoneyTheme::DrawControlPopupParent(CDC* pDC, CXTPControl* pButton, BOOL bDraw)
  64. {
  65. CRect rcButton = pButton->GetRect();
  66. XTPControlType controlType = pButton->GetType();
  67. CRect rcText(0, 0, 0, 0), rcShortcut(0, 0, 0, 0);
  68. BOOL bSelected = pButton->GetSelected(), bEnabled = pButton->GetEnabled(), bChecked = pButton->GetChecked();
  69. ASSERT(controlType == xtpControlButton || controlType == xtpControlPopup); // implemented only.
  70. if (bDraw)
  71. {
  72. CRect rcSelection(rcButton.left, rcButton.top, rcButton.right, rcButton.bottom);
  73. COLORREF clrText = !bEnabled? RGB(145, 145, 145): bSelected? RGB(255, 223, 127): RGB(255, 254, 249);
  74. pDC->SetTextColor(clrText);
  75. pDC->SetBkMode (TRANSPARENT);
  76. if (bSelected) pDC->FillSolidRect(rcSelection, RGB(80, 80, 80));
  77. if (bChecked)
  78. {
  79. CRect rcCheck (CPoint(rcButton.left - 2, rcButton.top + rcButton.Height()/2 - 10), CSize(20, 20));
  80. DrawCheckMark(pDC, rcCheck, clrText);
  81. }
  82. if (controlType == xtpControlPopup)
  83. {
  84. CPoint pt = CPoint(rcButton.right - 11, rcButton.CenterPoint().y);
  85. Triangle(pDC, CPoint(pt.x, pt.y - 3), CPoint(pt.x + 3, pt.y), CPoint(pt.x, pt.y + 3), clrText);
  86. }
  87. rcText.SetRect(rcButton.left + 16, rcButton.top, rcButton.right, rcButton.bottom);
  88. rcShortcut.SetRect(rcButton.left + 16 + 4, rcButton.top, rcButton.right - 19, rcButton.bottom);
  89. }
  90. pDC->DrawText(pButton->GetCaption(), &rcText, DT_SINGLELINE | DT_VCENTER | (!bDraw ? DT_CALCRECT : DT_END_ELLIPSIS) );
  91. if (controlType == xtpControlButton && pButton->GetShortcutText().GetLength() != 0 )
  92. pDC->DrawText(pButton->GetShortcutText(), &rcShortcut, DT_SINGLELINE | DT_VCENTER | (!bDraw ? DT_CALCRECT : DT_RIGHT) );
  93. return CSize(16 + 12 + rcText.Width() +  rcShortcut.Width() + 32, max(17, m_nTextHeight - 4));
  94. }
  95. CSize CMsMoneyTheme::DrawCommandBarSeparator(CDC* pDC, CXTPCommandBar* pBar, CXTPControl* pControl, BOOL bDraw)
  96. {
  97. if (!bDraw)
  98. {
  99. if (pBar->GetType() == xtpBarTypePopup)
  100. return CSize(3, 3);
  101. return CSize(6, 6);
  102. }
  103. CRect rc;
  104. pBar->GetClientRect(&rc);
  105. CRect rcControl = pControl->GetRect();
  106. if (pBar->GetType() == xtpBarTypePopup)
  107. {
  108. CXTPPenDC pen(*pDC, RGB(112, 112, 112));
  109. Line(pDC, CPoint(16, rcControl.top - 1), CPoint(rc.right - 14, rcControl.top - 1));
  110. }
  111. return 0;
  112. }
  113. CSize CMsMoneyTheme::DrawControlToolBarParent(CDC* pDC, CXTPControl* pButton, BOOL bDraw)
  114. {
  115. CRect rcButton = bDraw? pButton->GetRect(): CXTPEmptyRect();
  116. XTPControlType controlType = pButton->GetType();
  117. CSize szIcon = pButton->GetParent()->GetIconSize();
  118. CSize szButton = CSize(szIcon.cx  + 7, szIcon.cy  + 7);
  119. BOOL bVert = pButton->GetParent()->GetPosition() == xtpBarRight || pButton->GetParent()->GetPosition() == xtpBarLeft;
  120. BOOL bPressed = pButton->GetPressed(), bSelected = pButton->GetSelected(), bEnabled = pButton->GetEnabled(), bChecked = pButton->GetChecked(),
  121. bPopuped = pButton->GetPopuped();
  122. if (bDraw)
  123. {
  124. pDC->SetTextColor(!bEnabled? RGB(177, 177, 177): bSelected||bPressed? RGB(255, 223, 127): RGB(255, 254, 249));
  125. pDC->SetBkMode (TRANSPARENT);
  126. }
  127. switch(controlType)
  128. {
  129. case xtpControlPopup:
  130. {
  131. if (bDraw && (bSelected || bPopuped) && pButton->GetParent()->GetPosition() != xtpBarPopup)
  132. {
  133. pDC->FillSolidRect(rcButton, RGB(80, 80, 80));
  134. }
  135. CSize sz = DrawControlText(pDC, pButton, rcButton, bDraw, bVert, TRUE, FALSE);
  136. return !bVert? CSize(sz.cx + 16, sz.cy + 8): CSize(sz.cx + 8, sz.cy + 16);
  137. }
  138. case xtpControlSplitButtonPopup:
  139. {
  140. ASSERT(FALSE); // not implemented.
  141. return 0;
  142. }
  143. case xtpControlButtonPopup:
  144. case xtpControlButton:
  145. {
  146. CXTPFontDC font (pDC, &m_fontRegular);
  147. if (bDraw)
  148. {
  149. CRect rcText = rcButton;
  150. rcText.top = rcButton.top + szIcon.cy;
  151. DrawControlText(pDC, pButton, rcText, TRUE, FALSE, TRUE, controlType == xtpControlButtonPopup);
  152. if (pButton->GetIconId() != 0)
  153. {
  154. CPoint pt = CPoint(rcButton.CenterPoint().x - szIcon.cx / 2, rcButton.top + 3);
  155. CXTPImageManagerIcon* pImage = XTPImageManager()->GetImage(pButton->GetIconId(), szIcon.cx);
  156. DrawImage(pDC, pt, CSize(szIcon.cx, 0), pImage, bSelected, bPressed, bEnabled, bChecked, FALSE);
  157. }
  158. }
  159. else
  160. {
  161. CSize szText = DrawControlText(pDC, pButton, CXTPEmptyRect(), FALSE, FALSE, TRUE, controlType == xtpControlButtonPopup);
  162. szButton.cy = 10 + szIcon.cy + szText.cy;
  163. szButton.cx = max(szButton.cx, szText.cx + 10);
  164. }
  165. return szButton;
  166. }
  167. }
  168. return 0;
  169. }
  170. void CMsMoneyTheme::AdjustExcludeRect(CRect& rc, CXTPControl* pControl, BOOL bVertical)
  171. {
  172. CXTPCommandBar* pParent = pControl->GetParent();
  173. ASSERT(pParent);
  174. if (pControl->GetType() == xtpControlComboBox) return;
  175. if (pParent->GetType() != xtpBarTypePopup)
  176. {
  177. if (bVertical)
  178. rc.InflateRect(0, 0); else rc.InflateRect(0, 0);
  179. }
  180. else rc.DeflateRect(0, 0);
  181. }
  182. CRect CMsMoneyTheme::GetCommandBarBorders(CXTPCommandBar* pBar)
  183. {
  184. if (pBar->GetType() == xtpBarTypePopup) return CRect(1, 1, 1, 1);
  185. if (pBar->GetType() == xtpBarTypeNormal) return CRect(0, 5, 0, 5);
  186. return CXTPEmptyRect();
  187. }
  188. CSize CMsMoneyTheme::DrawCommandBarGripper(CDC* pDC, CXTPCommandBar* pBar, BOOL bDraw)
  189. {
  190. if (pBar->GetPosition() == xtpBarFloating)
  191. {
  192. CXTPClientRect rc(pBar);
  193. ASSERT(pDC);
  194. CXTPFontDC font(pDC, GetSmCaptionFont());
  195. CSize sz = pDC->GetTextExtent(_T(" "));
  196. rc.SetRect(3, 3, rc.right - 3, 3 + max(15, sz.cy));
  197. if (pDC && bDraw)
  198. {
  199. pDC->FillSolidRect(rc, pBar->GetType() == xtpBarTypeMenuBar? RGB(80, 80, 80): m_clrGradientDark);
  200. pDC->SetTextColor(GetXtremeColor(COLOR_3DHIGHLIGHT));
  201. pDC->DrawText(pBar->GetTitle(), CRect(5, 3, rc.right - 2* rc.Size().cy, rc.bottom), DT_SINGLELINE | DT_VCENTER );
  202. }
  203. return rc.Size();
  204. //return CXTPDefaultTheme::DrawCommandBarGripper(pDC, pBar, bDraw);
  205. }
  206. return 0;
  207. }
  208. void CMsMoneyTheme::DrawImage(CDC* pDC, CPoint pt, CSize /*sz*/, CXTPImageManagerIcon* pImage, BOOL bSelected, BOOL bPressed, BOOL bEnabled, BOOL bChecked, BOOL bPopuped, BOOL  )
  209. {
  210. if (!bEnabled)
  211. {
  212. pImage->Draw(pDC, pt, pImage->GetIcon(xtpImageDisabled));
  213. }
  214. else if (bPopuped || bChecked) 
  215. {
  216. pImage->Draw(pDC, pt, pImage->GetIcon(bChecked && (bSelected || bPressed) ? xtpImageHot : xtpImageNormal));
  217. }
  218. else
  219. {
  220. pImage->Draw(pDC, pt, pImage->GetIcon(bSelected || bPressed ? xtpImageHot : xtpImageNormal));
  221. }
  222. }
  223. CSize CMsMoneyTheme::DrawSpecialControl(CDC* pDC, XTPSpecialControl controlType, CXTPControl* pButton, CXTPCommandBar* pBar, BOOL bDraw, LPVOID lpParam)
  224. {
  225. if (controlType == xtpButtonExpandToolbar)
  226. {
  227. if (!bDraw)
  228. {
  229. CSize szBar = *(CSize*)lpParam;
  230. if (!IsVerticalPosition(pBar->GetPosition()))
  231. pButton->SetRect(CRect(szBar.cx - (11 + 2), 2, szBar.cx - 2, szBar.cy - 2));
  232. else
  233. pButton->SetRect(CRect(2, szBar.cy - (11 + 2), szBar.cx - 2, szBar.cy - 2));
  234. }
  235. else
  236. {
  237. COLORREF clrText = pButton->GetSelected()||pButton->GetPressed()? RGB(255, 223, 127): RGB(255, 254, 249);
  238. CXTPPenDC pen(*pDC, clrText);
  239. BOOL bHiddenExists = *(BOOL*)lpParam;
  240. CRect rcButton = pButton->GetRect();
  241. if (!IsVerticalPosition(pBar->GetPosition()))
  242. {
  243. CPoint pt = CPoint(rcButton.left + rcButton.Width()/2, rcButton.bottom - 6);
  244. Triangle(pDC, CPoint(pt.x -2 , pt.y - 1), CPoint(pt.x + 2, pt.y - 1), CPoint (pt.x, pt.y + 1), clrText);
  245. if (bHiddenExists)
  246. {
  247. pDC->MoveTo(rcButton.left + 2, rcButton.top + 4); pDC->LineTo(rcButton.left + 4, rcButton.top + 6);     pDC->LineTo(rcButton.left + 1, rcButton.top + 9);
  248. pDC->MoveTo(rcButton.left + 3, rcButton.top + 4); pDC->LineTo(rcButton.left + 5, rcButton.top + 6);     pDC->LineTo(rcButton.left + 2, rcButton.top + 9);
  249. pDC->MoveTo(rcButton.left + 6, rcButton.top + 4); pDC->LineTo(rcButton.left + 8, rcButton.top + 6);     pDC->LineTo(rcButton.left + 5, rcButton.top + 9);
  250. pDC->MoveTo(rcButton.left + 7, rcButton.top + 4); pDC->LineTo(rcButton.left + 9, rcButton.top + 6);     pDC->LineTo(rcButton.left + 6, rcButton.top + 9);
  251. }
  252. } else
  253. {
  254. CPoint pt = CPoint(rcButton.left + 4, rcButton.top + 5);
  255. Triangle(pDC, CPoint(pt.x +2 , pt.y - 2), CPoint(pt.x + 2, pt.y + 2), CPoint (pt.x, pt.y), clrText);
  256. if (bHiddenExists)
  257. {
  258. pDC->MoveTo(rcButton.right - 8, rcButton.top + 2); pDC->LineTo(rcButton.right - 6, rcButton.top + 4);   pDC->LineTo(rcButton.right - 3, rcButton.top + 1);
  259. pDC->MoveTo(rcButton.right - 8, rcButton.top + 3); pDC->LineTo(rcButton.right - 6, rcButton.top + 5);   pDC->LineTo(rcButton.right - 3, rcButton.top + 2);
  260. pDC->MoveTo(rcButton.right - 8, rcButton.top + 6); pDC->LineTo(rcButton.right - 6, rcButton.top + 8);   pDC->LineTo(rcButton.right - 3, rcButton.top + 5);
  261. pDC->MoveTo(rcButton.right - 8, rcButton.top + 7); pDC->LineTo(rcButton.right - 6, rcButton.top + 9);   pDC->LineTo(rcButton.right - 3, rcButton.top + 6);
  262. }
  263. }
  264. }
  265. }
  266. else return CXTPDefaultTheme::DrawSpecialControl(pDC, controlType, pButton, pBar, bDraw, lpParam);
  267. return 0;
  268. }