sizecbar.h
上传用户:xjjlds
上传日期:2015-12-05
资源大小:22823k
文件大小:8k
源码类别:

多媒体编程

开发平台:

Visual C++

  1. /////////////////////////////////////////////////////////////////////////
  2. //
  3. // CSizingControlBar            Version 2.43
  4. //
  5. // Created: Jan 24, 1998        Last Modified: August 03, 2000
  6. //
  7. // See the official site at www.datamekanix.com for documentation and
  8. // the latest news.
  9. //
  10. /////////////////////////////////////////////////////////////////////////
  11. // Copyright (C) 1998-2000 by Cristi Posea. All rights reserved.
  12. //
  13. // This code is free for personal and commercial use, providing this 
  14. // notice remains intact in the source files and all eventual changes are
  15. // clearly marked with comments.
  16. //
  17. // You must obtain the author's consent before you can include this code
  18. // in a software library.
  19. //
  20. // No warrantee of any kind, express or implied, is included with this
  21. // software; use at your own risk, responsibility for damages (if any) to
  22. // anyone resulting from the use of this software rests entirely with the
  23. // user.
  24. //
  25. // Send bug reports, bug fixes, enhancements, requests, flames, etc. to
  26. // cristi@datamekanix.com or post them at the message board at the site.
  27. /////////////////////////////////////////////////////////////////////////
  28. #if !defined(__SIZECBAR_H__)
  29. #define __SIZECBAR_H__
  30. #include <afxpriv.h>    // for CDockContext
  31. #include <afxtempl.h>   // for CTypedPtrArray
  32. #if _MSC_VER >= 1000
  33. #pragma once
  34. #endif // _MSC_VER >= 1000
  35. #if defined(_SCB_MINIFRAME_CAPTION) && !defined(_SCB_REPLACE_MINIFRAME)
  36.     #error "_SCB_MINIFRAME_CAPTION requires _SCB_REPLACE_MINIFRAME"
  37. #endif
  38. /////////////////////////////////////////////////////////////////////////
  39. // CSCBDockBar dummy class for access to protected members
  40. class CSCBDockBar : public CDockBar
  41. {
  42.     friend class CSizingControlBar;
  43. };
  44. /////////////////////////////////////////////////////////////////////////
  45. // CSizingControlBar control bar styles
  46. #define SCBS_EDGELEFT       0x00000001
  47. #define SCBS_EDGERIGHT      0x00000002
  48. #define SCBS_EDGETOP        0x00000004
  49. #define SCBS_EDGEBOTTOM     0x00000008
  50. #define SCBS_EDGEALL        0x0000000F
  51. #define SCBS_SHOWEDGES      0x00000010
  52. #define SCBS_SIZECHILD      0x00000020
  53. /////////////////////////////////////////////////////////////////////////
  54. // CSizingControlBar control bar
  55. #ifndef baseCSizingControlBar
  56. #define baseCSizingControlBar CControlBar
  57. #endif
  58. class CSizingControlBar;
  59. typedef CTypedPtrArray <CPtrArray, CSizingControlBar*> CSCBArray;
  60. class CSizingControlBar : public baseCSizingControlBar
  61. {
  62.     DECLARE_DYNAMIC(CSizingControlBar);
  63. // Construction
  64. public:
  65.     CSizingControlBar();
  66.     virtual BOOL Create(LPCTSTR lpszWindowName, CWnd* pParentWnd,
  67.         CSize sizeDefault, BOOL bHasGripper,
  68.         UINT nID, DWORD dwStyle = WS_CHILD | WS_VISIBLE | CBRS_TOP);
  69.     virtual BOOL Create(LPCTSTR lpszWindowName, CWnd* pParentWnd,
  70.         UINT nID, DWORD dwStyle = WS_CHILD | WS_VISIBLE | CBRS_TOP);
  71. // Attributes
  72. public:
  73.     const BOOL IsFloating() const;
  74.     const BOOL IsHorzDocked() const;
  75.     const BOOL IsVertDocked() const;
  76.     const BOOL IsSideTracking() const;
  77.     const BOOL GetSCBStyle() const {return m_dwSCBStyle;}
  78. // Operations
  79. public:
  80. #if defined(_SCB_REPLACE_MINIFRAME) && !defined(_SCB_MINIFRAME_CAPTION)
  81.     void EnableDocking(DWORD dwDockStyle);
  82. #endif
  83.     virtual void LoadState(LPCTSTR lpszProfileName);
  84.     virtual void SaveState(LPCTSTR lpszProfileName);
  85.     static void GlobalLoadState(CFrameWnd* pFrame, LPCTSTR lpszProfileName);
  86.     static void GlobalSaveState(CFrameWnd* pFrame, LPCTSTR lpszProfileName);
  87.     void SetSCBStyle(DWORD dwSCBStyle)
  88.         {m_dwSCBStyle = (dwSCBStyle & ~SCBS_EDGEALL);}
  89. void SetHeight(const int nHeight)
  90. {
  91. m_szFloat.cy = m_szHorz.cy = m_szVert.cy = nHeight;
  92. m_pDockSite->DelayRecalcLayout();
  93. }
  94. // Overridables
  95.     virtual void OnUpdateCmdUI(CFrameWnd* pTarget, BOOL bDisableIfNoHndler);
  96. // Overrides
  97. public:
  98.     // ClassWizard generated virtual function overrides
  99.     //{{AFX_VIRTUAL(CSizingControlBar)
  100.     public:
  101.     virtual CSize CalcFixedLayout(BOOL bStretch, BOOL bHorz);
  102.     virtual CSize CalcDynamicLayout(int nLength, DWORD dwMode);
  103.     //}}AFX_VIRTUAL
  104. // Implementation
  105. public:
  106.     virtual ~CSizingControlBar();
  107.     
  108. protected:
  109.     // implementation helpers
  110.     UINT GetEdgeHTCode(int nEdge);
  111.     BOOL GetEdgeRect(CRect rcWnd, UINT nHitTest, CRect& rcEdge);
  112.     virtual void StartTracking(UINT nHitTest, CPoint point);
  113.     virtual void StopTracking();
  114.     virtual void OnTrackUpdateSize(CPoint& point);
  115.     virtual void OnTrackInvertTracker();
  116.     virtual void NcPaintGripper(CDC* pDC, CRect rcClient);
  117.     virtual void NcCalcClient(LPRECT pRc, UINT nDockBarID);
  118.     virtual void AlignControlBars();
  119.     void GetRowInfo(int& nFirst, int& nLast, int& nThis);
  120.     void GetRowSizingBars(CSCBArray& arrSCBars);
  121.     void GetRowSizingBars(CSCBArray& arrSCBars, int& nThis);
  122.     BOOL NegotiateSpace(int nLengthTotal, BOOL bHorz);
  123. protected:
  124.     DWORD   m_dwSCBStyle;
  125.     UINT    m_htEdge;
  126.     CSize   m_szHorz;
  127.     CSize   m_szVert;
  128.     CSize   m_szFloat;
  129.     CSize   m_szMinHorz;
  130.     CSize   m_szMinVert;
  131.     CSize   m_szMinFloat;
  132.     int     m_nTrackPosMin;
  133.     int     m_nTrackPosMax;
  134.     int     m_nTrackPosOld;
  135.     int     m_nTrackEdgeOfs;
  136.     BOOL    m_bTracking;
  137.     BOOL    m_bKeepSize;
  138.     BOOL    m_bParentSizing;
  139.     BOOL    m_bDragShowContent;
  140.     UINT    m_nDockBarID;
  141.     int     m_cxEdge;
  142. BOOL m_bFixedFloat;
  143. CSize m_szFixedFloat;
  144. // Generated message map functions
  145. protected:
  146.     //{{AFX_MSG(CSizingControlBar)
  147.     afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
  148.     afx_msg void OnNcPaint();
  149.     afx_msg void OnNcCalcSize(BOOL bCalcValidRects, NCCALCSIZE_PARAMS FAR* lpncsp);
  150.     afx_msg LRESULT OnNcHitTest(CPoint point);
  151.     afx_msg void OnCaptureChanged(CWnd *pWnd);
  152.     afx_msg void OnSettingChange(UINT uFlags, LPCTSTR lpszSection);
  153.     afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
  154.     afx_msg void OnMouseMove(UINT nFlags, CPoint point);
  155.     afx_msg void OnNcLButtonDown(UINT nHitTest, CPoint point);
  156.     afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
  157.     afx_msg void OnLButtonDblClk(UINT nFlags, CPoint point);
  158.     afx_msg void OnRButtonDown(UINT nFlags, CPoint point);
  159.     afx_msg void OnWindowPosChanging(WINDOWPOS FAR* lpwndpos);
  160.     afx_msg void OnPaint();
  161.     afx_msg void OnClose();
  162.     afx_msg void OnSize(UINT nType, int cx, int cy);
  163.     //}}AFX_MSG
  164.     afx_msg LRESULT OnSetText(WPARAM wParam, LPARAM lParam);
  165.     DECLARE_MESSAGE_MAP()
  166. #ifdef _SCB_REPLACE_MINIFRAME
  167.     friend class CSCBMiniDockFrameWnd;
  168. #endif //_SCB_REPLACE_MINIFRAME
  169. };
  170. #ifdef _SCB_REPLACE_MINIFRAME
  171. #ifndef _SCB_MINIFRAME_CAPTION
  172. /////////////////////////////////////////////////////////////////////////
  173. // CSCBDockContext dockcontext
  174. class CSCBDockContext : public CDockContext
  175. {
  176. public:
  177. // Construction
  178.     CSCBDockContext(CControlBar* pBar) : CDockContext(pBar) {}
  179. // Drag Operations
  180.     virtual void StartDrag(CPoint pt);
  181. };
  182. #endif //_SCB_MINIFRAME_CAPTION
  183. /////////////////////////////////////////////////////////////////////////
  184. // CSCBMiniDockFrameWnd miniframe
  185. #ifndef baseCSCBMiniDockFrameWnd
  186. #define baseCSCBMiniDockFrameWnd CMiniDockFrameWnd
  187. #endif
  188. class CSCBMiniDockFrameWnd : public baseCSCBMiniDockFrameWnd
  189. {
  190.     DECLARE_DYNCREATE(CSCBMiniDockFrameWnd)
  191. // Overrides
  192.     // ClassWizard generated virtual function overrides
  193.     //{{AFX_VIRTUAL(CSCBMiniDockFrameWnd)
  194.     public:
  195.     virtual BOOL Create(CWnd* pParent, DWORD dwBarStyle);
  196.     //}}AFX_VIRTUAL
  197. // Implementation
  198. public:
  199.     CSizingControlBar* GetSizingControlBar();
  200.     //{{AFX_MSG(CSCBMiniDockFrameWnd)
  201.     afx_msg void OnNcLButtonDown(UINT nHitTest, CPoint point);
  202.     afx_msg void OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI);
  203.     afx_msg void OnWindowPosChanging(WINDOWPOS FAR* lpwndpos);
  204.     afx_msg void OnSize(UINT nType, int cx, int cy);
  205.     //}}AFX_MSG
  206.     DECLARE_MESSAGE_MAP()
  207. };
  208. #endif //_SCB_REPLACE_MINIFRAME
  209. #endif // !defined(__SIZECBAR_H__)