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

对话框与窗口

开发平台:

Visual C++

  1. // XTPDockingPaneBase.h : interface for 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. //{{AFX_CODEJOCK_PRIVATE
  21. #if !defined(__XTPDOCKINGPANEBASE_H__)
  22. #define __XTPDOCKINGPANEBASE_H__
  23. //}}AFX_CODEJOCK_PRIVATE
  24. #if _MSC_VER >= 1000
  25. #pragma once
  26. #endif // _MSC_VER >= 1000
  27. #include "XTPDockingPaneDefines.h"
  28. class CXTPDockingPaneBase;
  29. class CXTPDockingPane;
  30. class CXTPDockingPaneTabbedContainer;
  31. class CXTPDockingPaneLayout;
  32. class CXTPDockingPaneManager;
  33. class CXTPDockingPanePaintManager;
  34. class CXTPDockingPaneCaptionButton;
  35. class CXTPPropExchange;
  36. //===========================================================================
  37. // Summary:
  38. //     CXTPDockingPaneCaptionButtons is CArray derived class used for manipulate Caption Buttons.
  39. //===========================================================================
  40. class _XTP_EXT_CLASS CXTPDockingPaneCaptionButtons: public CArray <CXTPDockingPaneCaptionButton*, CXTPDockingPaneCaptionButton*>
  41. {
  42. public:
  43. //-----------------------------------------------------------------------
  44. // Summary:
  45. //     Call this member to determine if the mouse pointer is positioned
  46. //     over one of the buttons in the pane caption.
  47. // Parameters:
  48. //     pt - CPoint object containing coordinates of mouse pointer.
  49. // Returns:
  50. //     TRUE if the mouse pointer is positioned over a caption button,
  51. //     FALSE otherwise.
  52. //-----------------------------------------------------------------------
  53. BOOL CheckForMouseOver(CPoint pt);
  54. };
  55. //===========================================================================
  56. // Summary:
  57. //     CXTPDockingPaneBase is a stand alone class. It represents the parent
  58. //     class for a Docking Pane and its containers.
  59. //===========================================================================
  60. class _XTP_EXT_CLASS CXTPDockingPaneBase
  61. {
  62. protected:
  63. //-----------------------------------------------------------------------
  64. // Summary:
  65. //     Protected constructor. You cannot create this class.
  66. // Parameters:
  67. //     type    - Docking Pane type. Can be any of the values listed in the Remarks section.
  68. //     pLayout - Points to a CXTPDockingPaneLayout object.
  69. // Remarks:
  70. //     Docking Pane type can be one of the following:
  71. //     * <b>xtpPaneTypeDockingPane</b> Indicates the pane's style is a docking pane.
  72. //     * <b>xtpPaneTypeTabbedContainer</b> Indicates the pane's style is a tabbed container for pane.
  73. //     * <b>xtpPaneTypeSplitterContainer</b> Indicates the pane's style is a splitter container.
  74. //     * <b>xtpPaneTypeMiniWnd</b> Indicates the pane's style is a floating window container.
  75. //     * <b>xtpPaneTypeClient</b> Indicates the pane's style is a container for client area.
  76. //     * <b>xtpPaneTypeAutoHidePanel</b> Indicates the pane's style is an auto-hide panel container.
  77. //-----------------------------------------------------------------------
  78. CXTPDockingPaneBase(XTPDockingPaneType type, CXTPDockingPaneLayout* pLayout);
  79. //-----------------------------------------------------------------------
  80. // Summary:
  81. //     Destroys a CXTPDockingPaneBase object, handles cleanup and
  82. //     deallocation.
  83. //-----------------------------------------------------------------------
  84. virtual ~CXTPDockingPaneBase();
  85. public:
  86. //-----------------------------------------------------------------------
  87. // Summary:
  88. //     Call this member to determine the type of the pane.
  89. // Returns:
  90. //     The type of the Pane. It can be one of the following:
  91. //     * <b>xtpPaneTypeDockingPane</b> Indicates the pane's style is a docking pane.
  92. //     * <b>xtpPaneTypeTabbedContainer</b> Indicates the pane's style is a tabbed container for pane.
  93. //     * <b>xtpPaneTypeSplitterContainer</b> Indicates the pane's style is a splitter container.
  94. //     * <b>xtpPaneTypeMiniWnd</b> Indicates the pane's style is a floating window container.
  95. //     * <b>xtpPaneTypeClient</b> Indicates the pane's style is a container for client area.
  96. //     * <b>xtpPaneTypeAutoHidePanel</b> Indicates the pane's style is an auto-hide panel container.
  97. //-----------------------------------------------------------------------
  98. XTPDockingPaneType GetType() const;
  99. //-----------------------------------------------------------------------
  100. // Summary:
  101. //     The GetPaneWindowRect function retrieves the dimensions of the
  102. //     bounding rectangle of the pane.
  103. // Returns:
  104. //     The visible rectangle of the pane.
  105. //-----------------------------------------------------------------------
  106. CRect GetPaneWindowRect() const;
  107. //-----------------------------------------------------------------------
  108. // Summary:
  109. //     Call this member function to return the parent container of
  110. //     the pane.
  111. // Returns:
  112. //     The parent container.
  113. //-----------------------------------------------------------------------
  114. CXTPDockingPaneBase* GetContainer() const;
  115. //-----------------------------------------------------------------------
  116. // Summary:
  117. //     Call this member function to return the pane manager
  118. // Returns:
  119. //     A pointer to a CXTPDockingPaneManager object
  120. //-----------------------------------------------------------------------
  121. CXTPDockingPaneManager* GetDockingPaneManager() const;
  122. //-----------------------------------------------------------------------
  123. // Summary:
  124. //     Call this member function to return the paint manager
  125. // Returns:
  126. //     A pointer to a CXTPDockingPanePaintManager object
  127. //-----------------------------------------------------------------------
  128. CXTPDockingPanePaintManager* GetPaintManager() const;
  129. //-----------------------------------------------------------------------
  130. // Summary:
  131. //     Call this member to find the specified caption button
  132. // Parameters:
  133. //     nID - Identifier of the button
  134. // Returns:
  135. //     The CXTPDockingPaneCaptionButton object if successful; otherwise NULL.
  136. //-----------------------------------------------------------------------
  137. CXTPDockingPaneCaptionButton* FindCaptionButton(int nID) const;
  138. //-----------------------------------------------------------------------
  139. // Summary:
  140. //     Call this member to get a reference to the caption's close/
  141. //     popup button
  142. // Returns:
  143. //     A reference to a CXTPDockingPaneCaptionButtons object
  144. //-----------------------------------------------------------------------
  145. CXTPDockingPaneCaptionButtons* GetCaptionButtons() const {
  146. return m_pCaptionButtons;
  147. }
  148. //-----------------------------------------------------------------------
  149. // Summary:
  150. //     Call this member to redraw the pane.
  151. //-----------------------------------------------------------------------
  152. virtual void RedrawPane();
  153. //-----------------------------------------------------------------------
  154. // Summary:
  155. //     Call this member to determine if one pane is contained in the
  156. //     collection of another.
  157. // Parameters:
  158. //     pPane - Points to a CXTPDockingPaneBase object
  159. // Returns:
  160. //     POSITION of the pane in the collection if successful; otherwise
  161. //     returns NULL.
  162. //-----------------------------------------------------------------------
  163. virtual POSITION ContainPane(CXTPDockingPaneBase* pPane) const;
  164. //-----------------------------------------------------------------------
  165. // Summary:
  166. //     Call this member to retrieve a collection of the panes with
  167. //     specified type.
  168. // Parameters:
  169. //     type  - Type of the panes to find.
  170. //     pList - Points to a CXTPDockingPaneBaseList object that will
  171. //             contain found panes.
  172. // See Also:
  173. //     CXTPDockingPaneBaseList
  174. //-----------------------------------------------------------------------
  175. virtual void FindPane(XTPDockingPaneType type, CXTPDockingPaneBaseList* pList) const;
  176. //-----------------------------------------------------------------------
  177. // Summary:
  178. //     Call this member to fill the pMinMaxInfo structure with the
  179. //     minimum and maximum width and height of the container.
  180. //     This will look at the MinMaxInfo for each pane in the
  181. //     container and set the appropriate minimum and maximum width
  182. //     and height for the container.
  183. // Parameters:
  184. //     pMinMaxInfo - Pointer to MINMAXINFO structure
  185. //-----------------------------------------------------------------------
  186. virtual void GetMinMaxInfo(LPMINMAXINFO pMinMaxInfo) const;
  187. //-----------------------------------------------------------------------
  188. // Summary:
  189. //     Call this member to determine if there are children panes
  190. // Returns:
  191. //     TRUE if no children panes; otherwise returns FALSE.
  192. //-----------------------------------------------------------------------
  193. virtual BOOL IsEmpty() const;
  194. //-----------------------------------------------------------------------
  195. // Summary:
  196. //     Call this member function to retrieve the parent window for the pane
  197. // Returns:
  198. //     A pointer to a parent window if successful; otherwise NULL
  199. //-----------------------------------------------------------------------
  200. virtual CWnd* GetDockingSite() const;
  201. //-----------------------------------------------------------------------
  202. // Summary:
  203. //     Call this member to check if the pane is hidden.
  204. // Returns:
  205. //     TRUE if the pane is hidden.
  206. //-----------------------------------------------------------------------
  207. virtual BOOL IsHidden() const;
  208. //-----------------------------------------------------------------------
  209. // Summary:
  210. //     Returns the window handle for a window.
  211. // Returns:
  212. //     Returns NULL if the HWND is not attached to a window or if it
  213. //     is used with a NULL HWND pointer.
  214. //-----------------------------------------------------------------------
  215. virtual HWND GetPaneHwnd() const {
  216. return 0;
  217. }
  218. protected:
  219. //-----------------------------------------------------------------------
  220. // Summary:
  221. //     This method is called to set position of the pane.
  222. // Parameters:
  223. //     pParent - Points to a CWnd object.
  224. //     rect - Rectangle of the pane to be set.
  225. //     lParam - Pointer to AFX_SIZEPARENTPARAMS structure.
  226. //-----------------------------------------------------------------------
  227. virtual void OnSizeParent(CWnd* pParent, CRect rect, LPVOID lParam);
  228. //-----------------------------------------------------------------------
  229. // Summary:
  230. //     This method is called to update the state of the pane.
  231. //-----------------------------------------------------------------------
  232. virtual void OnFocusChanged();
  233. //-----------------------------------------------------------------------
  234. // Summary:
  235. //     Call this member to set the parent frame of the pane.
  236. // Parameters:
  237. //     pFrame - Points to a CWnd object
  238. //-----------------------------------------------------------------------
  239. virtual void SetDockingSite(CWnd* pFrame);
  240. //-----------------------------------------------------------------------
  241. // Summary:
  242. //     Call this method to set the parent container of the pane.
  243. // Parameters:
  244. //     pContainer - Points to a CXTPDockingPaneBase object
  245. //-----------------------------------------------------------------------
  246. virtual void SetParentContainer(CXTPDockingPaneBase* pContainer);
  247. //-----------------------------------------------------------------------
  248. // Summary:
  249. //     This member is called when a child pane collection is changed.
  250. // Parameters:
  251. //     pContainer - Points to a CXTPDockingPaneBase object that is changed.
  252. //-----------------------------------------------------------------------
  253. virtual void OnChildContainerChanged(CXTPDockingPaneBase* pContainer);
  254. //-----------------------------------------------------------------------
  255. // Summary:
  256. //     This member is called when a need to redraw pane.
  257. // Parameters:
  258. //     bSelectionChanged - TRUE if selected pane was changed
  259. //-----------------------------------------------------------------------
  260. virtual void InvalidatePane(BOOL bSelectionChanged);
  261. //-----------------------------------------------------------------------
  262. // Summary:
  263. //     This member is called when the parent pane collection is changed.
  264. // Parameters:
  265. //     pContainer - Points to a CXTPDockingPaneBase object that is changed.
  266. //-----------------------------------------------------------------------
  267. virtual void OnParentContainerChanged(CXTPDockingPaneBase* pContainer);
  268. //-----------------------------------------------------------------------
  269. // Summary:
  270. //     Call this member function to save/restore the settings of the pane.
  271. // Parameters:
  272. //     pPX - Points to a CXTPPropExchange object.
  273. // Returns:
  274. //     TRUE if successful; otherwise returns FALSE.
  275. //-----------------------------------------------------------------------
  276. virtual BOOL DoPropExchange(CXTPPropExchange* pPX);
  277. //-----------------------------------------------------------------------
  278. // Summary:
  279. //     This member is called to clone the pane.
  280. // Parameters:
  281. //     pLayout - Points to a CXTPDockingPaneLayout object.
  282. //     pMap - Points to a CXTPPaneToPaneMap object.
  283. //     dwIgnoredOptions - Options that must be skipped.
  284. // Returns:
  285. //     A pointer to a CXTPDockingPaneBase object.
  286. // See Also:
  287. //     CXTPPaneToPaneMap
  288. //-----------------------------------------------------------------------
  289. virtual CXTPDockingPaneBase* Clone(CXTPDockingPaneLayout* pLayout, CXTPPaneToPaneMap* pMap, DWORD dwIgnoredOptions = 0);
  290. virtual void Copy(CXTPDockingPaneBase* pClone, CXTPPaneToPaneMap* pMap, DWORD dwIgnoredOptions);
  291. //-----------------------------------------------------------------------
  292. // Summary:
  293. //     Call this member to remove a pane from collection.
  294. // Parameters:
  295. //     pPane - Points to a CXTPDockingPaneBase object
  296. //-----------------------------------------------------------------------
  297. virtual void RemovePane(CXTPDockingPaneBase* pPane);
  298. //-----------------------------------------------------------------------
  299. // Summary:
  300. //     This member is called when the dimensions of the caption button
  301. //     are changed.
  302. // Parameters:
  303. //     pButton - caption button pointer.
  304. //-----------------------------------------------------------------------
  305. virtual void OnCaptionButtonRectChanged(CXTPDockingPaneCaptionButton* pButton);
  306. //-----------------------------------------------------------------------
  307. // Summary:
  308. //     Call this member to determine if the caption button is visible.
  309. // Parameters:
  310. //     pButton - caption button pointer.
  311. // Returns:
  312. //     TRUE if the caption button is visible; otherwise returns FALSE.
  313. //-----------------------------------------------------------------------
  314. virtual BOOL IsCaptionButtonVisible(CXTPDockingPaneCaptionButton* pButton);
  315. //-----------------------------------------------------------------------
  316. // Summary:
  317. //     This method is called to destroy pane
  318. //-----------------------------------------------------------------------
  319. virtual void DeletePane() = 0;
  320. //-----------------------------------------------------------------------
  321. // Summary:
  322. //     This member is called to create pane
  323. //-----------------------------------------------------------------------
  324. virtual void CreateContainer();
  325. protected:
  326. CSize m_szDocking;                          // Size of the pane.
  327. CXTPDockingPaneLayout* m_pLayout;           // Parent layout.
  328. CXTPDockingPaneBase* m_pParentContainer;    // Parent container.
  329. CWnd* m_pDockingSite;                       // Parent frame.
  330. XTPDockingPaneType m_type;                  // Type of the pane.
  331. CRect m_rcWindow;                           // Position of the pane.
  332. CXTPDockingPaneCaptionButtons* m_pCaptionButtons;  // Collection of caption buttons.
  333. private:
  334. int m_nLength;
  335. int m_nIndex;
  336. private:
  337. friend class CXTPDockingPaneManager;
  338. friend class CXTPDockingPaneSplitterContainer;
  339. friend class CXTPDockingPaneTabbedContainer;
  340. friend class CXTPDockingPaneMiniWnd;
  341. friend class CXTPDockingPaneSplitterWnd;
  342. friend class CXTPDockingPaneContext;
  343. friend class CXTPDockingPane;
  344. friend class CXTPDockingPaneLayout;
  345. friend class CXTPDockingPaneAutoHidePanel;
  346. friend class CXTPDockingPaneAutoHideWnd;
  347. friend class CXTPDockingPaneCaptionButton;
  348. friend class CXTPDockingPaneSidePanel;
  349. };
  350. //{{AFX_CODEJOCK_PRIVATE
  351. class _XTP_EXT_CLASS CXTPDockingPaneClientContainer : public CXTPCmdTarget, public CXTPDockingPaneBase
  352. {
  353. public:
  354. CXTPDockingPaneClientContainer(CXTPDockingPaneLayout* pLayout);
  355. protected:
  356. virtual void DeletePane();
  357. };
  358. //}}AFX_CODEJOCK_PRIVATE
  359. AFX_INLINE XTPDockingPaneType CXTPDockingPaneBase::GetType() const {
  360. return m_type;
  361. }
  362. AFX_INLINE CXTPDockingPaneBase* CXTPDockingPaneBase::GetContainer() const {
  363. return m_pParentContainer;
  364. }
  365. AFX_INLINE void CXTPDockingPaneBase::SetDockingSite(CWnd* pFrame) {
  366. m_pDockingSite = pFrame;
  367. }
  368. AFX_INLINE void CXTPDockingPaneBase::SetParentContainer(CXTPDockingPaneBase* pContainer) {
  369. m_pParentContainer = pContainer;
  370. }
  371. AFX_INLINE void CXTPDockingPaneBase::OnCaptionButtonRectChanged(CXTPDockingPaneCaptionButton*) {
  372. }
  373. AFX_INLINE BOOL CXTPDockingPaneBase::IsCaptionButtonVisible(CXTPDockingPaneCaptionButton* /*pButton*/) {
  374. return TRUE;
  375. }
  376. AFX_INLINE CWnd* CXTPDockingPaneBase::GetDockingSite() const {
  377. return m_pDockingSite;
  378. }
  379. #endif // #if !defined(__XTPDOCKINGPANEBASE_H__)