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

对话框与窗口

开发平台:

Visual C++

  1. // XTPDockingPaneBase.cpp : implementation of the CXTPDockingPaneBase class.
  2. //
  3. // This file is a part of the XTREME DOCKINGPANE 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 "XTPDockingPaneBase.h"
  22. #include "XTPDockingPaneManager.h"
  23. #include "XTPDockingPaneLayout.h"
  24. #include "XTPDockingPanePaintManager.h"
  25. #ifdef _DEBUG
  26. #define new DEBUG_NEW
  27. #undef THIS_FILE
  28. static char THIS_FILE[] = __FILE__;
  29. #endif
  30. //////////////////////////////////////////////////////////////////////////
  31. // CXTPDockingPaneCaptionButtons
  32. BOOL CXTPDockingPaneCaptionButtons::CheckForMouseOver(CPoint pt)
  33. {
  34. BOOL bResult = FALSE;
  35. for (int i = 0; i < GetSize(); i++)
  36. {
  37. if (GetAt(i)->CheckForMouseOver(pt))
  38. bResult = TRUE;
  39. }
  40. return bResult;
  41. }
  42. //////////////////////////////////////////////////////////////////////////
  43. // CXTPDockingPaneBase
  44. CXTPDockingPaneBase::CXTPDockingPaneBase(XTPDockingPaneType type, CXTPDockingPaneLayout* pLayout)
  45. : m_type(type), m_pLayout(pLayout)
  46. {
  47. m_pParentContainer = 0;
  48. m_pDockingSite = GetDockingPaneManager()->GetSite();
  49. m_szDocking = 0;
  50. m_rcWindow.SetRectEmpty();
  51. m_nIndex = 0;
  52. m_nLength = 0;
  53. pLayout->Push(this);
  54. m_pCaptionButtons = NULL;
  55. }
  56. CXTPDockingPaneBase::~CXTPDockingPaneBase()
  57. {
  58. if (m_pCaptionButtons)
  59. {
  60. for (int i = 0; i < m_pCaptionButtons->GetSize(); i++)
  61. delete m_pCaptionButtons->GetAt(i);
  62. delete m_pCaptionButtons;
  63. m_pCaptionButtons = NULL;
  64. }
  65. }
  66. CXTPDockingPaneCaptionButton* CXTPDockingPaneBase::FindCaptionButton(int nID) const
  67. {
  68. if (!m_pCaptionButtons)
  69. return NULL;
  70. for (int i = 0; i < m_pCaptionButtons->GetSize(); i++)
  71. {
  72. if (m_pCaptionButtons->GetAt(i)->GetID() == nID)
  73. return m_pCaptionButtons->GetAt(i);
  74. }
  75. ASSERT(FALSE);
  76. return NULL;
  77. }
  78. void CXTPDockingPaneBase::OnSizeParent(CWnd* /*pParent*/, CRect rect, LPVOID lParam)
  79. {
  80. AFX_SIZEPARENTPARAMS* lpLayout = (AFX_SIZEPARENTPARAMS*)lParam;
  81. lpLayout->rect = m_rcWindow = rect;
  82. }
  83. void CXTPDockingPaneBase::RedrawPane()
  84. {
  85. if (GetPaneHwnd())
  86. ::InvalidateRect(GetPaneHwnd(), 0, FALSE);
  87. }
  88. void CXTPDockingPaneBase::OnFocusChanged()
  89. {
  90. }
  91. BOOL CXTPDockingPaneBase::IsHidden() const
  92. {
  93. return FALSE;
  94. }
  95. void CXTPDockingPaneBase::GetMinMaxInfo(LPMINMAXINFO pMinMaxInfo) const
  96. {
  97. ZeroMemory(pMinMaxInfo, sizeof(MINMAXINFO));
  98. if (m_type == xtpPaneTypeClient && !GetDockingPaneManager()->IsClientHidden())
  99. {
  100. pMinMaxInfo->ptMinTrackSize = GetDockingPaneManager()->m_ptMinClientSize;
  101. }
  102. pMinMaxInfo->ptMaxTrackSize = CPoint(32000, 32000);
  103. }
  104. POSITION CXTPDockingPaneBase::ContainPane(CXTPDockingPaneBase* pPane) const
  105. {
  106. return pPane == this ? (POSITION)TRUE : NULL;
  107. }
  108. CRect CXTPDockingPaneBase::GetPaneWindowRect() const
  109. {
  110. ASSERT(m_pDockingSite);
  111. if (!m_pDockingSite || !m_pDockingSite->GetSafeHwnd())
  112. return m_rcWindow;
  113. CRect rc(m_rcWindow);
  114. m_pDockingSite->ClientToScreen(&rc);
  115. return rc;
  116. }
  117. void CXTPDockingPaneBase::OnChildContainerChanged(CXTPDockingPaneBase* /*pContainer*/)
  118. {
  119. }
  120. void CXTPDockingPaneBase::OnParentContainerChanged(CXTPDockingPaneBase* /*pContainer*/)
  121. {
  122. }
  123. void CXTPDockingPaneBase::InvalidatePane(BOOL bSelectionChanged)
  124. {
  125. if (m_pParentContainer)
  126. {
  127. m_pParentContainer->InvalidatePane(bSelectionChanged);
  128. }
  129. }
  130. void CXTPDockingPaneBase::RemovePane(CXTPDockingPaneBase* /*pPane*/)
  131. {
  132. }
  133. void CXTPDockingPaneBase::FindPane(XTPDockingPaneType type, CXTPDockingPaneBaseList* pList) const
  134. {
  135. if (GetType() == type)
  136. {
  137. pList->AddTail((CXTPDockingPaneBase*)this);
  138. }
  139. }
  140. BOOL CXTPDockingPaneBase::IsEmpty() const
  141. {
  142. return GetType() == xtpPaneTypeClient && GetDockingPaneManager()->m_bHideClient;
  143. }
  144. void CXTPDockingPaneBase::Copy(CXTPDockingPaneBase* pClone, CXTPPaneToPaneMap* /*pMap*/, DWORD /*dwIgnoredOptions*/)
  145. {
  146. m_szDocking = pClone->m_szDocking;
  147. }
  148. CXTPDockingPaneBase* CXTPDockingPaneBase::Clone(CXTPDockingPaneLayout* pLayout, CXTPPaneToPaneMap* pMap, DWORD dwIgnoredOptions)
  149. {
  150. CXTPDockingPaneBase* pPane = (CXTPDockingPaneBase*)GetDockingPaneManager()->OnCreatePane(GetType(), pLayout);
  151. pPane->Copy(this, pMap, dwIgnoredOptions);
  152. SAFE_CALLPTR(pMap, SetAt(this, pPane));
  153. return pPane;
  154. }
  155. CXTPDockingPaneManager* CXTPDockingPaneBase::GetDockingPaneManager() const
  156. {
  157. ASSERT(m_pLayout);
  158. if (!m_pLayout)
  159. return NULL;
  160. ASSERT(m_pLayout->m_pManager);
  161. return m_pLayout->m_pManager;
  162. }
  163. CXTPDockingPanePaintManager* CXTPDockingPaneBase::GetPaintManager() const
  164. {
  165. CXTPDockingPaneManager* pManager = GetDockingPaneManager();
  166. ASSERT(pManager);
  167. if (!pManager)
  168. return NULL;
  169. ASSERT(pManager->m_pPaintManager);
  170. return pManager->m_pPaintManager;
  171. }
  172. void CXTPDockingPaneBase::CreateContainer()
  173. {
  174. SAFE_CALLPTR(m_pParentContainer, CreateContainer());
  175. }
  176. //////////////////////////////////////////////////////////////////////////
  177. CXTPDockingPaneClientContainer::CXTPDockingPaneClientContainer(CXTPDockingPaneLayout* pLayout)
  178. : CXTPDockingPaneBase(xtpPaneTypeClient, pLayout)
  179. {
  180. }
  181. void CXTPDockingPaneClientContainer::DeletePane()
  182. {
  183. InternalRelease();
  184. }