TabSheet.cpp
上传用户:dengkfang
上传日期:2008-12-30
资源大小:5233k
文件大小:3k
源码类别:

CA认证

开发平台:

Visual C++

  1. // TabSheet.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "TabSheet.h"
  5. #ifdef _DEBUG
  6. #define new DEBUG_NEW
  7. #undef THIS_FILE
  8. static char THIS_FILE[] = __FILE__;
  9. #endif
  10. /////////////////////////////////////////////////////////////////////////////
  11. // CTabSheet
  12. CTabSheet::CTabSheet()
  13. {
  14. m_nNumOfPages = 0;
  15. m_nCurrentPage = 0;
  16. }
  17. CTabSheet::~CTabSheet()
  18. {
  19. }
  20. BEGIN_MESSAGE_MAP(CTabSheet, CTabCtrl)
  21. //{{AFX_MSG_MAP(CTabSheet)
  22. ON_WM_LBUTTONDOWN()
  23. //}}AFX_MSG_MAP
  24. END_MESSAGE_MAP()
  25. /////////////////////////////////////////////////////////////////////////////
  26. // CTabSheet message handlers
  27. BOOL CTabSheet::AddPage(LPCTSTR title, UINT uImgIndex, CDialog *pDialog, UINT ID)
  28. {
  29. if( MAXPAGE == m_nNumOfPages )
  30. return FALSE;
  31. m_IDD[m_nNumOfPages] = ID;
  32. m_Title[m_nNumOfPages] = title;
  33. // pDialog->DestroyWindow();
  34. pDialog->Create(m_IDD[m_nNumOfPages], this->GetParent()); //经验 TAB改变标题,但是控件不隐藏的做法 this->GetParent()
  35. m_pPages[m_nNumOfPages] = pDialog;
  36. InsertItem( m_nNumOfPages, m_Title[m_nNumOfPages], uImgIndex);
  37. m_nNumOfPages++;
  38. return TRUE;
  39. }
  40. void CTabSheet::SetRect()
  41. {
  42. int cx, cy, x, y, nWidth, nHeight;;
  43. CRect tabRect, itemRect;
  44. GetItemRect (0, &itemRect);
  45. GetClientRect(&tabRect);
  46. cx = tabRect.Width();
  47. cy = tabRect.Height();
  48. DWORD dwStyle = GetStyle();
  49. if (dwStyle & TCS_VERTICAL) 
  50. { // Vertical tabs
  51. int nTabWidth = itemRect.Width () * GetRowCount ();
  52. x = (dwStyle & TCS_RIGHT) ? 4 : nTabWidth + 4;
  53. y = 4;
  54. nWidth = cx - nTabWidth - 8;
  55. nHeight = cy - 8;
  56. }
  57. else 
  58. { // Horizontal tabs
  59. int nTabHeight = itemRect.Height () * GetRowCount ();
  60. x = 4;
  61. y = (dwStyle & TCS_BOTTOM) ? 4 : nTabHeight + 4;
  62. nWidth = cx - 8;
  63. nHeight = cy - nTabHeight - 8;
  64. }
  65. m_pPages[0]->SetWindowPos(&wndTop, x, y, nWidth, nHeight, SWP_SHOWWINDOW ); 
  66. for( int nCount=1; nCount < m_nNumOfPages; nCount++ )
  67. m_pPages[nCount]->SetWindowPos(&wndTop, x, y, nWidth, nHeight, SWP_HIDEWINDOW);
  68. }
  69. void CTabSheet::Show()
  70. {
  71. SetRect();
  72. }
  73. void CTabSheet::OnLButtonDown(UINT nFlags, CPoint point) 
  74. {
  75. CTabCtrl::OnLButtonDown(nFlags, point);
  76. if(m_nCurrentPage != GetCurFocus())
  77. {
  78. m_pPages[m_nCurrentPage]->ShowWindow(SW_HIDE);
  79. m_nCurrentPage=GetCurFocus();
  80. m_pPages[m_nCurrentPage]->ShowWindow(SW_SHOW);
  81. // m_pPages[m_nCurrentPage]->SetFocus();
  82. }
  83. }
  84. int CTabSheet::SetCurSel(int nItem)
  85. {
  86. if( nItem < 0 || nItem >= m_nNumOfPages)
  87. return -1;
  88. int ret = m_nCurrentPage;
  89. if(m_nCurrentPage != nItem )
  90. {
  91. m_pPages[m_nCurrentPage]->ShowWindow(SW_HIDE);
  92. m_nCurrentPage = nItem;
  93. m_pPages[m_nCurrentPage]->ShowWindow(SW_SHOW);
  94. // m_pPages[m_nCurrentPage]->SetFocus();
  95. CTabCtrl::SetCurSel(nItem);
  96. }
  97. return ret;
  98. }
  99. int CTabSheet::GetCurSel()
  100. {
  101. return CTabCtrl::GetCurSel();
  102. }
  103. void CTabSheet::SetPageName(UINT uPageIndex, CString strTitle)
  104. {
  105. m_Title[uPageIndex] = strTitle;
  106. TC_ITEM tcItem;
  107. tcItem.mask = TCIF_TEXT | TCIF_RTLREADING;
  108. tcItem.pszText = (LPTSTR)((LPCTSTR)strTitle);
  109. BOOL b = SetItem(uPageIndex, &tcItem );
  110. }