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

Tab控件

开发平台:

Visual C++

  1. #if !defined(AFX_RESIZABLEPAGE_H__INCLUDED_)
  2. #define AFX_RESIZABLEPAGE_H__INCLUDED_
  3. #if _MSC_VER > 1000
  4. #pragma once
  5. #endif // _MSC_VER > 1000
  6. // ResizablePage.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. // CResizablePage window
  30. class CResizablePage : public CPropertyPage
  31. {
  32. DECLARE_DYNCREATE(CResizablePage)
  33. // Construction
  34. public:
  35. CResizablePage();
  36. CResizablePage(UINT nIDTemplate, UINT nIDCaption = 0);
  37. CResizablePage(LPCTSTR lpszTemplateName, UINT nIDCaption = 0);
  38. // Attributes
  39. public:
  40. private:
  41. // internal status
  42. CString m_sSection; // section name and
  43. CString m_sEntry; // entry for save/restore
  44. BOOL m_bInitDone; // if all internal vars initialized
  45. CPtrList m_plLayoutList; // list of repositionable controls
  46. class Layout
  47. {
  48. public:
  49. HWND hwnd;
  50. BOOL adj_hscroll;
  51. BOOL need_refresh;
  52. // upper-left corner
  53. SIZE tl_type;
  54. SIZE tl_margin;
  55. // bottom-right corner
  56. SIZE br_type;
  57. SIZE br_margin;
  58. public:
  59. Layout(HWND hw, SIZE tl_t, SIZE tl_m, 
  60. SIZE br_t, SIZE br_m, BOOL hscroll, BOOL refresh)
  61. {
  62. hwnd = hw;
  63. adj_hscroll = hscroll;
  64. need_refresh = refresh;
  65. tl_type = tl_t;
  66. tl_margin = tl_m;
  67. br_type = br_t;
  68. br_margin = br_m;
  69. };
  70. };
  71. // Operations
  72. public:
  73. // Overrides
  74. // ClassWizard generated virtual function overrides
  75. //{{AFX_VIRTUAL(CResizablePage)
  76. //}}AFX_VIRTUAL
  77. // Implementation
  78. public:
  79. virtual ~CResizablePage();
  80. // used internally
  81. private:
  82. void Construct();
  83. void ArrangeLayout();
  84. // callable from derived classes
  85. protected:
  86. void AddAnchor(HWND wnd, CSize tl_type,
  87. CSize br_type = NOANCHOR); // add anchors to a control
  88. void AddAnchor(UINT ctrl_ID, CSize tl_type,
  89. CSize br_type = NOANCHOR) // add anchors to a control
  90. {
  91. AddAnchor(::GetDlgItem(*this, ctrl_ID), tl_type, br_type);
  92. };
  93. // Generated message map functions
  94. protected:
  95. //{{AFX_MSG(CResizablePage)
  96. virtual BOOL OnInitDialog();
  97. afx_msg void OnSize(UINT nType, int cx, int cy);
  98. //}}AFX_MSG
  99. DECLARE_MESSAGE_MAP()
  100. };
  101. /////////////////////////////////////////////////////////////////////////////
  102. //{{AFX_INSERT_LOCATION}}
  103. // Microsoft Visual C++ will insert additional declarations immediately before the previous line.
  104. #endif // !defined(AFX_RESIZABLEPAGE_H__INCLUDED_)