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

对话框与窗口

开发平台:

Visual C++

  1. // XTPDockingPaneAutoHidePanel.h : interface for the CXTPDockingPaneAutoHidePanel 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(__XTPDOCKINGPANEAUTOHIDEPANEL_H__)
  22. #define __XTPDOCKINGPANEAUTOHIDEPANEL_H__
  23. //}}AFX_CODEJOCK_PRIVATE
  24. #if _MSC_VER >= 1000
  25. #pragma once
  26. #endif // _MSC_VER >= 1000
  27. #include "XTPDockingPaneBaseContainer.h"
  28. class CXTPDockingPaneLayout;
  29. class CXTPDockingPaneAutoHidePanel;
  30. //===========================================================================
  31. // Summary:
  32. //     CXTPDockingPaneAutoHideWnd is a CMiniFrameWnd derived class. It is
  33. //     used internally by CXTPDockingPaneAutoHidePanel
  34. //     as a sliding auto-hide window for the hidden pane.
  35. //===========================================================================
  36. class _XTP_EXT_CLASS CXTPDockingPaneAutoHideWnd : public CMiniFrameWnd
  37. {
  38. DECLARE_DYNAMIC(CXTPDockingPaneAutoHideWnd)
  39. private:
  40. CXTPDockingPaneAutoHideWnd(CXTPDockingPaneAutoHidePanel* pPanel, CXTPDockingPaneTabbedContainer* pPane);
  41. public:
  42. //-----------------------------------------------------------------------
  43. // Summary:
  44. //     Retrieves child container of sliding auto-hide window.
  45. //-----------------------------------------------------------------------
  46. CXTPDockingPaneTabbedContainer* GetPane() const;
  47. protected:
  48. //{{AFX_CODEJOCK_PRIVATE
  49. DECLARE_MESSAGE_MAP()
  50. //{{AFX_VIRTUAL(CXTPDockingPaneAutoHideWnd)
  51. virtual void PostNcDestroy();
  52. //}}AFX_VIRTUAL
  53. //{{AFX_MSG(CXTPDockingPaneAutoHideWnd)
  54. afx_msg void OnClose();
  55. afx_msg void OnPaint();
  56. afx_msg void OnTimer(UINT_PTR nIDEvent);
  57. afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
  58. afx_msg void OnMouseMove(UINT nFlags, CPoint point);
  59. afx_msg BOOL OnEraseBkgnd(CDC* pDC);
  60. //}}AFX_MSG
  61. //}}AFX_CODEJOCK_PRIVATE
  62. private:
  63. void CloseWindow();
  64. CXTPDockingPaneManager* GetDockingPaneManager() const;
  65. void GetMinMaxInfo (LPMINMAXINFO pMinMaxInfo, BOOL bIncludeSplitter = TRUE) const;
  66. void RecalcLayout(BOOL bNotify = TRUE);
  67. void DoSlideStep();
  68. void Reposition(CRect rc, CRect rcClient);
  69. BOOL GetAvailableRect(CRect& rcAvail, CRect& rc) const;
  70. public:
  71. static double m_dAnimationDelay;              // Animation delay
  72. static int m_nAnimationInterval;              // Delay in ms between animation steps
  73. static int m_nAnimationDuration;              // Duration of sliding animation in ms
  74. static DWORD m_nMouseHoverDelay;              // Duration of mouse hover before expanding
  75. static UINT m_nInactiveCollapseDelay;          // Delay before collapsing inactive.
  76. private:
  77. CXTPDockingPaneTabbedContainer* m_pPane;
  78. CXTPDockingPaneAutoHidePanel* m_pPanel;
  79. XTPDockingPaneDirection m_direction;
  80. BOOL m_bHoriz;
  81. int m_nSlideStep;
  82. int m_nStepsCount;
  83. BOOL m_bSlideOut;
  84. CRect m_rcWindow;
  85. int m_nDeactivationCount;
  86. BOOL m_bTracking;
  87. private:
  88. friend class CXTPDockingPaneAutoHidePanel;
  89. };
  90. //===========================================================================
  91. // Summary:
  92. //     CXTPDockingPaneAutoHidePanel is a multiple inheritance class derived from
  93. //     CWnd and CXTPDockingPaneBase. It is used internally as an auto-hide container
  94. //     for CXTPDockingPaneBase derived classes.
  95. //===========================================================================
  96. class _XTP_EXT_CLASS CXTPDockingPaneAutoHidePanel : public CWnd, public CXTPDockingPaneBaseContainer
  97. {
  98. private:
  99. class CAutoHidePanelTabManager;
  100. class CAutoHidePanelTabManagersArray;
  101. class CPanelDropTarget;
  102. protected:
  103. //-----------------------------------------------------------------------
  104. // Summary:
  105. //     Constructs a CXTPDockingPaneAutoHidePanel object
  106. //     Protected constructor. Internally constructed only.
  107. // Parameters:
  108. //     pLayout - Points to a CXTPDockingPaneLayout object.
  109. //-----------------------------------------------------------------------
  110. CXTPDockingPaneAutoHidePanel(CXTPDockingPaneLayout* pLayout);
  111. //-----------------------------------------------------------------------
  112. // Summary:
  113. //     Destroys a CXTPDockingPaneAutoHidePanel object, handles cleanup and
  114. //     deallocation
  115. //-----------------------------------------------------------------------
  116. ~CXTPDockingPaneAutoHidePanel();
  117. public:
  118. //-----------------------------------------------------------------------
  119. // Summary:
  120. //     Call this member function to determine the position of the
  121. //     auto-hide panel.
  122. // Returns:
  123. //     The panel's direction.
  124. //-----------------------------------------------------------------------
  125. XTPDockingPaneDirection GetDirection() const;
  126. //-----------------------------------------------------------------------
  127. // Summary:
  128. //     Returns the window handle for a window.
  129. // Returns:
  130. //     Returns NULL if the HWND is not attached to a window or if it
  131. //     is used with a NULL HWND pointer.
  132. //-----------------------------------------------------------------------
  133. virtual HWND GetPaneHwnd() const;
  134. //-----------------------------------------------------------------------
  135. // Summary:
  136. //     This member function determines which header item, if any, is
  137. //     at a specified cursor position
  138. // Parameters:
  139. //     point - Point to be tested.
  140. // Returns:
  141. //     The index of the item at the position specified by 'pt',
  142. //     otherwise returns NULL.
  143. //-----------------------------------------------------------------------
  144. CXTPDockingPane* HitTest(CPoint point) const;
  145. //-----------------------------------------------------------------------
  146. // Summary:
  147. //     Call this member to get tab for corresponded pane.
  148. // Parameters:
  149. //     pPane - Pane to get tab for
  150. // Returns:
  151. //     CXTPTabManagerItem pointer corresponded with pPane
  152. //-----------------------------------------------------------------------
  153. CXTPTabManagerItem* GetPaneTab(CXTPDockingPane* pPane) const;
  154. protected:
  155. //-----------------------------------------------------------------------
  156. // Summary:
  157. //     This method is called to set the position of the pane
  158. // Parameters:
  159. //     pParent - Points to a CWnd object.
  160. //     rect    - Rectangle of the pane to be set.
  161. //     lParam  - Pointer to AFX_SIZEPARENTPARAMS structure.
  162. // ----------------------------------------------------------------------
  163. virtual void OnSizeParentEx(CWnd* pParent, CRect& rect, LPVOID lParam);
  164. //-----------------------------------------------------------------------
  165. // Summary:
  166. //     Call this member to remove a pane from collection.
  167. // Parameters:
  168. //     pPane - Points to a CXTPDockingPaneBase object.
  169. //-----------------------------------------------------------------------
  170. virtual void RemovePane(CXTPDockingPaneBase* pPane);
  171. //-----------------------------------------------------------------------
  172. // Summary:
  173. //     This member is called when a child pane collection is changed.
  174. // Parameters:
  175. //     pContainer - Points to a CXTPDockingPaneBase object that is changed.
  176. //-----------------------------------------------------------------------
  177. virtual void OnChildContainerChanged(CXTPDockingPaneBase* pContainer);
  178. //-----------------------------------------------------------------------
  179. // Summary:
  180. //     Call this member to insert a pane into a collection
  181. // Parameters:
  182. //     pPane - Points to a CXTPDockingPaneBase object
  183. //-----------------------------------------------------------------------
  184. virtual void _InsertPane(CXTPDockingPaneBase* pPane);
  185. //-----------------------------------------------------------------------
  186. // Summary:
  187. //     Call this member function to save/restore the settings of the pane.
  188. // Parameters:
  189. //     pPX - Points to a CXTPPropExchange object.
  190. // Returns:
  191. //     TRUE if successful; otherwise returns FALSE.
  192. //-----------------------------------------------------------------------
  193. virtual BOOL DoPropExchange(CXTPPropExchange* pPX);
  194. //-----------------------------------------------------------------------
  195. // Summary:
  196. //     Call this member to close the active window from panel
  197. // Parameters:
  198. //     bDelayed - FALSE to delay the closing
  199. // See Also: CloseActiveWindows
  200. //-----------------------------------------------------------------------
  201. void CloseActiveWindow(BOOL bDelayed = FALSE);
  202. //-------------------------------------------------------------------------
  203. // Summary:
  204. //     Call this member to close active windows from all panels
  205. // See Also: CloseActiveWindow
  206. //-------------------------------------------------------------------------
  207. void CloseActiveWindows();
  208. //-----------------------------------------------------------------------
  209. // Summary:
  210. //     Call this member to show (activate) a pane by its identifier.
  211. // Parameters:
  212. //     pPane     - Points to a CXTPDockingPane object.
  213. //     bSetFocus - TRUE to set focus to child docking pane
  214. //-----------------------------------------------------------------------
  215. void ShowPane(CXTPDockingPane* pPane, BOOL bSetFocus = TRUE);
  216. //-----------------------------------------------------------------------
  217. // Summary:
  218. //     Call this member to refresh the manager array
  219. // Parameters:
  220. //     pDC      - Points to a CDC object
  221. //     rcClient - Size of the client area
  222. //-----------------------------------------------------------------------
  223. void RefreshManagersArray(CDC* pDC, CRect rcClient);
  224. //-----------------------------------------------------------------------
  225. // Summary:
  226. //     Retrieves the height of the panel
  227. // Returns:
  228. //     The height of the panel
  229. //-----------------------------------------------------------------------
  230. int GetPanelHeight() const;
  231. //-----------------------------------------------------------------------
  232. // Summary:
  233. //     Creates auto-hide panel.
  234. // Parameters:
  235. //     pParent - Parent frame site.
  236. //-----------------------------------------------------------------------
  237. virtual void Create(CWnd* pParent);
  238. //-----------------------------------------------------------------------
  239. // Summary:
  240. //     This member is called when a need to redraw pane.
  241. // Parameters:
  242. //     bSelectionChanged - TRUE if selected pane was changed
  243. //-----------------------------------------------------------------------
  244. virtual void InvalidatePane(BOOL bSelectionChanged);
  245. protected:
  246. //{{AFX_CODEJOCK_PRIVATE
  247. DECLARE_MESSAGE_MAP()
  248. void DeletePane();
  249. void OnFinalRelease();
  250. //{{AFX_MSG(CXTPDockingPaneAutoHidePanel)
  251. afx_msg void OnPaint();
  252. afx_msg void OnDraw(CDC* pDC);
  253. afx_msg LRESULT OnPrintClient(WPARAM wParam, LPARAM /*lParam*/);
  254. afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
  255. afx_msg void OnRButtonDown(UINT nFlags, CPoint point);
  256. afx_msg void OnRButtonUp(UINT /*nFlags*/, CPoint point);
  257. afx_msg void OnMouseMove(UINT nFlags, CPoint point);
  258. afx_msg LRESULT OnMouseHover(WPARAM, LPARAM lParam);
  259. afx_msg void OnMouseLeave();
  260. //}}AFX_MSG
  261. //}}AFX_CODEJOCK_PRIVATE
  262. private:
  263. void Copy(CXTPDockingPaneBase* pClone, CXTPPaneToPaneMap* pMap, DWORD dwIgnoredOptions);
  264. BOOL Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext = NULL);
  265. public:
  266. static BOOL m_bCloseActiveWindow;                             // TRUE to allow the AutoHide window to be closed.
  267. protected:
  268. CXTPDockingPaneAutoHideWnd* m_pActiveWnd;                     // Active window
  269. XTPDockingPaneDirection m_direction;                          // Location of hidden panel
  270. private:
  271. CAutoHidePanelTabManagersArray* m_pTabManagers;
  272. CPanelDropTarget* m_pDropTarget;
  273. CRect m_rcFrameRect;
  274. private:
  275. friend class CXTPDockingPaneLayout;
  276. friend class CXTPDockingPaneAutoHideWnd;
  277. friend class CXTPDockingPaneTabbedContainer;
  278. friend class CXTPDockingPaneManager;
  279. friend class CPanelDropTarget;
  280. };
  281. AFX_INLINE BOOL CXTPDockingPaneAutoHidePanel::Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext) {
  282. return CWnd::Create(lpszClassName, lpszWindowName, dwStyle, rect, pParentWnd, nID, pContext);
  283. }
  284. AFX_INLINE XTPDockingPaneDirection CXTPDockingPaneAutoHidePanel::GetDirection() const {
  285. return m_direction;
  286. }
  287. AFX_INLINE HWND CXTPDockingPaneAutoHidePanel::GetPaneHwnd() const {
  288. return CWnd::GetSafeHwnd();
  289. }
  290. AFX_INLINE CXTPDockingPaneTabbedContainer* CXTPDockingPaneAutoHideWnd::GetPane() const {
  291. return m_pPane;
  292. }
  293. #endif // #if !defined(__XTPDOCKINGPANEAUTOHIDEPANEL_H__)