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

对话框与窗口

开发平台:

Visual C++

  1. // XTPDockingPaneTabbedContainer.h : interface for the CXTPDockingPaneTabbedContainer 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(__XTPDOCKINGPANETABBEDCONTAINER_H__)
  22. #define __XTPDOCKINGPANETABBEDCONTAINER_H__
  23. //}}AFX_CODEJOCK_PRIVATE
  24. #if _MSC_VER >= 1000
  25. #pragma once
  26. #endif // _MSC_VER >= 1000
  27. #include "XTPDockingPaneBaseContainer.h"
  28. #include "XTPDockingPanePaintManager.h"
  29. #include "Common/XTPSystemHelpers.h"
  30. class CXTPDockingPaneAutoHidePanel;
  31. class CXTPDockingPaneCaptionButton;
  32. //===========================================================================
  33. // Summary:
  34. //     CXTPDockingPaneTabbedContainer is a multiple inheritance class derived from
  35. //     CWnd and CXTPDockingPaneBase. It represents a tabbed container for Docking
  36. //     Panes.
  37. //===========================================================================
  38. class _XTP_EXT_CLASS CXTPDockingPaneTabbedContainer : public CWnd, public CXTPDockingPaneBaseContainer, public CXTPTabManager, public CXTPAccessible
  39. {
  40. DECLARE_DYNAMIC(CXTPDockingPaneTabbedContainer)
  41. protected:
  42. //-----------------------------------------------------------------------
  43. // Summary:
  44. //     Constructs a CXTPDockingPaneTabbedContainer object
  45. //     Protected constructor. Internally constructed only.
  46. // Parameters:
  47. //     pLayout - Points to a CXTPDockingPaneLayout object.
  48. //-----------------------------------------------------------------------
  49. CXTPDockingPaneTabbedContainer(CXTPDockingPaneLayout* pLayout);
  50. //-----------------------------------------------------------------------
  51. // Summary:
  52. //     Destroys a CXTPDockingPaneTabbedContainer object, handles cleanup and
  53. //     deallocation
  54. //-----------------------------------------------------------------------
  55. virtual ~CXTPDockingPaneTabbedContainer();
  56. public:
  57. //-----------------------------------------------------------------------
  58. // Summary:
  59. //     Call this member to activate a child docking pane.
  60. // Parameters:
  61. //     pPane     - Pane to be activated.
  62. //     bSetFocus - TRUE to set focus to child docking pane.
  63. //     bDelayRedraw - TRUE to redraw caption delayed.
  64. //-----------------------------------------------------------------------
  65. virtual void SelectPane(CXTPDockingPane* pPane, BOOL bSetFocus = TRUE, BOOL bDelayRedraw = TRUE);
  66. //-----------------------------------------------------------------------
  67. // Summary:
  68. //     Call this member function to get child pane state.
  69. // Returns:
  70. //     TRUE if a child pane is active.
  71. //-----------------------------------------------------------------------
  72. BOOL IsActive() const;
  73. //-----------------------------------------------------------------------
  74. // Summary:
  75. //     Call this member function to get selected pane.
  76. // Returns:
  77. //     The selected child pane.
  78. //-----------------------------------------------------------------------
  79. CXTPDockingPane* GetSelected() const;
  80. //-----------------------------------------------------------------------
  81. // Summary:
  82. //     Call this member to access title's close button.
  83. // Returns:
  84. //     A reference to the title's close button.
  85. //-----------------------------------------------------------------------
  86. CXTPDockingPaneCaptionButton* GetCloseButton() const;
  87. //-----------------------------------------------------------------------
  88. // Summary:
  89. //     Call this member to access title's pin button.
  90. // Returns:
  91. //     A reference to the title's pin button.
  92. //-----------------------------------------------------------------------
  93. CXTPDockingPaneCaptionButton* GetPinButton() const;
  94. //-----------------------------------------------------------------------
  95. // Summary:
  96. //     Call this member to determine if the title is visible.
  97. // Returns:
  98. //     TRUE if the title is visible.
  99. //-----------------------------------------------------------------------
  100. BOOL IsTitleVisible() const;
  101. //-----------------------------------------------------------------------
  102. // Summary:
  103. //     Returns TRUE if caption drawn vertically
  104. // Returns:
  105. //     TRUE if the caption drawn vertically
  106. //-----------------------------------------------------------------------
  107. virtual BOOL IsCaptionVertical() const;
  108. //-----------------------------------------------------------------------
  109. // Summary:
  110. //     Call this member to determine if the tab bar is visible.
  111. // Returns:
  112. //     TRUE if the tab bar is visible.
  113. //-----------------------------------------------------------------------
  114. virtual BOOL IsTabsVisible() const;
  115. //-----------------------------------------------------------------------
  116. // Summary:
  117. //     Retrieves safe window handle.
  118. // Returns: Safe window handle.
  119. //-----------------------------------------------------------------------
  120. virtual HWND GetPaneHwnd() const;
  121. //-----------------------------------------------------------------------
  122. // Summary:
  123. //     Call this member to determine if the tabbed container is
  124. //     auto-hidden.  If one pane in a group of panes is auto-hidden,
  125. //     then the entire group will be auto-hidden.
  126. // Returns:
  127. //     TRUE if the tabbed container is auto-hidden, FALSE if the
  128. //     tab group is visible.
  129. //-----------------------------------------------------------------------
  130. BOOL IsHidden() const;
  131. //-----------------------------------------------------------------------
  132. // Summary:
  133. //     This member is called by the framework when the left mouse
  134. //     button is clicked while the mouse pointer is positioned over
  135. //     a pane caption.  This will give the pane focus and begin the
  136. //     pane dragging process (If the left button is held down).
  137. // Parameters:
  138. //     point - Cursor location on the pane's caption that was clicked.
  139. //-----------------------------------------------------------------------
  140. virtual void OnCaptionLButtonDown(CPoint point);
  141. //-----------------------------------------------------------------------
  142. // Summary:
  143. //     This method called to check if docking pane can be attached to tabbed container.
  144. // Parameters:
  145. //     rcClient - Client rectangle of container.
  146. //     pt       - Point to attach.
  147. // Returns:
  148. //     TRUE if pane can be attached as new tab to tabbed container.
  149. //-----------------------------------------------------------------------
  150. virtual BOOL CanAttach(CRect& rcClient, CPoint pt) const;
  151. //-----------------------------------------------------------------------
  152. // Summary:
  153. //     Call this member to fill the pMinMaxInfo structure with the
  154. //     minimum and maximum width and height of the container.
  155. //     This will look at the MinMaxInfo for each pane in the
  156. //     container and set the appropriate minimum and maximum width
  157. //     and height for the container.
  158. // Parameters:
  159. //     pMinMaxInfo - Pointer to MINMAXINFO structure
  160. //-----------------------------------------------------------------------
  161. void GetMinMaxInfo(LPMINMAXINFO pMinMaxInfo) const;
  162. //-----------------------------------------------------------------------
  163. // Summary:
  164. //     Call this member to get pane by its index.
  165. // Parameters:
  166. //     nIndex - Index of pane need to retrieve
  167. // Returns:
  168. //     CXTPDockingPane pointer corresponded with nIndex
  169. //-----------------------------------------------------------------------
  170. CXTPDockingPane* GetItemPane(int nIndex) const;
  171. //-----------------------------------------------------------------------
  172. // Summary:
  173. //     Call this member to get tab for corresponded pane.
  174. // Parameters:
  175. //     pPane - Pane to get tab for
  176. // Returns:
  177. //     CXTPTabManagerItem pointer corresponded with pPane
  178. //-----------------------------------------------------------------------
  179. CXTPTabManagerItem* GetPaneTab(CXTPDockingPane* pPane) const;
  180. CString GetTitle() const;
  181. protected:
  182. //-----------------------------------------------------------------------
  183. // Summary:
  184. //     This member is called to determine if a specific caption button
  185. //     is visible.
  186. // Parameters:
  187. //     pButton - Button to check to see if it is visible.
  188. // Returns:
  189. //     TRUE if the caption button specified is visible, FALSE otherwise.
  190. //-----------------------------------------------------------------------
  191. virtual BOOL IsCaptionButtonVisible(CXTPDockingPaneCaptionButton* pButton);
  192. //-----------------------------------------------------------------------
  193. // Summary:
  194. //     This member is called by the framework when a caption button
  195. //     is clicked.
  196. // Parameters:
  197. //     pButton - Caption button that was clicked.
  198. //-----------------------------------------------------------------------
  199. virtual void OnCaptionButtonClick(CXTPDockingPaneCaptionButton* pButton);
  200. protected:
  201. //-----------------------------------------------------------------------
  202. // Summary:
  203. //     Constructs a CXTPDockingPaneTabbedContainer object
  204. //     Protected constructor. Internally constructed only.
  205. // Parameters:
  206. //     pPane   - Child pane.
  207. //     pFrame  - Parent Frame.
  208. //     pLayout - Points to a CXTPDockingPaneLayout object.
  209. //-----------------------------------------------------------------------
  210. void Init(CXTPDockingPane* pPane, CWnd* pFrame);
  211. //-----------------------------------------------------------------------
  212. // Summary:
  213. //     Copies a CXTPDockingPaneTabbedContainer object
  214. // Parameters:
  215. //     pClone  - Points to a CXTPDockingPaneTabbedContainer object
  216. //     pMap    - Points to a CXTPPaneToPaneMap object
  217. //     dwIgnoredOptions - Options that must be skipped.
  218. // See Also:
  219. //     CXTPPaneToPaneMap
  220. //-----------------------------------------------------------------------
  221. virtual void Copy(CXTPDockingPaneBase* pClone, CXTPPaneToPaneMap* pMap, DWORD dwIgnoredOptions);
  222. //-----------------------------------------------------------------------
  223. // Summary:
  224. //     This member is called to recalculate the positions of
  225. //     tab groups/Items.
  226. //-----------------------------------------------------------------------
  227. virtual void Reposition();
  228. //-----------------------------------------------------------------------
  229. // Summary:
  230. //     This member is called to redraw the tabbed control, I.e. When
  231. //     an Icon has changed.
  232. // Parameters:
  233. //     lpRect - The rectangular area of the window that is invalid.
  234. //     bAnimate - TRUE to animate changes in bounding rectangle.
  235. //-----------------------------------------------------------------------
  236. virtual void RedrawControl(LPCRECT lpRect, BOOL bAnimate);
  237. //-----------------------------------------------------------------------
  238. // Summary:
  239. //     This member is called to access the visual elements of the docking
  240. //     pane tabs.  I.e. Tab colors, styles, etc...
  241. // Returns:
  242. //     Pointer to CXTPTabPaintManager that contains the visual elements
  243. //     of the docking pane tabs.
  244. //-----------------------------------------------------------------------
  245. virtual CXTPTabPaintManager* GetPaintManager() const;
  246. //-----------------------------------------------------------------------
  247. // Summary:
  248. //     This member function is called in a derived class to set a pointer
  249. //     the tab paint manager.
  250. // Parameters:
  251. //     pPaintManager - Pointer to a CXTPTabPaintManager object.
  252. //-----------------------------------------------------------------------
  253. virtual void SetPaintManager(CXTPTabPaintManager* pPaintManager);
  254. //-----------------------------------------------------------------------
  255. // Summary:
  256. //     This member is called when the icon of the tab in the tabbed
  257. //     container needs to be drawn.  I.e. On mouse over.
  258. // Parameters:
  259. //     pDC    - Pointer to the destination device context.
  260. //     pt     - Specifies the location of the image.
  261. //     pItem  - CXTPTabManagerItem object to draw icon on.
  262. //     bDraw  - TRUE if the icon needs to be drawn, I.e. the icon size
  263. //                 changed.  FALSE if the icon does not need to be
  264. //                 drawn or redrawn.
  265. //     szIcon - Size of the tab icon.
  266. // Returns:
  267. //     TRUE if the icon was successfully drawn, FALSE if the icon
  268. //     was not drawn.
  269. //-----------------------------------------------------------------------
  270. virtual BOOL DrawIcon(CDC* pDC, CPoint pt, CXTPTabManagerItem* pItem, BOOL bDraw, CSize& szIcon) const;
  271. //-----------------------------------------------------------------------
  272. // Summary:
  273. //     This member is called to save/restore the settings of the pane.
  274. // Parameters:
  275. //     pPX - Points to a CXTPPropExchange object.
  276. // Returns:
  277. //     TRUE if successful; otherwise returns FALSE.
  278. //-----------------------------------------------------------------------
  279. virtual BOOL DoPropExchange(CXTPPropExchange* pPX);
  280. //-----------------------------------------------------------------------
  281. // Summary:
  282. //     This member is called to when tabs was changed.
  283. //-----------------------------------------------------------------------
  284. virtual void OnTabsChanged();
  285. //-----------------------------------------------------------------------
  286. // Summary:
  287. //     This member is called to create pane
  288. //-----------------------------------------------------------------------
  289. virtual void CreateContainer();
  290. protected:
  291. //{{AFX_CODEJOCK_PRIVATE
  292. virtual void OnSizeParent(CWnd* pParent, CRect rect, LPVOID lParam);
  293. virtual void OnFocusChanged();
  294. virtual void SetDockingSite(CWnd* pFrame);
  295. virtual void RemovePane(CXTPDockingPaneBase* pPane);
  296. virtual void OnParentContainerChanged(CXTPDockingPaneBase* pContainer);
  297. void ShowTitle(BOOL bShow);
  298. void Show(BOOL bSetFocus);
  299. void ShowPane(CXTPDockingPane* pPane, BOOL bSetFocus);
  300. void _Swap(CXTPDockingPane* p1, CXTPDockingPane* p2);
  301. void _InsertPane(CXTPDockingPane* pPane, BOOL bSetFocus = TRUE);
  302. int HitTest(CPoint point) const;
  303. void AdjustMinMaxInfoClientRect(LPMINMAXINFO pMinMaxInfo, BOOL bCaptionOnly = FALSE) const;
  304. void InvalidatePane(BOOL bSelectionChanged);
  305. void _RestoreFocus();
  306. BOOL OnCaptionButtonDown(CXTPDockingPaneCaptionButton* pButton);
  307. CXTPDockingPaneCaptionButton* HitTestCaptionButton(CPoint point) const;
  308. void DeletePane();
  309. BOOL IsPaneRestored() const;
  310. BOOL IsAllowMaximize() const;
  311. BOOL IsPaneMaximized() const;
  312. BOOL IsPaneMinimized() const;
  313. void Restore();
  314. void Maximize();
  315. void NormalizeDockingSize();
  316. //}}AFX_CODEJOCK_PRIVATE
  317. protected:
  318. //{{AFX_CODEJOCK_PRIVATE
  319. DECLARE_MESSAGE_MAP()
  320. //{{AFX_VIRTUAL(CXTPDockingPaneTabbedContainer)
  321. virtual INT_PTR OnToolHitTest(CPoint point, TOOLINFO* pTI) const;
  322. LRESULT OnHelpHitTest(WPARAM, LPARAM);
  323. BOOL OnWndMsg(UINT message, WPARAM wParam, LPARAM lParam, LRESULT* pResult);
  324. virtual void OnFinalRelease();
  325. //}}AFX_VIRTUAL
  326. //{{AFX_MSG(CXTPDockingPaneTabbedContainer)
  327. afx_msg void OnPaint();
  328. afx_msg LRESULT OnPrintClient(WPARAM wParam, LPARAM /*lParam*/);
  329. afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
  330. afx_msg void OnRButtonDown(UINT nFlags, CPoint point);
  331. afx_msg void OnRButtonUp(UINT /*nFlags*/, CPoint point);
  332. afx_msg void OnMouseMove(UINT nFlags, CPoint point);
  333. afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
  334. afx_msg void OnCaptureChanged(CWnd* pWnd);
  335. afx_msg void OnLButtonDblClk(UINT nFlags, CPoint point);
  336. afx_msg void OnMouseLeave();
  337. afx_msg void OnDestroy();
  338. afx_msg BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message);
  339. afx_msg LRESULT OnGetObject(WPARAM wParam, LPARAM lParam);
  340. //}}AFX_MSG
  341. //}}AFX_CODEJOCK_PRIVATE
  342. protected:
  343. //{{AFX_CODEJOCK_PRIVATE
  344. // System accessibility support.
  345. virtual HRESULT GetAccessibleParent(IDispatch** ppdispParent);
  346. virtual HRESULT GetAccessibleChildCount(long* pcountChildren);
  347. virtual HRESULT GetAccessibleChild(VARIANT varChild, IDispatch** ppdispChild);
  348. virtual HRESULT GetAccessibleName(VARIANT varChild, BSTR* pszName);
  349. virtual HRESULT GetAccessibleRole(VARIANT varChild, VARIANT* pvarRole);
  350. virtual HRESULT AccessibleLocation(long *pxLeft, long *pyTop, long *pcxWidth, long* pcyHeight, VARIANT varChild);
  351. virtual HRESULT AccessibleHitTest(long xLeft, long yTop, VARIANT* pvarChild);
  352. virtual HRESULT GetAccessibleState(VARIANT varChild, VARIANT* pvarState);
  353. virtual CCmdTarget* GetAccessible();
  354. DECLARE_INTERFACE_MAP()
  355. //}}AFX_CODEJOCK_PRIVATE
  356. private:
  357. BOOL m_bActive;
  358. BOOL m_bTitleVisible;
  359. BOOL m_bLockReposition;
  360. BOOL m_bDelayRedraw;
  361. CXTPDockingPane*      m_pSelectedPane;
  362. CXTPDockingPane*      m_pTrackingPane;
  363. CArray<CRect, CRect&> m_lstRects;
  364. COleDropTarget* m_pDropTarget;
  365. BOOL m_bMaximized;
  366. private:
  367. class CContainerDropTarget;
  368. private:
  369. friend class CXTPDockingPaneManager;
  370. friend class CXTPDockingPane;
  371. friend class CXTPDockingPaneContext;
  372. friend class CXTPDockingPaneMiniWnd;
  373. friend class CXTPDockingPaneLayout;
  374. friend class CXTPDockingPaneAutoHidePanel;
  375. friend class CXTPDockingPaneAutoHideWnd;
  376. friend class CXTPDockingPaneCaptionButton;
  377. friend class CContainerDropTarget;
  378. friend class CXTPDockingPaneSidePanel;
  379. };
  380. AFX_INLINE BOOL CXTPDockingPaneTabbedContainer::IsActive() const {
  381. return m_bActive;
  382. }
  383. AFX_INLINE CXTPDockingPane* CXTPDockingPaneTabbedContainer::GetSelected() const {
  384. return m_pSelectedPane;
  385. }
  386. AFX_INLINE HWND CXTPDockingPaneTabbedContainer::GetPaneHwnd() const {
  387. return CWnd::GetSafeHwnd();
  388. }
  389. #endif // #if !defined(__XTPDOCKINGPANETABBEDCONTAINER_H__)