STabCtrl.h
上传用户:shqgfm2
上传日期:2013-03-07
资源大小:13k
文件大小:4k
源码类别:

Tab控件

开发平台:

Visual C++

  1. #ifndef INC_STABCTRL
  2. #define INC_STABCTRL
  3. #include <afxtempl.h>
  4. // STabCtrl.h : header file
  5. //
  6. /////////////////////////////////////////////////////////////////////////////
  7. // CSTabCtrl window
  8. //
  9. // Implements a tab control that automatically handles the showing and hiding
  10. // of objects attached to a tab's various pages eliminating the need to do so
  11. // via the ON_NOTIFY(TCN_SELCHANGE... ) message.
  12. //
  13. // 1. Simply replace any instance of a CTabCtrl with CSTabCtrl,
  14. // initialize it as you would an MFC CTabCtrl.
  15. // 2. Use the AttachControlToTab member to attach you objects 
  16. // to the various avaliable pages.
  17. // 
  18. // 3. (optional) Use the SetCurSel member to programaticly show
  19. // a tabs particular page.
  20. //
  21. // Once done the tab control will show and hide the attached objects depending
  22. // on the users tab selection.
  23. // example of CSTabCtrl's use.
  24. //
  25. //
  26. /*
  27. // file : SomeDialogClass.h
  28. class CSomeDialogClass : public CDialog
  29. {
  30. CSTabCtrl m_TabCtrl;
  31. CTreeCtrl m_TreeCtrl;
  32. CListCtrl m_ListCtrl;
  33. CComboBox m_ComboCtrl;
  34. virtual BOOL OnInitDialog();
  35. };
  36. // file : SomeDialogClass.cpp
  37. BOOL CSomeDialogClass::OnInitDialog()
  38. {
  39. CDialog::OnInitDialog();
  40. ////////////////////////////////////////////////////////
  41. // set up tabs.
  42. PSTR pszTabItems[] =
  43. {
  44. "Tab Sheet 1 : Tree control",
  45. "Tab Sheet 2 : List control",
  46. "Tab Sheet 3 : Combobox control",
  47. NULL
  48. };
  49. TC_ITEM tcItem;
  50. for(INT i = 0;
  51. pszTabItems[i] != NULL;
  52. i++)
  53. {
  54. tcItem.mask = TCIF_TEXT;
  55. tcItem.pszText = pszTabItems[i];
  56. tcItem.cchTextMax = strlen(pszTabItems[i]);
  57. m_TabCtrl.InsertItem(i,&tcItem);
  58. }
  59. // attach controls to tabs pages.
  60. m_TabCtrl.AttachControlToTab(&m_TreeCtrl,0); // attach tree control to first page
  61. m_TabCtrl.AttachControlToTab(&m_ListCtrl,1); // attach list control to second page
  62. m_TabCtrl.AttachControlToTab(&m_ComboCtrl,2); // attach combo box control to third page
  63. // initialize tab to first page.
  64. m_TabCtrl.SetCurSel(0);
  65. ////////////////////////////////////////////////////////
  66. }
  67.  */
  68. class CSTabCtrl : public CTabCtrl
  69. {
  70. // Construction
  71. public:
  72. CSTabCtrl();
  73. // Attributes
  74. public:
  75. // Operations
  76. public:
  77. // Overrides
  78. // ClassWizard generated virtual function overrides
  79. //{{AFX_VIRTUAL(CSTabCtrl)
  80. //}}AFX_VIRTUAL
  81. // Implementation
  82. public:
  83. virtual ~CSTabCtrl();
  84. virtual BOOL AttachControlToTab(CWnd * _pControl,INT _nTabNum);
  85. virtual SetCurSel( int nItem );
  86. // Generated message map functions
  87. protected:
  88. //{{AFX_MSG(CSTabCtrl)
  89. afx_msg BOOL OnSelchange(NMHDR* pNMHDR, LRESULT* pResult);
  90. afx_msg void OnDestroy();
  91. afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
  92. afx_msg void OnEnable( BOOL bEnable );
  93. //}}AFX_MSG
  94. DECLARE_MESSAGE_MAP()
  95. private:
  96. class CSTabPage
  97. {
  98. private:
  99. CList <CWnd *, CWnd *> m_ControlList;
  100. public:
  101. CSTabPage();
  102. ~CSTabPage();
  103. BOOL AttachControl (CWnd * _pControl);
  104. BOOL ShowWindows ( INT _nCmdShow );
  105. BOOL EnableWindows ( BOOL _bEnable );
  106. };
  107. class CPageToControlsMap : public CMap <INT, INT&,CSTabPage *, CSTabPage *>
  108. {
  109. public:
  110. CPageToControlsMap( );
  111. ~CPageToControlsMap( );
  112. BOOL AttachControl(INT _nTabNum,CWnd * _pControl);
  113. BOOL ShowWindows ( INT _nCurrPage, INT _nCmdShow );
  114. BOOL EnableWindows ( INT _nCurrPage, BOOL _bEnable );
  115. void RemoveAll( );
  116. };
  117. INT m_nPrevSel;
  118. CPageToControlsMap m_TabPagesMap;
  119. };
  120. #endif // INC_STABCTRL
  121. /////////////////////////////////////////////////////////////////////////////