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

对话框与窗口

开发平台:

Visual C++

  1. // XTPDockingPaneContext.h : interface for the CXTPDockingPaneContext 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(__XTPDOCKINGPANECONTEXT_H__)
  22. #define __XTPDOCKINGPANECONTEXT_H__
  23. //}}AFX_CODEJOCK_PRIVATE
  24. #if _MSC_VER >= 1000
  25. #pragma once
  26. #endif // _MSC_VER >= 1000
  27. #include "XTPDockingPaneBase.h"
  28. class CXTPDockingPane;
  29. class CXTPDockingPaneManager;
  30. class CXTPDockingPaneContext;
  31. //-----------------------------------------------------------------------
  32. // Summary:
  33. //     XTPDockingPaneStickerType is an enumeration that is used to indicate
  34. //     which docking stickers are to be drawn on the screen when a
  35. //     docking pane is dragged.
  36. // Remarks:
  37. //     m_bUseAlphaContext must be TRUE to display docking stickers.
  38. // See Also:
  39. //     CXTPDockingPaneContext::CreateNewSticker,
  40. //     CXTPDockingPaneContextStickerWnd::m_typeSticker, CXTPDockingPaneContextStickerWnd::m_selectedSticker
  41. //
  42. // <KEYWORDS xtpPaneStickerNone, xtpPaneStickerLeft, xtpPaneStickerRight, xtpPaneStickerTop, xtpPaneStickerBottom, xtpPaneStickerCenter, xtpPaneStickerClient, xtpPaneStickerPane>
  43. //-----------------------------------------------------------------------
  44. enum XTPDockingPaneStickerType
  45. {
  46. xtpPaneStickerNone = 0,         // No docking stickers are displayed
  47. xtpPaneStickerLeft = 1,         // Display the docking sticker indicating the pane can be docked to the left.
  48. xtpPaneStickerRight = 2,        // Display the docking sticker indicating the pane can be docked to the right.
  49. xtpPaneStickerTop = 4,          // Display the docking sticker indicating the pane can be docked on the top.
  50. xtpPaneStickerBottom = 8,       // Display the docking sticker indicating the pane can be docked on the bottom.
  51. xtpPaneStickerCenter = 16,      // Display the docking sticker indicating the pane can be docked in the center.
  52. xtpPaneStickerClient = 32       // Display the left, top, bottom, and right docking stickers on the client frame.
  53. };
  54. //===========================================================================
  55. // Summary:
  56. //     CXTPDockingPaneContextAlphaWnd is CWnd derived class represents alpha context helper window
  57. //===========================================================================
  58. class _XTP_EXT_CLASS CXTPDockingPaneContextAlphaWnd : public CWnd
  59. {
  60. public:
  61. //-----------------------------------------------------------------------
  62. // Summary:
  63. //     Constructs a CXTPDockingPaneContextAlphaWnd object.
  64. //-----------------------------------------------------------------------
  65. CXTPDockingPaneContextAlphaWnd();
  66. //-----------------------------------------------------------------------
  67. // Summary:
  68. //     Destroys a CXTPDockingPaneContextAlphaWnd object, handles cleanup and deallocation.
  69. //-----------------------------------------------------------------------
  70. virtual ~CXTPDockingPaneContextAlphaWnd();
  71. protected:
  72. //{{AFX_CODEJOCK_PRIVATE
  73. DECLARE_MESSAGE_MAP()
  74. //{{AFX_MSG(CXTPDockingPaneContextAlphaWnd)
  75. afx_msg BOOL OnEraseBkgnd(CDC* pDC);
  76. afx_msg void OnPaint();
  77. //}}AFX_MSG
  78. //}}AFX_CODEJOCK_PRIVATE
  79. friend class CXTPDockingPaneContext;
  80. };
  81. //===========================================================================
  82. // Summary:
  83. //     CXTPDockingPaneContextStickerWnd is CWnd derived class represents sticker window.
  84. //===========================================================================
  85. class _XTP_EXT_CLASS CXTPDockingPaneContextStickerWnd : public CWnd
  86. {
  87. public:
  88. //-----------------------------------------------------------------------
  89. // Summary:
  90. //     Constructs a CXTPDockingPaneContextStickerWnd object.
  91. // Parameters:
  92. //     pContext - Parent context object.
  93. //-----------------------------------------------------------------------
  94. CXTPDockingPaneContextStickerWnd(CXTPDockingPaneContext* pContext);
  95. //-----------------------------------------------------------------------
  96. // Summary:
  97. //     Destroys a CXTPDockingPaneContextStickerWnd object, handles cleanup and deallocation.
  98. //-----------------------------------------------------------------------
  99. virtual ~CXTPDockingPaneContextStickerWnd();
  100. public:
  101. //-----------------------------------------------------------------------
  102. // Summary:
  103. //     This method is called to draw sticker
  104. // Parameters:
  105. //     pDC - Device context pointer
  106. //-----------------------------------------------------------------------
  107. void OnDraw(CDC* pDC);
  108. //{{AFX_CODEJOCK_PRIVATE
  109. public:
  110. XTPDockingPaneStickerType HitTest(CPoint pt);
  111. struct SPRITEINFO;
  112. protected:
  113. void DrawSprite(CDC* pDC, UINT nID, SPRITEINFO* pSpriteInfo, BOOL bClientBitmap = TRUE);
  114. void DrawTransparent(CDC* pDC , const CPoint& ptDest, const CSize& sz, CBitmap* pBitmap);
  115. protected:
  116. DECLARE_MESSAGE_MAP()
  117. //{{AFX_MSG(CXTPDockingPaneContextStickerWnd)
  118. afx_msg BOOL OnEraseBkgnd(CDC* pDC);
  119. afx_msg void OnPaint();
  120. //}}AFX_MSG
  121. //}}AFX_CODEJOCK_PRIVATE
  122. public:
  123. XTPDockingPaneStickerType m_typeSticker;      // Type of the sticker.
  124. XTPDockingPaneStickerType m_selectedSticker;  // Selected sticker part.
  125. CXTPDockingPaneContext* m_pContext;           // Pointer to docking pane context.
  126. friend class CXTPDockingPaneContext;
  127. };
  128. //===========================================================================
  129. // Summary:
  130. //     CXTPDockingPaneContext is a stand alone class. It is used internally
  131. //     for docking and sizing panes.
  132. //===========================================================================
  133. class _XTP_EXT_CLASS CXTPDockingPaneContext
  134. {
  135. public:
  136. //-----------------------------------------------------------------------
  137. // Summary:
  138. //     Constructs a CXTPDockingPaneContext object
  139. //-----------------------------------------------------------------------
  140. CXTPDockingPaneContext();
  141. //-----------------------------------------------------------------------
  142. // Summary:
  143. //     Destroys a CXTPDockingPaneContext object, handles cleanup and deallocation.
  144. //-----------------------------------------------------------------------
  145. virtual ~CXTPDockingPaneContext();
  146. public:
  147. //-----------------------------------------------------------------------
  148. // Summary:
  149. //     Call this member to drag a pane.
  150. // Parameters:
  151. //     pPane - Points to a CXTPDockingPaneBase object
  152. //     point - Initial mouse position.
  153. //-----------------------------------------------------------------------
  154. virtual void Drag(CXTPDockingPaneBase* pPane, CPoint point);
  155. void Drag(CXTPDockingPaneBase* pPane, CPoint point, CRect rcPane);
  156. //-----------------------------------------------------------------------
  157. // Summary:
  158. //      This method is called inside WM_SIZING handler of mini frames to update sticky position of frame
  159. // Parameters:
  160. //      pWnd - Mini frame pointer
  161. //      nSide - Side was dragged by user
  162. //      lpRect - Rectangle of frame
  163. //-----------------------------------------------------------------------
  164. virtual void OnSizingFloatingFrame(CXTPDockingPaneMiniWnd* pWnd, UINT nSide, LPRECT lpRect);
  165. protected:
  166. //-----------------------------------------------------------------------
  167. // Summary:
  168. //     This method is called to track the size of the pane.
  169. //-----------------------------------------------------------------------
  170. virtual void Track();
  171. //-----------------------------------------------------------------------
  172. // Summary:
  173. //     This method is called then user move mouse cursor in track mode.
  174. // Parameters:
  175. //     pt - New mouse cursor position
  176. //-----------------------------------------------------------------------
  177. virtual void Move(CPoint pt);
  178. //-----------------------------------------------------------------------
  179. // Summary:
  180. //     Call this member function to initialize a loop.
  181. //-----------------------------------------------------------------------
  182. virtual void InitLoop();
  183. //-----------------------------------------------------------------------
  184. // Summary:
  185. //     This member function is called when a loop is canceled.
  186. //-----------------------------------------------------------------------
  187. virtual void CancelLoop();
  188. //-----------------------------------------------------------------------
  189. // Summary:
  190. //     This member function is called to draw the focus rectangle.
  191. // Parameters:
  192. //     bRemoveRect - TRUE to delete focus rect.
  193. //-----------------------------------------------------------------------
  194. virtual void DrawFocusRect(BOOL bRemoveRect = FALSE);
  195. protected:
  196. //-----------------------------------------------------------------------
  197. // Summary:
  198. //     Call this member to adjust the rectangle.
  199. // Parameters:
  200. //     rect - Rectangle to be changed.
  201. //     pt   - Position of the rectangle to be changed.
  202. //-----------------------------------------------------------------------
  203. static void AFX_CDECL AdjustRectangle(CRect& rect, CPoint pt);
  204. //-----------------------------------------------------------------------
  205. // Summary:
  206. //     Moves cursor to available work area
  207. // Parameters:
  208. //     pt - Pointer to mouse cursor
  209. //-----------------------------------------------------------------------
  210. static void AFX_CDECL AdjustCursor(CPoint& pt);
  211. //-----------------------------------------------------------------------
  212. // Summary:
  213. //     Call this member function to create a context menu.
  214. // Parameters:
  215. //     pWnd - A pointer to a CXTPDockingPaneContextAlphaWnd object.
  216. //-----------------------------------------------------------------------
  217. void CreateContextWindow(CXTPDockingPaneContextAlphaWnd* pWnd);
  218. //-----------------------------------------------------------------------
  219. // Summary:
  220. //     Call this member function to refresh the docking stickers.
  221. //-----------------------------------------------------------------------
  222. void UpdateDockingStickers();
  223. //-----------------------------------------------------------------------
  224. // Summary:
  225. //     Call this member to remove the docking stickers.
  226. //-----------------------------------------------------------------------
  227. void DestroyDockingStickers();
  228. //-----------------------------------------------------------------------
  229. // Summary:
  230. //     Creates new sticker window
  231. // Parameters:
  232. //     rc          - Boundary rectangle of the sticker
  233. //     typeSticker - Type of the sticker to create
  234. // Returns:
  235. //     New Sticker window
  236. //-----------------------------------------------------------------------
  237. CXTPDockingPaneContextStickerWnd* CreateNewSticker(CRect rc, XTPDockingPaneStickerType typeSticker);
  238. //{{AFX_CODEJOCK_PRIVATE
  239. public:
  240. CSize GetStickerSize(XTPDockingPaneStickerType type) const;
  241. XTPDockingContextStickerStyle GetStickerStyle() const;
  242. static void AFX_CDECL EnsureVisible(CRect& rectDragFrame);
  243. protected:
  244. void _CreateRectangleRgn(CRgn& rgnResult, CRect rc);
  245. void _CreateRgn(CRgn& rgnResult, CRect rc, BOOL bTabbedRgn, BOOL bRemove = FALSE);
  246. virtual void FindContainer(CPoint pt);
  247. BOOL CanDock(CRect rc, CPoint pt, CXTPDockingPaneBase* pPane, BOOL bInside = TRUE);
  248. BOOL CanSideDock(CXTPDockingPaneBase* pPane, CRect rcFrame);
  249. void RegionFromBitmap(CRgn* pRgn, CDC* pDC, CRect rc);
  250. BOOL IsAllowDockingTo(CXTPDockingPaneBase* pPane, XTPDockingPaneDirection direction);
  251. BOOL IsAllowAttachTo(CXTPDockingPaneBase* pPane);
  252. virtual void UpdateStickyFrame(CRect& rectDragFrame);
  253. void UpdateStickyFrame(CRect& rectDragFrame, CWnd* pHost);
  254. void UpdateSizingStickyFrame(UINT nSide, CRect& rectDragFrame, CWnd* pWnd);
  255. BOOL IsBehind(CXTPDockingPaneBase* pPane, CXTPDockingPaneBase* pPaneRef);
  256. //}}AFX_CODEJOCK_PRIVATE
  257. private:
  258. void IncludeRgnPart(CRgn* pRgn, int x1, int y, int x2);
  259. protected:
  260. CXTPDockingPaneContextAlphaWnd m_wndContext;        // Alpha context control.
  261. CXTPDockingPaneContextAlphaWnd m_wndAttachedTab;    // Attached tab control.
  262. PVOID m_pfnSetLayeredWindowAttributes;              // Pointer to SetLayeredWindowAttributes method.
  263. BOOL m_bUseDockingStickers;                         // TRUE to use docking stickers.
  264. BOOL m_bUseAlphaContext;                            // TRUE to use alpha context.
  265. CRect m_rectStickerPane;                            // Area occupied by the sticker pane.
  266. CXTPDockingPaneBase* m_pStickerPane;                // Sticker Pane.
  267. CXTPDockingPaneBase* m_pLastStickerPane;            // Last Sticker Pane.
  268. CList<CXTPDockingPaneContextStickerWnd*, CXTPDockingPaneContextStickerWnd*> m_lstStickers;  //List of the stickers
  269. CPoint m_ptLast;                                    // Holds the last selection point.
  270. CPoint m_ptSticky;                                  // Position of the sticky control.
  271. CRect m_rectDragFrame;                              // Area occupied by the drag frame.
  272. CRect m_rectDragFrameScreen;                        // Screen drag frame
  273. CXTPDockingPaneManager* m_pManager;                 // Parent pane manager.
  274. CXTPDockingPaneBase* m_pPane;                       // Pointer to the associated pane.
  275. BOOL m_bDragKeyboard;                               // TRUE if keyboard used to drag pane
  276. protected:
  277. //{{AFX_CODEJOCK_PRIVATE
  278. BOOL m_bResetDC;
  279. CXTPDockingPaneBase* m_pContainer;
  280. CRect m_rectContainer;
  281. BOOL  m_bAttachLast;
  282. BOOL  m_bAttach;
  283. BOOL  m_bSideDock;
  284. BOOL  m_bFloatable;
  285. BOOL  m_bDockable;
  286. CRect m_rectLast;
  287. CSize m_sizeLast;
  288. BOOL  m_bDitherLast;
  289. CMap<UINT, UINT,  CRgn*, CRgn*> m_rgnStickers;
  290. XTPDockingPaneDirection m_containDirection;
  291. CDC* m_pDC;
  292. //}}AFX_CODEJOCK_PRIVATE
  293. private:
  294. friend class CXTPDockingPaneManager;
  295. friend class CXTPDockingPaneContextAlphaWnd;
  296. };
  297. #endif // #if !defined(__XTPDOCKINGPANECONTEXT_H__)