GuiSplitterWnd.cpp
上传用户:wlkj888
上传日期:2022-08-01
资源大小:806k
文件大小:4k
源码类别:

对话框与窗口

开发平台:

Visual C++

  1. /****************************************************************************
  2.  * *  
  3.  * GuiToolKit   *
  4.  *  (MFC extension) *  
  5.  * Created by Francisco Campos G. www.beyondata.com fcampos@beyondata.com *
  6.  *--------------------------------------------------------------------------*    
  7.  * *
  8.  * This program is free software;so you are free to use it any of your *
  9.  * applications (Freeware, Shareware, Commercial),but leave this header *
  10.  * intact. *
  11.  * *
  12.  * These files are provided "as is" without warranty of any kind. *
  13.  * *
  14.  *        GuiToolKit is forever FREE CODE !!!!! *
  15.  * *
  16.  *--------------------------------------------------------------------------*
  17.  * Created by: Francisco Campos G. *
  18.  * Bug Fixes and improvements : (Add your name) *
  19.  * -Francisco Campos *
  20.  * *
  21.  ****************************************************************************/
  22. #include "stdafx.h"
  23. #include "GuiSplitterWnd.h"
  24. #include "GuiDrawLayer.h"
  25. #ifdef _DEBUG
  26. #undef THIS_FILE
  27. static char THIS_FILE[]=__FILE__;
  28. #define new DEBUG_NEW
  29. #endif
  30. // CGuiSplitterWnd
  31. #define BTNHILITE ::GetSysColor(COLOR_3DFACE)
  32. #define BTNSHADOW ::GetSysColor(COLOR_3DSHADOW)
  33. #define BTNHIGH   ::GetSysColor(COLOR_3DHIGHLIGHT)
  34. #define CX_BORDER  1
  35. #define CY_BORDER  1
  36. IMPLEMENT_DYNAMIC(CGuiSplitterWnd, CSplitterWnd)
  37. CGuiSplitterWnd::CGuiSplitterWnd()
  38. {
  39. m_bBorder=FALSE;
  40. m_StyleDisplay=GUISTYLE_XP;
  41. }
  42. CGuiSplitterWnd::~CGuiSplitterWnd()
  43. {
  44. }
  45. BEGIN_MESSAGE_MAP(CGuiSplitterWnd, CSplitterWnd)
  46. ON_WM_PAINT()
  47. END_MESSAGE_MAP()
  48. ////////////////////////////////////////////////////////////////////////////////
  49. // CGuiSplitterWnd message handlers
  50. void CGuiSplitterWnd::OnPaint()
  51. {
  52. //vil plagio del original
  53. ASSERT_VALID(this);
  54. CPaintDC dc(this);
  55. CRect rectClient;
  56. GetClientRect(&rectClient);
  57. rectClient.InflateRect(-m_cxBorder, -m_cyBorder);
  58. CRect rectInside;
  59. GetInsideRect(rectInside);
  60. // draw the splitter boxes
  61. if (m_bHasVScroll && m_nRows < m_nMaxRows)
  62. {
  63. OnDrawSplitter(&dc, splitBox,
  64. CRect(rectInside.right , rectClient.top,
  65. rectClient.right, rectClient.top + m_cySplitter));
  66. }
  67. if (m_bHasHScroll && m_nCols < m_nMaxCols)
  68. {
  69. OnDrawSplitter(&dc, splitBox,
  70. CRect(rectClient.left, rectInside.bottom,
  71. rectClient.left + m_cxSplitter, rectClient.bottom));
  72. }
  73. // extend split bars to window border (past margins)
  74. DrawAllSplitBars(&dc, rectInside.right, rectInside.bottom);
  75. }
  76. void CGuiSplitterWnd::OnDrawSplitter(CDC* pDC, ESplitType nType, const CRect& rect)
  77. {
  78. COLORREF clr = GuiDrawLayer::GetRGBColorFace(m_StyleDisplay);
  79. if (pDC == NULL)
  80. {
  81. RedrawWindow(rect, NULL, RDW_INVALIDATE|RDW_NOCHILDREN);
  82. return;
  83. }
  84. ASSERT_VALID(pDC);
  85. CRect rc = rect;
  86. switch (nType)
  87. {
  88. case splitBorder:
  89. if (!m_bBorder)
  90. {
  91. /*pDC->Draw3dRect(rc, BTNHILITE, BTNHILITE);
  92. rc.InflateRect(-CX_BORDER, -CY_BORDER);
  93. pDC->Draw3dRect(rc, BTNSHADOW, BTNHIGH);
  94. */
  95. pDC->Draw3dRect(rc,GuiDrawLayer::GetRGBColorShadow(GuiDrawLayer::m_Style),GuiDrawLayer::GetRGBColorShadow(GuiDrawLayer::m_Style));
  96. rc.InflateRect(-CX_BORDER, -CY_BORDER);
  97. pDC->Draw3dRect(rc, clr, clr);
  98. }
  99. else
  100. {
  101. CPen cp(PS_SOLID,1,GuiDrawLayer::GetRGBColorFace(GuiDrawLayer::m_Style));
  102. pDC->Draw3dRect(rc, GuiDrawLayer::GetRGBColorFace(GuiDrawLayer::m_Style), GuiDrawLayer::GetRGBColorFace(GuiDrawLayer::m_Style));
  103. rc.InflateRect(-CX_BORDER, -CY_BORDER);
  104. pDC->Draw3dRect(rc, GuiDrawLayer::GetRGBColorFace(GuiDrawLayer::m_Style), GuiDrawLayer::GetRGBColorBTNHigh());
  105. CPen* cpOld=pDC->SelectObject(&cp);
  106. pDC->MoveTo(rc.left,rc.bottom-1);
  107. pDC->LineTo(rc.right,rc.bottom-1);
  108. pDC->SelectObject(cpOld);
  109. }
  110. return;
  111. case splitIntersection:
  112. break;
  113. case splitBox:
  114. break;
  115. case splitBar:
  116. break;
  117. default:
  118. ASSERT(FALSE);  // unknown splitter type
  119. }
  120. // fill the middle
  121. pDC->FillSolidRect(rc, clr);
  122. }
  123. void CGuiSplitterWnd::SetBorderFlat(BOOL bBorder)
  124. {
  125. m_bBorder=bBorder;
  126. }