ResizableDialog.h
上传用户:hjw22cn
上传日期:2007-01-11
资源大小:192k
文件大小:4k
源码类别:

Tab控件

开发平台:

Visual C++

  1. #if !defined(AFX_RESIZABLEDIALOG_H__INCLUDED_)
  2. #define AFX_RESIZABLEDIALOG_H__INCLUDED_
  3. #if _MSC_VER > 1000
  4. #pragma once
  5. #endif // _MSC_VER > 1000
  6. // ResizableDialog.h : header file
  7. //
  8. /////////////////////////////////////////////////////////////////////////////
  9. //
  10. // Copyright (C) 2000 by Paolo Messina
  11. // (ppescher@yahoo.com)
  12. //
  13. // Free for non-commercial use.
  14. // You may change the code to your needs,
  15. // provided that credits to the original 
  16. // author is given in the modified files.
  17. //  
  18. /////////////////////////////////////////////////////////////////////////////
  19. // useful compatibility constants (the only one required is NOANCHOR)
  20. #if !defined(__SIZE_ANCHORS_)
  21. #define __SIZE_ANCHORS_
  22. const CSize
  23. NOANCHOR(-1,-1),
  24. TOP_LEFT(0,0), TOP_CENTER(50,0), TOP_RIGHT(100,0),
  25. MIDDLE_LEFT(0,50), MIDDLE_CENTER(50,50), MIDDLE_RIGHT(100,50),
  26. BOTTOM_LEFT(0,100), BOTTOM_CENTER(50,100), BOTTOM_RIGHT(100,100);
  27. #endif // !defined(__SIZE_ANCHORS_)
  28. /////////////////////////////////////////////////////////////////////////////
  29. // CResizableDialog window
  30. class CResizableDialog : public CDialog
  31. {
  32. // Construction
  33. public:
  34. CResizableDialog();
  35. CResizableDialog(UINT nIDTemplate, CWnd* pParentWnd = NULL);
  36. CResizableDialog(LPCTSTR lpszTemplateName, CWnd* pParentWnd = NULL);
  37. // Attributes
  38. private:
  39. // flags
  40. BOOL m_bShowGrip;
  41. BOOL m_bUseMaxTrack;
  42. BOOL m_bUseMinTrack;
  43. BOOL m_bUseMaxRect;
  44. BOOL m_bEnableSaveRestore;
  45. // internal status
  46. CString m_sSection; // section name and
  47. CString m_sEntry; // entry for save/restore
  48. BOOL m_bInitDone; // if all internal vars initialized
  49. SIZE m_szGripSize; // set at construction time
  50. CRect m_rcGripRect; // current pos of grip
  51. POINT m_ptMinTrackSize; // min tracking size
  52. POINT m_ptMaxTrackSize; // max tracking size
  53. POINT m_ptMaxPos; // maximized position
  54. POINT m_ptMaxSize; // maximized size
  55. CPtrList m_plLayoutList; // list of repositionable controls
  56. class Layout
  57. {
  58. public:
  59. HWND hwnd;
  60. BOOL adj_hscroll;
  61. BOOL need_refresh;
  62. // upper-left corner
  63. SIZE tl_type;
  64. SIZE tl_margin;
  65. // bottom-right corner
  66. SIZE br_type;
  67. SIZE br_margin;
  68. public:
  69. Layout(HWND hw, SIZE tl_t, SIZE tl_m, 
  70. SIZE br_t, SIZE br_m, BOOL hscroll, BOOL refresh)
  71. {
  72. hwnd = hw;
  73. adj_hscroll = hscroll;
  74. need_refresh = refresh;
  75. tl_type = tl_t;
  76. tl_margin = tl_m;
  77. br_type = br_t;
  78. br_margin = br_m;
  79. };
  80. };
  81. // Operations
  82. public:
  83. // Overrides
  84. // ClassWizard generated virtual function overrides
  85. //{{AFX_VIRTUAL(CResizableDialog)
  86. //}}AFX_VIRTUAL
  87. // Implementation
  88. public:
  89. virtual ~CResizableDialog();
  90. // used internally
  91. private:
  92. void Construct();
  93. void LoadWindowRect();
  94. void SaveWindowRect();
  95. void ArrangeLayout();
  96. void UpdateGripPos();
  97. // callable from derived classes
  98. //protected:
  99. public:
  100. void AddAnchor(HWND wnd, CSize tl_type,
  101. CSize br_type = NOANCHOR); // add anchors to a control
  102. void AddAnchor(UINT ctrl_ID, CSize tl_type,
  103. CSize br_type = NOANCHOR) // add anchors to a control
  104. {
  105. AddAnchor(::GetDlgItem(*this, ctrl_ID), tl_type, br_type);
  106. };
  107. void ShowSizeGrip(BOOL bShow); // show or hide the size grip
  108. void SetMaximizedRect(const CRect& rc); // set window rect when maximized
  109. void ResetMaximizedRect(); // reset to default maximized rect
  110. void SetMinTrackSize(const CSize& size); // set minimum tracking size
  111. void ResetMinTrackSize(); // reset to default minimum tracking size
  112. void SetMaxTrackSize(const CSize& size); // set maximum tracking size
  113. void ResetMaxTrackSize(); // reset to default maximum tracking size
  114. void EnableSaveRestore(LPCTSTR pszSection, LPCTSTR pszEntry); // section and entry in app's profile
  115. // Generated message map functions
  116. protected:
  117. //{{AFX_MSG(CResizableDialog)
  118. virtual BOOL OnInitDialog();
  119. afx_msg UINT OnNcHitTest(CPoint point);
  120. afx_msg void OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI);
  121. afx_msg void OnSize(UINT nType, int cx, int cy);
  122. afx_msg void OnDestroy();
  123. afx_msg void OnPaint();
  124. //}}AFX_MSG
  125. DECLARE_MESSAGE_MAP()
  126. };
  127. /////////////////////////////////////////////////////////////////////////////
  128. //{{AFX_INSERT_LOCATION}}
  129. // Microsoft Visual C++ will insert additional declarations immediately before the previous line.
  130. #endif // !defined(AFX_RESIZABLEDIALOG_H__INCLUDED_)