sizecbar.h
上传用户:maryhy001
上传日期:2007-05-02
资源大小:2317k
文件大小:6k
源码类别:

网格计算

开发平台:

Visual C++

  1. /////////////////////////////////////////////////////////////////////////
  2. // Copyright (C) 1998, 1999 by Cristi Posea
  3. // All rights reserved
  4. //
  5. // Use and distribute freely, except: don't remove my name from the
  6. // source or documentation (don't take credit for my work), mark your
  7. // changes (don't get me blamed for your possible bugs), don't alter
  8. // or remove this notice.
  9. // No warrantee of any kind, express or implied, is included with this
  10. // software; use at your own risk, responsibility for damages (if any) to
  11. // anyone resulting from the use of this software rests entirely with the
  12. // user.
  13. //
  14. // This class is intended to be used as a base class. Do not simply add
  15. // your code to this file - instead create a new class derived from
  16. // CSizingControlBar and put there what you need.
  17. // Modify this file only to fix bugs, and don't forget to send me a copy.
  18. //
  19. // Send bug reports, bug fixes, enhancements, requests, flames, etc.,
  20. // and I'll try to keep a version up to date.  I can be reached at:
  21. //    cristip@dundas.com
  22. //
  23. // More details at MFC Programmer's SourceBook
  24. // http://www.codeguru.com/docking/docking_window.shtml or search
  25. // www.codeguru.com for my name if the article was moved.
  26. //
  27. /////////////////////////////////////////////////////////////////////////
  28. #if !defined(__SIZECBAR_H__)
  29. #define __SIZECBAR_H__
  30. #include <afxpriv.h>    // for CDockContext
  31. #include <afxtempl.h>   // for CArray
  32. #if _MSC_VER >= 1000
  33. #pragma once
  34. #endif // _MSC_VER >= 1000
  35. /////////////////////////////////////////////////////////////////////////
  36. // CSCBButton (button info) helper class
  37. class CSCBButton
  38. {
  39. public:
  40.     CSCBButton();
  41.     void Move(CPoint ptTo) {ptOrg = ptTo; };
  42.     CRect GetRect() { return CRect(ptOrg, CSize(11, 11)); };
  43.     void Paint(CDC* pDC);
  44.     BOOL    bPushed;
  45.     BOOL    bRaised;
  46. protected:
  47.     CPoint  ptOrg;
  48. };
  49. /////////////////////////////////////////////////////////////////////////
  50. // CSCBDockBar dummy class for access to protected members
  51. class CSCBDockBar : public CDockBar
  52. {
  53.     friend class CSizingControlBar;
  54. };
  55. /////////////////////////////////////////////////////////////////////////
  56. // CSizingControlBar control bar styles
  57. #define SCBS_EDGELEFT       0x00000001
  58. #define SCBS_EDGERIGHT      0x00000002
  59. #define SCBS_EDGETOP        0x00000004
  60. #define SCBS_EDGEBOTTOM     0x00000008
  61. #define SCBS_EDGEALL        0x0000000F
  62. #define SCBS_SHOWEDGES      0x00000010
  63. #define SCBS_GRIPPER        0x00000020
  64. /////////////////////////////////////////////////////////////////////////
  65. // CSizingControlBar control bar
  66. #ifndef baseCSizingControlBar
  67. #define baseCSizingControlBar CControlBar
  68. #endif
  69. class CSizingControlBar;
  70. typedef CTypedPtrArray <CPtrArray, CSizingControlBar*> CSCBArray;
  71. class CSizingControlBar : public baseCSizingControlBar
  72. {
  73.     DECLARE_DYNAMIC(CSizingControlBar);
  74. // Construction
  75. protected:
  76.     CSizingControlBar();
  77. public:
  78.     virtual BOOL Create(LPCTSTR lpszWindowName, CWnd* pParentWnd,
  79.         CSize sizeDefault, BOOL bHasGripper, UINT nID,
  80.         DWORD dwStyle = WS_CHILD | WS_VISIBLE | CBRS_TOP);
  81. // Attributes
  82. public:
  83.     CSize m_szHorz;
  84.     CSize m_szVert;
  85.     CSize m_szFloat;
  86.     const BOOL IsFloating() const;
  87.     const BOOL IsHorzDocked() const;
  88.     const BOOL IsVertDocked() const;
  89.     const BOOL IsSideTracking() const;
  90. // Operations
  91. public:
  92.     virtual void LoadState(LPCTSTR lpszProfileName);
  93.     virtual void SaveState(LPCTSTR lpszProfileName);
  94.     static void GlobalLoadState(LPCTSTR lpszProfileName);
  95.     static void GlobalSaveState(LPCTSTR lpszProfileName);
  96. // Overridables
  97.     virtual void OnUpdateCmdUI(CFrameWnd* pTarget, BOOL bDisableIfNoHndler);
  98. // Overrides
  99. public:
  100.     // ClassWizard generated virtual function overrides
  101.     //{{AFX_VIRTUAL(CSizingControlBar)
  102.     public:
  103.     virtual CSize CalcFixedLayout(BOOL bStretch, BOOL bHorz);
  104.     virtual CSize CalcDynamicLayout(int nLength, DWORD dwMode);
  105.     virtual BOOL DestroyWindow();
  106.     //}}AFX_VIRTUAL
  107. // Implementation
  108. public:
  109.     virtual ~CSizingControlBar();
  110.     
  111. protected:
  112.     // implementation helpers
  113.     UINT GetEdgeHTCode(int nEdge);
  114.     BOOL GetEdgeRect(CRect rcWnd, UINT nHitTest, CRect& rcEdge);
  115.     virtual void StartTracking(UINT nHitTest);
  116.     virtual void StopTracking();
  117.     virtual void OnTrackUpdateSize(CPoint& point);
  118.     virtual void OnTrackInvertTracker();
  119.     virtual void NcPaintGripper(CDC* pDC, CRect rcClient);
  120.     virtual void AlignControlBars();
  121.     const int FindSizingBar(CControlBar* pBar) const;
  122.     void GetRowInfo(int& nFirst, int& nLast, int& nThis);
  123.     void GetRowSizingBars(CSCBArray& arrSCBars);
  124.     BOOL NegociateSpace(int nLengthAvail, BOOL bHorz);
  125. protected:
  126.     static CSCBArray    m_arrBars;
  127.     DWORD   m_dwSCBStyle;
  128.     UINT    m_htEdge;
  129.     CSize   m_szMin;
  130.     CSize   m_szMinT;
  131.     CSize   m_szMaxT;
  132.     CSize   m_szOld;
  133.     CPoint  m_ptOld;
  134.     BOOL    m_bTracking;
  135.     BOOL    m_bKeepSize;
  136.     BOOL    m_bParentSizing;
  137.     BOOL    m_bDragShowContent;
  138.     UINT    m_nDockBarID;
  139.     int     m_cxEdge;
  140.     int     m_cyGripper;
  141.     CSCBButton m_biHide;
  142. // Generated message map functions
  143. protected:
  144.     //{{AFX_MSG(CSizingControlBar)
  145.     afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
  146.     afx_msg void OnNcPaint();
  147.     afx_msg void OnNcCalcSize(BOOL bCalcValidRects, NCCALCSIZE_PARAMS FAR* lpncsp);
  148.     afx_msg UINT OnNcHitTest(CPoint point);
  149.     afx_msg void OnCaptureChanged(CWnd *pWnd);
  150.     afx_msg void OnSettingChange(UINT uFlags, LPCTSTR lpszSection);
  151.     afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
  152.     afx_msg void OnMouseMove(UINT nFlags, CPoint point);
  153.     afx_msg void OnNcLButtonDown(UINT nHitTest, CPoint point);
  154.     afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
  155.     afx_msg void OnLButtonDblClk(UINT nFlags, CPoint point);
  156.     afx_msg void OnRButtonDown(UINT nFlags, CPoint point);
  157.     afx_msg void OnNcLButtonUp(UINT nHitTest, CPoint point);
  158.     afx_msg void OnWindowPosChanging(WINDOWPOS FAR* lpwndpos);
  159.     afx_msg void OnPaint();
  160.     //}}AFX_MSG
  161.     DECLARE_MESSAGE_MAP()
  162. };
  163. #endif // !defined(__SIZECBAR_H__)