RollupCtrl.h
上传用户:sunh8215
上传日期:2010-02-13
资源大小:1616k
文件大小:6k
源码类别:

酒店行业

开发平台:

Visual C++

  1. //////////////////////////////////////////////////////////////////////////////
  2. //
  3. // RollupCtrl.h
  4. // 
  5. // Code Johann Nadalutti
  6. // Mail: jnadalutti@worldonline.fr
  7. //
  8. //////////////////////////////////////////////////////////////////////////////
  9. //
  10. // This code is free for personal and commercial use, providing this 
  11. // notice remains intact in the source files and all eventual changes are
  12. // clearly marked with comments.
  13. //
  14. // No warrantee of any kind, express or implied, is included with this
  15. // software; use at your own risk, responsibility for damages (if any) to
  16. // anyone resulting from the use of this software rests entirely with the
  17. // user.
  18. //
  19. //////////////////////////////////////////////////////////////////////////////
  20. //
  21. // History
  22. // --------
  23. // #v1.0
  24. // 31/03/01: Created
  25. //
  26. // #v1.01
  27. // 13/04/01: Added ScrollToPage() method
  28. // Added automatic page visibility to ExpandPage() method
  29. // Added Mousewheel support
  30. // 15/04/01: Added mouse capture checking on WM_MOUSEMOVE dialog msg
  31. // Added SetCursor() on Dialog WM_SETCURSOR
  32. // Added MovePageAt() method
  33. // 17/04/01: Fixed Group Boxes displayed over Buttons
  34. // 20/04/01: Added IsPageExpanded() and IsPageExpanded() methods
  35. // Added PopupMenu
  36. // Added Button subclassing (now button's focus not drawn)
  37. //
  38. // Note
  39. // -----
  40. // Dialog box width is
  41. // RollupCtrlClientRect.Width() - RC_SCROLLBARWIDTH - (RC_GRPBOXINDENT*2)
  42. //
  43. //
  44. // Thanks to
  45. // ----------
  46. // PJ Arends, Ramon Smits, Uwe Keim, Daniel Madden, Do Quyet Tien,
  47. // Ravi Bhavnani, Masaaki Onishi, ...
  48. // and all others users for their comments.
  49. //
  50. /////////////////////////////////////////////////////////////////////////////
  51. #if !defined(AFX_ROLLUPCTRL_H__23BA7472_F13A_11D4_AC77_0050BADF98BC__INCLUDED_)
  52. #define AFX_ROLLUPCTRL_H__23BA7472_F13A_11D4_AC77_0050BADF98BC__INCLUDED_
  53. #if _MSC_VER > 1000
  54. #pragma once
  55. #endif // _MSC_VER > 1000
  56. /////////////////////////////////////////////////////////////////////////////
  57. // CRollupCtrl include
  58. #include <afxtempl.h>
  59. /////////////////////////////////////////////////////////////////////////////
  60. // CRollupCtrl structure and defines
  61. struct RC_PAGEINFO {
  62. CWnd* pwndTemplate;
  63. CButton* pwndButton;
  64. CButton* pwndGroupBox;
  65. BOOL bExpanded;
  66. BOOL bEnable;
  67. BOOL bAutoDestroyTpl;
  68. WNDPROC  pOldDlgProc; //Old wndTemplate(Dialog) window proc
  69. WNDPROC  pOldButProc; //Old wndTemplate(Dialog) window proc
  70. };
  71. #define RC_PGBUTTONHEIGHT 18
  72. #define RC_SCROLLBARWIDTH 6
  73. #define RC_GRPBOXINDENT 6
  74. #define RC_SCROLLBARCOLOR RGB(150,180,180)
  75. #define RC_ROLLCURSOR MAKEINTRESOURCE(32649) // see IDC_HAND (WINVER >= 0x0500)
  76. //Popup Menu Ids
  77. #define RC_IDM_EXPANDALL 0x100
  78. #define RC_IDM_COLLAPSEALL 0x101
  79. #define RC_IDM_STARTPAGES 0x102
  80. /////////////////////////////////////////////////////////////////////////////
  81. // CRollupCtrl class definition
  82. class CRollupCtrl : public CWnd
  83. {
  84. DECLARE_DYNCREATE(CRollupCtrl)
  85. public:
  86. // Constructor-Destructor
  87. CRollupCtrl();
  88. virtual ~CRollupCtrl();
  89. // Methods
  90. BOOL Create(DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID);
  91. int InsertPage(LPCTSTR caption, CDialog* pwndTemplate, BOOL bAutoDestroyTpl=TRUE, int idx=-1); //Return page zero-based index
  92. int InsertPage(LPCTSTR caption, UINT nIDTemplate, CRuntimeClass* rtc, int idx=-1); //Return page zero-based index
  93. void RemovePage(int idx); //idx is a zero-based index
  94. void RemoveAllPages();
  95. void ExpandPage(int idx, BOOL bExpand=TRUE); //idx is a zero-based index
  96. void ExpandAllPages(BOOL bExpand=TRUE);
  97. void EnablePage(int idx, BOOL bEnable=TRUE); //idx is a zero-based index
  98. void EnableAllPages(BOOL bEnable=TRUE);
  99. int GetPagesCount() { return m_PageList.GetSize(); }
  100. RC_PAGEINFO* GetPageInfo(int idx); //idx is a zero-based index
  101. // New v1.01 Methods
  102. void ScrollToPage(int idx, BOOL bAtTheTop=TRUE);
  103. int MovePageAt(int idx, int newidx); //newidx can be equal to -1 (move at end)
  104. BOOL IsPageExpanded(int idx);
  105. BOOL IsPageEnabled(int idx);
  106. protected:
  107. // Internal methods
  108. void RecalLayout();
  109. int GetPageIdxFromButtonHWND(HWND hwnd);
  110. void _RemovePage(int idx);
  111. void _ExpandPage(RC_PAGEINFO* pi, BOOL bExpand);
  112. void _EnablePage(RC_PAGEINFO* pi, BOOL bEnable);
  113. int _InsertPage(LPCTSTR caption, CDialog* dlg, int idx, BOOL bAutoDestroyTpl);
  114. // Datas
  115. CString m_strMyClass;
  116. CArray <RC_PAGEINFO*,RC_PAGEINFO*> m_PageList;
  117. int m_nStartYPos, m_nPageHeight;
  118. int m_nOldMouseYPos, m_nSBOffset;
  119. // Window proc
  120. static LRESULT CALLBACK DlgWindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
  121. static LRESULT CALLBACK ButWindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
  122. public:
  123. // Overrides
  124. // ClassWizard generated virtual function overrides
  125. //{{AFX_VIRTUAL(CRollupCtrl)
  126. protected:
  127. virtual BOOL OnCommand(WPARAM wParam, LPARAM lParam);
  128. //}}AFX_VIRTUAL
  129. // Generated message map functions
  130. protected:
  131. //{{AFX_MSG(CRollupCtrl)
  132. afx_msg void OnPaint();
  133. afx_msg void OnSize(UINT nType, int cx, int cy);
  134. afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
  135. afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
  136. afx_msg void OnMouseMove(UINT nFlags, CPoint point);
  137. afx_msg BOOL OnMouseWheel(UINT nFlags, short zDelta, CPoint pt);
  138. afx_msg int OnMouseActivate(CWnd* pDesktopWnd, UINT nHitTest, UINT message);
  139. afx_msg void OnContextMenu(CWnd* pWnd, CPoint point);
  140. //}}AFX_MSG
  141. DECLARE_MESSAGE_MAP()
  142. };
  143. /////////////////////////////////////////////////////////////////////////////
  144. #endif // !defined(AFX_ROLLUPCTRL_H__23BA7472_F13A_11D4_AC77_0050BADF98BC__INCLUDED_)