Scbarg.cpp
上传用户:zhanglf88
上传日期:2013-11-19
资源大小:6036k
文件大小:9k
源码类别:

金融证券系统

开发平台:

Visual C++

  1. /////////////////////////////////////////////////////////////////////////
  2. //
  3. // CSizingControlBarG           Version 2.43
  4. // 
  5. // Created: Jan 24, 1998        Last Modified: August 03, 2000
  6. //
  7. // See the official site at www.datamekanix.com for documentation and
  8. // the latest news.
  9. //
  10. /////////////////////////////////////////////////////////////////////////
  11. // Copyright (C) 1998-2000 by Cristi Posea. All rights reserved.
  12. //
  13. // This code is free for personal and commercial use, providing this 
  14. // notice remains intact in the source files and all eventual changes are
  15. // clearly marked with comments.
  16. //
  17. // You must obtain the author's consent before you can include this code
  18. // in a software library.
  19. //
  20. // No warrantee of any kind, express or implied, is included with this
  21. // software; use at your own risk, responsibility for damages (if any) to
  22. // anyone resulting from the use of this software rests entirely with the
  23. // user.
  24. //
  25. // Send bug reports, bug fixes, enhancements, requests, flames, etc. to
  26. // cristi@datamekanix.com or post them at the message board at the site.
  27. /////////////////////////////////////////////////////////////////////////
  28. //
  29. // Class :  CSizingControlBarG
  30. //
  31. // Version : 1.0
  32. //
  33. // Created : Jan 4, 2001        
  34. //
  35. // Last Modified: 
  36. //
  37. // Modify by Francisco Campos  
  38. //
  39. // Copyright (C) 2001 by Francisco Campos. All rights reserved.
  40. //
  41. // fcampos@tutopia.com.
  42. //
  43. //
  44. // sizecbar.cpp : implementation file
  45. //
  46. #include "stdafx.h"
  47. #include "scbarg.h"
  48. #include "resource.h"
  49. #include "GuiDrawLayer.h"
  50. #ifdef _DEBUG
  51. #define new DEBUG_NEW
  52. #undef THIS_FILE
  53. static char THIS_FILE[] = __FILE__;
  54. #endif
  55. /////////////////////////////////////////////////////////////////////////
  56. // CSizingControlBarG
  57. IMPLEMENT_DYNAMIC(CSizingControlBarG, baseCSizingControlBarG);
  58. CSizingControlBarG::CSizingControlBarG()
  59. {
  60.     m_cyGripper = 17;
  61. m_style=Office97;  //style office 97 by default
  62. }
  63. CSizingControlBarG::~CSizingControlBarG()
  64. {
  65. }
  66. BEGIN_MESSAGE_MAP(CSizingControlBarG, baseCSizingControlBarG)
  67.     //{{AFX_MSG_MAP(CSizingControlBarG)
  68.     ON_WM_NCLBUTTONUP()
  69.     ON_WM_NCHITTEST()
  70. ON_COMMAND(WM_SHOWTITLE,ShowCaption)
  71.     //}}AFX_MSG_MAP
  72.     ON_MESSAGE(WM_SETTEXT, OnSetText)
  73. END_MESSAGE_MAP()
  74. /////////////////////////////////////////////////////////////////////////
  75. // CSizingControlBarG message handlers
  76. /////////////////////////////////////////////////////////////////////////
  77. // Mouse Handling
  78. //
  79. void CSizingControlBarG::OnNcLButtonUp(UINT nHitTest, CPoint point)
  80. {
  81.     if (nHitTest == HTCLOSE)
  82.         m_pDockSite->ShowControlBar(this, FALSE, FALSE); // hide
  83.     baseCSizingControlBarG::OnNcLButtonUp(nHitTest, point);
  84. }
  85. void CSizingControlBarG::ShowCaption()
  86. {
  87. baseCSizingControlBarG::OnNcpaint();
  88. }
  89. void CSizingControlBarG::NcPaintGripper(CDC* pDC, CRect rcClient)
  90. {
  91.     if (!HasGripper())
  92.         return;
  93. CRect gripper = rcClient;
  94. gripper.top =5;
  95. gripper.bottom =gripper.top +m_cyGripper-1;
  96. if(!m_bActive)
  97. {
  98. CPen cp(PS_SOLID,1,::GetSysColor(COLOR_BTNSHADOW));
  99. CPen* cpold=pDC->SelectObject(&cp);
  100. //linea superior
  101. pDC->MoveTo(gripper.left+1,gripper.top);
  102. pDC->LineTo(gripper.right,gripper.top);
  103. //linea izquierda
  104. pDC->MoveTo(gripper.left,gripper.top+1);
  105. pDC->LineTo(gripper.left,gripper.bottom);
  106. //linea inferior
  107. pDC->MoveTo(gripper.left+1,gripper.bottom);
  108. pDC->LineTo(gripper.right,gripper.bottom);
  109. //linea derecha
  110. pDC->MoveTo(gripper.right,gripper.top+1);
  111. pDC->LineTo(gripper.right,gripper.bottom);
  112. pDC->SelectObject(cpold);
  113. }
  114. else
  115. {
  116. CBrush cb;
  117. cb.CreateSolidBrush(::GetSysColor(COLOR_ACTIVECAPTION));//GuiDrawLayer::GetRGBCaptionXP());
  118. pDC->FillRect(gripper,&cb);
  119. }
  120. gripper.DeflateRect(1, 1);
  121. CString m_caption;
  122. GetWindowText(m_caption);
  123. CFont m_cfont;
  124. m_cfont.CreateFont(-11,0,0,0,400,0,0,0,0,1,2,1,34,"Verdana");
  125. CFont* m_fontOld=pDC->SelectObject(&m_cfont);
  126. int nMode = pDC->SetBkMode(TRANSPARENT);
  127. CSize SizeCad=pDC->GetTextExtent(m_caption);
  128. CRect rCText=gripper;
  129. rCText.top=6;
  130. rCText.bottom =rCText.top+14;
  131. int cont=SizeCad.cx;
  132. while(cont > 1 && gripper.Width() > 0)
  133. {
  134. CSize coor=pDC->GetTextExtent(m_caption,m_caption.GetLength());
  135. if(coor.cx > gripper.Width()-10)
  136. {
  137. m_caption=m_caption.Left(m_caption.GetLength()-1);
  138. }
  139. else
  140. break;
  141. cont--;
  142. }
  143. if (gripper.Width() > 0 )
  144. if (!m_bActive)
  145. pDC->TextOut(rCText.left+3,rCText.top,m_caption);
  146. else
  147. {
  148. pDC->SetTextColor(RGB(255,255,255));
  149. pDC->TextOut(rCText.left+3,rCText.top,m_caption);
  150. }
  151.   pDC->SetBkMode(nMode);
  152. pDC->SelectObject(m_fontOld);
  153. if (m_bActive)
  154. m_biHide.m_bActive=TRUE;
  155. else
  156. m_biHide.m_bActive=FALSE;
  157. m_biHide.m_Stylo=m_style;
  158.     m_biHide.Paint(pDC);
  159. }
  160. void CSizingControlBarG::NcCalcClient(LPRECT pRc, UINT nDockBarID)
  161. {
  162.     CRect rcBar(pRc); // save the bar rect
  163.     // subtract edges
  164.     baseCSizingControlBarG::NcCalcClient(pRc, nDockBarID);
  165.     if (!HasGripper())
  166.         return;
  167.     CRect rc(pRc); // the client rect as calculated by the base class
  168.    // rc.DeflateRect(0, m_cyGripper, 0, 0);
  169.     // set position for the "x" (hide bar) button
  170.     CPoint ptOrgBtn;
  171.     ptOrgBtn = CPoint(rc.right - 12, rc.top - 15);
  172.     m_biHide.Move(ptOrgBtn - rcBar.TopLeft());
  173.     *pRc = rc;
  174. }
  175. UINT CSizingControlBarG::OnNcHitTest(CPoint point)
  176. {
  177.     CRect rcBar;
  178.     GetWindowRect(rcBar);
  179.     UINT nRet = baseCSizingControlBarG::OnNcHitTest(point);
  180.     if (nRet != HTCLIENT)
  181.         return nRet;
  182.     CRect rc = m_biHide.GetRect();
  183.     rc.OffsetRect(rcBar.TopLeft());
  184.     if (rc.PtInRect(point))
  185.         return HTCLOSE;
  186.     return HTCLIENT;
  187. }
  188. /////////////////////////////////////////////////////////////////////////
  189. // CSizingControlBarG implementation helpers
  190. void CSizingControlBarG::OnUpdateCmdUI(CFrameWnd* pTarget,
  191.                                       BOOL bDisableIfNoHndler)
  192. {
  193.     CPoint pt;
  194.     ::GetCursorPos(&pt);
  195. BOOL bNeedPaint = FALSE;
  196. UNUSED_ALWAYS(bDisableIfNoHndler);
  197.     UNUSED_ALWAYS(pTarget);
  198.     if (!HasGripper())
  199.         return;
  200.     CWnd* pFocus = GetFocus();
  201.     BOOL bActiveOld = m_bActive;
  202.     m_bActive = (pFocus->GetSafeHwnd() && IsChild(pFocus));
  203. BOOL bHit = (OnNcHitTest(pt) == HTCLOSE);
  204.     BOOL bLButtonDown = (::GetKeyState(VK_LBUTTON) < 0);
  205.     BOOL bWasPushed = m_biHide.bPushed;
  206.     m_biHide.bPushed = bHit && bLButtonDown;
  207.     BOOL bWasRaised = m_biHide.bRaised;
  208.     m_biHide.bRaised = bHit && !bLButtonDown;
  209. bNeedPaint |= (m_biHide.bPushed ^ bWasPushed) ||
  210.                   (m_biHide.bRaised ^ bWasRaised)|| (bActiveOld != m_bActive);
  211.     if (bNeedPaint)
  212.         SendMessage(WM_NCPAINT);
  213. }
  214. /////////////////////////////////////////////////////////////////////////
  215. // CSCBButton
  216. CSCBButton::CSCBButton()
  217. {
  218.     bRaised = TRUE;
  219.     bPushed = FALSE;
  220. m_bActive=FALSE;
  221. }
  222. void CSCBButton::Paint(CDC* pDC)
  223. {
  224.     CRect rc = GetRect();
  225. rc.InflateRect(1,1);
  226. if (bPushed)
  227.         pDC->Draw3dRect(rc, ::GetSysColor(COLOR_BTNSHADOW),
  228.         ::GetSysColor(COLOR_BTNHIGHLIGHT));
  229. else
  230. {
  231. if (m_Stylo == 1   )
  232. {  //== office 97
  233. rc.InflateRect(1,1);
  234. pDC->Draw3dRect(rc, ::GetSysColor(COLOR_BTNHIGHLIGHT),
  235. ::GetSysColor(BLACK_PEN));
  236. CPen Dark(PS_SOLID,1,GetSysColor(COLOR_BTNSHADOW));
  237. CPen* pOld=pDC->SelectObject(&Dark);
  238. pDC->MoveTo(rc.left+1,rc.bottom-2);
  239. pDC->LineTo(rc.right-2,rc.bottom-2);
  240. pDC->MoveTo(rc.right-2,rc.top+1);
  241. pDC->LineTo(rc.right-2,rc.bottom-1);
  242. pDC->SelectObject(pOld);
  243. }
  244. else if (m_Stylo == 1 && !bRaised) // == office 2000
  245. {
  246. CBrush cbn;
  247. cbn.CreateSysColorBrush(COLOR_BTNFACE);
  248. pDC->FillRect(rc,&cbn);
  249. }
  250. else if (bRaised)
  251. {
  252. pDC->Draw3dRect(rc, ::GetSysColor(COLOR_BTNHIGHLIGHT),
  253. ::GetSysColor(BLACK_PEN));
  254. rc.DeflateRect(1,1);
  255. pDC->Draw3dRect(rc, ::GetSysColor(COLOR_BTNFACE),
  256. ::GetSysColor(COLOR_BTNSHADOW));
  257. }
  258. }
  259.     COLORREF clrOldTextColor = pDC->GetTextColor();
  260.     if(!m_bActive)
  261. pDC->SetTextColor(::GetSysColor(COLOR_BTNTEXT));
  262. else
  263. pDC->SetTextColor(pDC->SetTextColor(RGB(255,255,255)));
  264.     int nPrevBkMode = pDC->SetBkMode(TRANSPARENT);
  265.     CFont font;
  266.     int ppi = pDC->GetDeviceCaps(LOGPIXELSX);
  267.     int pointsize = MulDiv(60, 96, ppi); // 6 points at 96 ppi
  268.     font.CreatePointFont(pointsize, _T("Marlett"));
  269.     CFont* oldfont = pDC->SelectObject(&font);
  270.     pDC->TextOut(ptOrg.x + 2, ptOrg.y + 2, CString(_T("r"))); // x-like
  271.     pDC->SelectObject(oldfont);
  272.     pDC->SetBkMode(nPrevBkMode);
  273.     pDC->SetTextColor(clrOldTextColor);
  274. }
  275.  
  276. void CSizingControlBarG::setStyleG(StyleG style) 
  277. {
  278. m_style=style;
  279. SendMessage(WM_NCPAINT);
  280. }
  281. BOOL CSizingControlBarG::HasGripper() const
  282. {
  283. #if defined(_SCB_MINIFRAME_CAPTION) || !defined(_SCB_REPLACE_MINIFRAME)
  284.     // if the miniframe has a caption, don't display the gripper
  285.     if (IsFloating())
  286.         return FALSE;
  287. #endif //_SCB_MINIFRAME_CAPTION
  288.     return TRUE;
  289. }