ExtSplitterWnd.h
上传用户:sesekoo
上传日期:2020-07-18
资源大小:21543k
文件大小:8k
源码类别:

界面编程

开发平台:

Visual C++

  1. // This is part of the Professional User Interface Suite library.
  2. // Copyright (C) 2001-2009 FOSS Software, Inc.
  3. // All rights reserved.
  4. //
  5. // http://www.prof-uis.com
  6. // mailto:support@prof-uis.com
  7. //
  8. // This source code can be used, modified and redistributed
  9. // under the terms of the license agreement that is included
  10. // in the Professional User Interface Suite package.
  11. //
  12. // Warranties and Disclaimers:
  13. // THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND
  14. // INCLUDING, BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY,
  15. // FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
  16. // IN NO EVENT WILL FOSS SOFTWARE INC. BE LIABLE FOR ANY DIRECT,
  17. // INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES,
  18. // INCLUDING DAMAGES FOR LOSS OF PROFITS, LOSS OR INACCURACY OF DATA,
  19. // INCURRED BY ANY PERSON FROM SUCH PERSON'S USAGE OF THIS SOFTWARE
  20. // EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
  21. #if (!defined __EXT_SPLITTER_WND_H)
  22. #define __EXT_SPLITTER_WND_H
  23. #if (!defined __EXT_MFC_NO_SPLITTER_WND)
  24. #if _MSC_VER >= 1000
  25. #pragma once
  26. #endif // _MSC_VER >= 1000
  27. #if (!defined __EXT_MFC_DEF_H)
  28. #include <ExtMfcDef.h>
  29. #endif // __EXT_MFC_DEF_H
  30. /////////////////////////////////////////////////////////////////////////////
  31. // CExtSplitterBaseWnd
  32. class __PROF_UIS_API CExtSplitterBaseWnd
  33. : public CSplitterWnd
  34. , public CExtPmBridge
  35. {
  36. public:
  37. DECLARE_DYNCREATE( CExtSplitterBaseWnd );
  38. DECLARE_CExtPmBridge_MEMBERS( CExtSplitterBaseWnd );
  39. CExtSplitterBaseWnd();
  40. virtual ~CExtSplitterBaseWnd();
  41. COLORREF m_clrBackground;
  42. virtual COLORREF OnQueryBackgroundColor() const;
  43. enum HitTestValue
  44. {
  45. noHit                   = 0,
  46. vSplitterBox            = 1,
  47. hSplitterBox            = 2,
  48. bothSplitterBox         = 3,
  49. vSplitterBar1           = 101,
  50. vSplitterBar15          = 115,
  51. hSplitterBar1           = 201,
  52. hSplitterBar15          = 215,
  53. splitterIntersection1   = 301,
  54. splitterIntersection225 = 525
  55. };
  56. static HCURSOR g_split_hcurLast;
  57. static HCURSOR g_split_hcurDestroy;
  58. static UINT g_split_idcPrimaryLast;
  59. static int stat_CanSplitRowCol( CRowColInfo * pInfoBefore, int nBeforeSize, int nSizeSplitter );
  60. static void stat_LayoutRowCol( CRowColInfo * pInfoArray, int nMax, int nSize, int nSizeSplitter );
  61. static void stat_DeferClientPos( AFX_SIZEPARENTPARAMS* lpLayout, CWnd * pWnd, int x, int y, int cx, int cy, BOOL bScrollBar );
  62. class __PROF_UIS_API friently_view_t : public CView
  63. {
  64. public:
  65. friend class CExtSplitterBaseWnd;
  66. };
  67. #ifdef _DEBUG
  68. virtual void AssertValid() const;
  69. virtual void Dump( CDumpContext & dc ) const;
  70. #endif
  71. virtual BOOL Create(
  72. CWnd * pParentWnd,
  73. int nMaxRows,
  74. int nMaxCols,
  75. SIZE sizeMin,
  76. CCreateContext * pContext,
  77. DWORD dwStyle = WS_CHILD|WS_VISIBLE|WS_CLIPCHILDREN|WS_CLIPSIBLINGS|WS_HSCROLL|WS_VSCROLL|SPLS_DYNAMIC_SPLIT,
  78. UINT nID = AFX_IDW_PANE_FIRST
  79. );
  80. virtual BOOL CreateStatic(
  81. CWnd * pParentWnd,
  82. int nRows,
  83. int nCols,
  84. DWORD dwStyle = WS_CHILD|WS_VISIBLE|WS_CLIPCHILDREN|WS_CLIPSIBLINGS,
  85. UINT nID = AFX_IDW_PANE_FIRST
  86. );
  87. virtual BOOL CreateView(
  88. int row,
  89. int col,
  90. CRuntimeClass * pViewClass,
  91. SIZE sizeInit,
  92. CCreateContext * pContext
  93. );
  94. virtual int GetRowCount() const { return m_nRows; }
  95. virtual int GetColumnCount() const { return m_nCols; }
  96. virtual void GetRowInfo( int row, int & cyCur, int & cyMin ) const;
  97. virtual void SetRowInfo( int row, int cyIdeal, int cyMin );
  98. virtual void GetColumnInfo( int col, int & cxCur, int & cxMin ) const;
  99. virtual void SetColumnInfo( int col, int cxIdeal, int cxMin );
  100. virtual DWORD GetScrollStyle() const;
  101. virtual void SetScrollStyle( DWORD dwStyle );
  102. virtual CWnd * GetPane(int row, int col) const;
  103. virtual BOOL IsChildPane( CWnd * pWnd, int * pRow, int * pCol );
  104. virtual BOOL IsChildPane( CWnd * pWnd, int & row, int & col ) { return IsChildPane(pWnd, &row, &col); }
  105. virtual int IdFromRowCol( int row, int col ) const;
  106. virtual BOOL IsTracking() { return m_bTracking; }
  107. virtual void RecalcLayout();
  108. virtual BOOL CreateScrollBarCtrl( DWORD dwStyle, UINT nID );
  109. virtual void DeleteView( int row, int col );
  110. virtual BOOL SplitRow( int cyBefore );
  111. virtual BOOL SplitColumn( int cxBefore );
  112. virtual void DeleteRow( int rowDelete );
  113. virtual void DeleteColumn( int colDelete );
  114. virtual CWnd * GetActivePane( int * pRow = NULL, int * pCol = NULL );
  115. virtual void SetActivePane( int row, int col, CWnd * pWnd = NULL );
  116. virtual BOOL CanActivateNext( BOOL bPrev = FALSE );
  117. virtual void ActivateNext( BOOL bPrev = FALSE );
  118. virtual BOOL DoKeyboardSplit();
  119. virtual BOOL DoScroll( CView * pViewFrom, UINT nScrollCode, BOOL bDoScroll = TRUE );
  120. virtual BOOL DoScrollBy( CView * pViewFrom, CSize sizeScroll, BOOL bDoScroll = TRUE );
  121. protected:
  122. virtual void OnDrawSplitter( CDC * pDC, ESplitType nType, const CRect & rect );
  123. virtual void OnInvertTracker( const CRect & rect );
  124. CWnd * GetActivePane( int & row, int & col ) { return GetActivePane( &row, &col ); }
  125. // CRuntimeClass * m_pDynamicViewClass;
  126. // int m_nMaxRows, m_nMaxCols, m_cxSplitter, m_cySplitter, m_cxBorderShare, m_cyBorderShare,
  127. // m_cxSplitterGap, m_cySplitterGap, m_cxBorder, m_cyBorder, m_nRows, m_nCols, m_htTrack;
  128. // BOOL m_bHasHScroll, m_bHasVScroll, m_bTracking, m_bTracking2;
  129. // CRowColInfo * m_pColInfo, m_pRowInfo;
  130. // CPoint m_ptTrackOffset;
  131. // CRect m_rectLimit, m_rectTracker, m_rectTracker2;
  132. virtual BOOL CreateCommon( CWnd * pParentWnd, SIZE sizeMin, DWORD dwStyle, UINT nID );
  133. virtual int HitTest( CPoint pt ) const;
  134. virtual void GetInsideRect( CRect & rect ) const;
  135. virtual void GetHitRect( int ht, CRect & rect );
  136. virtual void TrackRowSize( int y, int row );
  137. virtual void TrackColumnSize( int x, int col );
  138. virtual void DrawAllSplitBars( CDC * pDC, int cxInside, int cyInside );
  139. virtual void SetSplitCursor( int ht );
  140. virtual CWnd * GetSizingParent();
  141. virtual void StartTracking( int ht );
  142. virtual void StopTracking( BOOL bAccept );
  143. virtual BOOL OnCommand( WPARAM wParam, LPARAM lParam );
  144. virtual BOOL OnNotify( WPARAM wParam, LPARAM lParam, LRESULT * pResult );
  145. //{{AFX_MSG(CExtSplitterBaseWnd)
  146. afx_msg BOOL OnSetCursor( CWnd * pWnd, UINT nHitTest, UINT message );
  147. afx_msg void OnMouseMove( UINT nFlags, CPoint pt);
  148. afx_msg void OnPaint();
  149. afx_msg void OnLButtonDown( UINT nFlags, CPoint pt );
  150. afx_msg void OnLButtonDblClk( UINT nFlags, CPoint pt );
  151. afx_msg void OnLButtonUp( UINT nFlags, CPoint pt );
  152. afx_msg void OnCancelMode();
  153. afx_msg void OnKeyDown( UINT nChar, UINT nRepCnt, UINT nFlags );
  154. afx_msg void OnSize( UINT nType, int cx, int cy);
  155. afx_msg void OnHScroll( UINT nSBCode, UINT nPos, CScrollBar * pScrollBar );
  156. afx_msg void OnVScroll( UINT nSBCode, UINT nPos, CScrollBar * pScrollBar );
  157. afx_msg BOOL OnMouseWheel( UINT nFlags, short zDelta, CPoint pt );
  158. afx_msg BOOL OnNcCreate( LPCREATESTRUCT lpcs );
  159. afx_msg void OnSysCommand( UINT nID, LPARAM lParam );
  160. //}}AFX_MSG
  161. afx_msg void OnDisplayChange();
  162. afx_msg LRESULT OnNextDlgCtrl( WPARAM wParam, LPARAM lParam );
  163. DECLARE_MESSAGE_MAP()
  164. };
  165. /////////////////////////////////////////////////////////////////////////////
  166. // CExtSplitterWnd
  167. class __PROF_UIS_API CExtSplitterWnd : public CExtSplitterBaseWnd
  168. {
  169. public:
  170. DECLARE_DYNCREATE( CExtSplitterWnd );
  171. CExtSplitterWnd();
  172. virtual ~CExtSplitterWnd();
  173. protected:
  174. virtual void DrawAllSplitBars(
  175. CDC * pDC,
  176. int cxInside,
  177. int cyInside
  178. );
  179. virtual void OnDrawSplitter(
  180. CDC* pDC,
  181. ESplitType nType,
  182. const CRect & rectArg
  183. );
  184. virtual void OnInvertTracker(
  185. const CRect & rect
  186. );
  187. public:
  188. virtual BOOL CreateScrollBarCtrl( DWORD dwStyle, UINT nID );
  189. //{{AFX_VIRTUAL(CExtSplitterWnd)
  190. //}}AFX_VIRTUAL
  191. protected:
  192. //{{AFX_MSG(CExtSplitterWnd)
  193. afx_msg void OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
  194. afx_msg void OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
  195. //}}AFX_MSG
  196. DECLARE_MESSAGE_MAP()
  197. }; // class CExtSplitterWnd
  198. #endif // (!defined __EXT_MFC_NO_SPLITTER_WND)
  199. #endif // !defined(__EXT_SPLITTER_WND_H)