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

金融证券系统

开发平台:

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 "GuiSplitterWnd.h"
  15. #include "GuiDrawLayer.h"
  16. // CGuiSplitterWnd
  17. #define BTNHILITE ::GetSysColor(COLOR_3DFACE)
  18. #define BTNSHADOW ::GetSysColor(COLOR_3DSHADOW)
  19. #define BTNHIGH   ::GetSysColor(COLOR_3DHIGHLIGHT)
  20. #define CX_BORDER  1
  21. #define CY_BORDER  1
  22. IMPLEMENT_DYNAMIC(CGuiSplitterWnd, CSplitterWnd)
  23. CGuiSplitterWnd::CGuiSplitterWnd()
  24. {
  25. m_bBorder=FALSE;
  26. }
  27. CGuiSplitterWnd::~CGuiSplitterWnd()
  28. {
  29. }
  30. BEGIN_MESSAGE_MAP(CGuiSplitterWnd, CSplitterWnd)
  31. ON_WM_PAINT()
  32. END_MESSAGE_MAP()
  33. // CGuiSplitterWnd message handlers
  34. void CGuiSplitterWnd::OnPaint()
  35. {
  36. //vil plagio del original
  37. ASSERT_VALID(this);
  38. CPaintDC dc(this);
  39. CRect rectClient;
  40. GetClientRect(&rectClient);
  41. rectClient.InflateRect(-m_cxBorder, -m_cyBorder);
  42. CRect rectInside;
  43. GetInsideRect(rectInside);
  44. // draw the splitter boxes
  45. if (m_bHasVScroll && m_nRows < m_nMaxRows)
  46. {
  47. OnDrawSplitter(&dc, splitBox,
  48. CRect(rectInside.right , rectClient.top,
  49. rectClient.right, rectClient.top + m_cySplitter));
  50. }
  51. if (m_bHasHScroll && m_nCols < m_nMaxCols)
  52. {
  53. OnDrawSplitter(&dc, splitBox,
  54. CRect(rectClient.left, rectInside.bottom,
  55. rectClient.left + m_cxSplitter, rectClient.bottom));
  56. }
  57. // extend split bars to window border (past margins)
  58. DrawAllSplitBars(&dc, rectInside.right, rectInside.bottom);
  59. }
  60. void CGuiSplitterWnd::OnDrawSplitter(CDC* pDC, ESplitType nType, const CRect& rect)
  61. {
  62. if (pDC == NULL)
  63. {
  64. RedrawWindow(rect, NULL, RDW_INVALIDATE|RDW_NOCHILDREN);
  65. return;
  66. }
  67. ASSERT_VALID(pDC);
  68. CRect rc = rect;
  69. switch (nType)
  70. {
  71. case splitBorder:
  72. if (!m_bBorder)
  73. {
  74. pDC->Draw3dRect(rc, BTNHILITE, BTNHILITE);
  75. rc.InflateRect(-CX_BORDER, -CY_BORDER);
  76. pDC->Draw3dRect(rc, BTNSHADOW, BTNHIGH);
  77. /*pDC->Draw3dRect(rc,GuiDrawLayer::GetRGBColorBTNHigh(), GuiDrawLayer::GetRGBColorBTNHigh());
  78. rc.InflateRect(-CX_BORDER, -CY_BORDER);
  79. pDC->Draw3dRect(rc, GuiDrawLayer::GetRGBColorShadow(), GuiDrawLayer::GetRGBColorBTNHigh());*/
  80. }
  81. else
  82. {
  83. CPen cp(PS_SOLID,1,GuiDrawLayer::GetRGBColorFace());
  84. pDC->Draw3dRect(rc, GuiDrawLayer::GetRGBColorFace(), GuiDrawLayer::GetRGBColorFace());
  85. rc.InflateRect(-CX_BORDER, -CY_BORDER);
  86. pDC->Draw3dRect(rc, GuiDrawLayer::GetRGBColorFace(), GuiDrawLayer::GetRGBColorBTNHigh());
  87. CPen* cpOld=pDC->SelectObject(&cp);
  88. pDC->MoveTo(rc.left,rc.bottom-1);
  89. pDC->LineTo(rc.right,rc.bottom-1);
  90. pDC->SelectObject(cpOld);
  91. }
  92. return;
  93. case splitIntersection:
  94. break;
  95. case splitBox:
  96. break;
  97. case splitBar:
  98. break;
  99. default:
  100. ASSERT(FALSE);  // unknown splitter type
  101. }
  102. // fill the middle
  103. COLORREF clr = BTNHILITE;
  104. pDC->FillSolidRect(rc, clr);
  105. }
  106. void CGuiSplitterWnd::SetBorderFlat(BOOL bBorder)
  107. {
  108. m_bBorder=bBorder;
  109. }