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

金融证券系统

开发平台:

Visual C++

  1. //-----------------------------------------------------------------------//
  2. // This is a part of the GuiLib MFC Extention.  //
  3. // Autor  :  Francisco Campos  //
  4. // (C) 2002 Francisco Campos <www.beyondata.com> All rights reserved     //
  5. // This code is provided "as is", with absolutely no warranty expressed  //
  6. // or implied. Any use is at your own risk.  //
  7. // You must obtain the author's consent before you can include this code //
  8. // in a software library.  //
  9. // If the source code in  this file is used in any application  //
  10. // then acknowledgement must be made to the author of this program  //
  11. // fcampos@tutopia.com  //
  12. //-----------------------------------------------------------------------//
  13. #include "stdafx.h"
  14. #include "GuiMiniSplitter.h"
  15. #include "GuiDrawLayer.h"
  16. #ifdef _DEBUG
  17. #define new DEBUG_NEW
  18. #undef THIS_FILE
  19. static char THIS_FILE[] = __FILE__;
  20. #endif
  21. /////////////////////////////////////////////////////////////////////////////
  22. // CGuiMiniSplitter
  23. CGuiMiniSplitter::CGuiMiniSplitter()
  24. {
  25. bIniciaArrastre=FALSE;
  26. m_clrface=GuiDrawLayer::GetRGBColorFace();
  27. m_clrborder=GuiDrawLayer::GetRGBColorShadow();
  28. m_ToolLeft=NULL;
  29. m_ToolRight=NULL;
  30. }
  31. CGuiMiniSplitter::~CGuiMiniSplitter()
  32. {
  33. }
  34. BEGIN_MESSAGE_MAP(CGuiMiniSplitter, CWnd)
  35. //{{AFX_MSG_MAP(CGuiMiniSplitter)
  36. ON_WM_SIZE()
  37. ON_WM_SYSCOLORCHANGE()
  38. ON_WM_PAINT()
  39. ON_WM_LBUTTONDOWN()
  40. ON_WM_LBUTTONUP()
  41. ON_WM_MOUSEMOVE()
  42. ON_WM_SETCURSOR()
  43. ON_WM_TIMER()
  44. ON_WM_ERASEBKGND()
  45. //}}AFX_MSG_MAP
  46. END_MESSAGE_MAP()
  47. /////////////////////////////////////////////////////////////////////////////
  48. // CGuiMiniSplitter message handlers
  49. BOOL CGuiMiniSplitter::Create(CWnd* pParentWnd)
  50. {
  51. return CWnd::Create(0,0,
  52.  WS_CHILD|WS_VISIBLE,CRect(0,0,0,0), pParentWnd,0xffff);
  53. }
  54. void CGuiMiniSplitter::OnSize(UINT nType, int cx, int cy) 
  55. {
  56. CWnd::OnSize(nType, cx, cy);
  57. RecalLayout();
  58. // TODO: Add your message handler code here
  59. }
  60. void CGuiMiniSplitter::RecalLayout()
  61. {
  62. CRect m_rectCli;
  63. CRect m_rctemp;
  64. if (m_ToolLeft== NULL || m_ToolRight==NULL) return ;
  65. GetClientRect(m_rectCli);
  66. if (m_rectCli.IsRectEmpty()) return;
  67. if (m_rcSplitter.IsRectEmpty())
  68. {
  69. m_rcSplitter=m_rectCli;
  70. m_rcSplitter.right=m_rectCli.Width()/2;
  71. m_rcSplitter.left=m_rcSplitter.right-3;
  72. }
  73. m_rcSplitter.right=m_rcSplitter.left+3;
  74. m_rctemp=m_rectCli;
  75. m_rctemp.right=m_rcSplitter.left-1;
  76. m_ToolLeft->MoveWindow(m_rctemp);
  77. m_rctemp=m_rectCli;
  78. m_rctemp.left=m_rcSplitter.right+1;
  79. m_ToolRight->MoveWindow(m_rctemp);
  80. }
  81. void CGuiMiniSplitter::OnSysColorChange() 
  82. {
  83. CWnd::OnSysColorChange();
  84. }
  85. void CGuiMiniSplitter::OnPaint() 
  86. {
  87. CPaintDC dc(this);
  88. CBrush cbr;
  89. CRect rcClient;
  90. GetClientRect(&rcClient);
  91. cbr.CreateSolidBrush(m_clrface);
  92. CDC MemDC;
  93. CBitmap m_BitmapMemDC;
  94. MemDC.CreateCompatibleDC(&dc);
  95. m_BitmapMemDC.CreateCompatibleBitmap(&dc,
  96.   rcClient.Width(),rcClient.Height());
  97. CBitmap* m_bitmapOld=MemDC.SelectObject(&m_BitmapMemDC);
  98. MemDC.FillRect(&rcClient,&cbr);
  99. DrawSplitter(m_rcSplitter,&MemDC);
  100. dc.BitBlt(0,0,rcClient.Width(),rcClient.Height(),&MemDC,
  101.       rcClient.left,rcClient.top,SRCCOPY);
  102. MemDC.SelectObject(m_bitmapOld);
  103. m_BitmapMemDC.DeleteObject();
  104. MemDC.DeleteDC();
  105. }
  106. void CGuiMiniSplitter::OnLButtonUp(UINT nFlags, CPoint point) 
  107. {
  108. if (bIniciaArrastre==TRUE)
  109. {
  110. bIniciaArrastre=FALSE;
  111. RecalLayout();
  112. ReleaseCapture ();
  113. Invalidate();
  114. }
  115. CWnd::OnLButtonUp(nFlags, point);
  116. }
  117. void CGuiMiniSplitter::OnLButtonDown(UINT nFlags, CPoint point) 
  118. {
  119. // TODO: Add your message handler code here and/or call default
  120. if (m_rcSplitter.PtInRect(point) && !bIniciaArrastre)
  121. {
  122. bIniciaArrastre=TRUE;
  123. SetCapture ();
  124. InvalidateRect(m_rcSplitter,TRUE);
  125. }
  126. else
  127. CWnd::OnLButtonDown(nFlags, point);
  128. }
  129. void CGuiMiniSplitter::OnMouseMove(UINT nFlags, CPoint point) 
  130. {
  131. // TODO: Add your message handler code here and/or call default
  132. CRect m_rectCli;
  133. GetClientRect(m_rectCli);
  134.     if (bIniciaArrastre==TRUE)
  135.     {
  136. m_rcSplitterOld=m_rcSplitter;
  137. if (point.x < m_rectCli.left+50) 
  138. m_rcSplitter.left=50;
  139. else if (point.x >m_rectCli.right-50)
  140. m_rcSplitter.left=m_rectCli.right-55;
  141. else 
  142. {
  143. m_rcSplitter.left= point.x;
  144. m_rcSplitter.right=point.x+3;
  145. }
  146. CClientDC dc(this);
  147. DrawSplitter(m_rcSplitter,&dc);
  148. InvalidateRect(m_rcSplitterOld);
  149. RecalLayout();
  150. }
  151. else
  152. CWnd::OnMouseMove(nFlags, point);
  153. }
  154. BOOL CGuiMiniSplitter::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message) 
  155. {
  156. // TODO: Add your message handler code here and/or call default
  157. CPoint ptCurPos;
  158. GetCursorPos (&ptCurPos);
  159. ScreenToClient (&ptCurPos);
  160. if (m_rcSplitter.PtInRect (ptCurPos))
  161. {
  162. SetCursor (LoadCursor(NULL, IDC_SIZEWE));
  163. return TRUE;
  164. }
  165. return CWnd::OnSetCursor(pWnd, nHitTest, message);
  166. }
  167. void CGuiMiniSplitter::OnTimer(UINT nIDEvent) 
  168. {
  169. // TODO: Add your message handler code here and/or call default
  170. CWnd::OnTimer(nIDEvent);
  171. }
  172. BOOL CGuiMiniSplitter::OnEraseBkgnd(CDC* pDC) 
  173. {
  174. return TRUE;
  175. }
  176. void  CGuiMiniSplitter::SetColor(COLORREF m_clrFace,COLORREF m_clrBorder)
  177. {
  178. if (!GetSafeHwnd()) return;
  179. if (!HIWORD(m_ToolLeft) || !HIWORD(m_ToolRight))
  180. return;
  181. m_clrface=m_clrFace;
  182. m_clrborder=m_clrBorder;
  183. m_ToolLeft->SetColor(m_clrface);
  184. m_ToolRight->SetColor(m_clrface);
  185. }
  186. BOOL CGuiMiniSplitter::AddMiniToolLeft(CGuiMiniTool * m_Toolleft)
  187. {
  188. if (!m_Toolleft->Create(_T(""),WS_VISIBLE | WS_CHILD |SS_OWNERDRAW, 
  189. CRect(0,0,0,0), this))
  190. return FALSE;
  191. m_ToolLeft= m_Toolleft;
  192. return TRUE;
  193. }
  194. BOOL CGuiMiniSplitter::AddMiniToolRight(CGuiMiniTool * m_Toolright)
  195. {
  196. CRect m_rectCli;
  197. GetClientRect(m_rectCli);
  198. if (!m_Toolright->Create(_T(""),WS_VISIBLE | WS_CHILD |SS_OWNERDRAW, 
  199. CRect(0,0,0,0), this))
  200. return FALSE;
  201. m_ToolRight=m_Toolright;
  202. RecalLayout();
  203. return TRUE;
  204. }
  205. void  CGuiMiniSplitter::DrawSplitter(CRect rc,CDC* pDC)
  206. {
  207. //CClientDC dc(this);
  208. rc.top+=1;
  209. rc.bottom-=1;
  210. pDC->Draw3dRect(rc,m_clrborder,m_clrborder);
  211. }