TabSheet.cpp
上传用户:tianjwyx
上传日期:2007-01-13
资源大小:813k
文件大小:2k
源码类别:

操作系统开发

开发平台:

Visual C++

  1. // TabSheet.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "OSDemo.h"
  5. #include "TabSheet.h"
  6. #ifdef _DEBUG
  7. #define new DEBUG_NEW
  8. #undef THIS_FILE
  9. static char THIS_FILE[] = __FILE__;
  10. #endif
  11. /////////////////////////////////////////////////////////////////////////////
  12. // CTabSheet
  13. CTabSheet::CTabSheet()
  14. {
  15. m_nNumOfPages = 0;
  16. m_nCurrentPage = 0;
  17. }
  18. CTabSheet::~CTabSheet()
  19. {
  20. }
  21. BEGIN_MESSAGE_MAP(CTabSheet, CTabCtrl)
  22. //{{AFX_MSG_MAP(CTabSheet)
  23. ON_WM_LBUTTONDOWN()
  24. //}}AFX_MSG_MAP
  25. END_MESSAGE_MAP()
  26. /////////////////////////////////////////////////////////////////////////////
  27. // CTabSheet message handlers
  28. BOOL CTabSheet::AddPage(LPCTSTR title, CDialog *pDialog,UINT ID)
  29. {
  30. if( MAXPAGE == m_nNumOfPages )
  31. return FALSE;
  32. m_nNumOfPages++;
  33. m_pPages[m_nNumOfPages-1] = pDialog;
  34. m_IDD[m_nNumOfPages-1] = ID;
  35. m_Title[m_nNumOfPages-1] = title;
  36. return TRUE;
  37. }
  38. void CTabSheet::SetRect()
  39. {
  40. CRect tabRect, itemRect;
  41. int nX, nY, nXc, nYc;
  42. GetClientRect(&tabRect);
  43. GetItemRect(0, &itemRect);
  44. nX=itemRect.left;
  45. nY=itemRect.bottom+1;
  46. nXc=tabRect.right-itemRect.left-2;
  47. nYc=tabRect.bottom-nY-2;
  48. m_pPages[0]->SetWindowPos(&wndTop, nX, nY, nXc, nYc, SWP_SHOWWINDOW);
  49. for( int nCount=1; nCount < m_nNumOfPages; nCount++ )
  50. m_pPages[nCount]->SetWindowPos(&wndTop, nX, nY, nXc, nYc, SWP_HIDEWINDOW);
  51. }
  52. void CTabSheet::Show()
  53. {
  54. for( int i=0; i < m_nNumOfPages; i++ )
  55. {
  56. m_pPages[i]->Create( m_IDD[i], this );
  57. InsertItem( i, m_Title[i] );
  58. }
  59. m_pPages[0]->ShowWindow(SW_SHOW);
  60. for( i=1; i < m_nNumOfPages; i++)
  61. m_pPages[i]->ShowWindow(SW_HIDE);
  62. SetRect();
  63. }
  64. void CTabSheet::OnLButtonDown(UINT nFlags, CPoint point) 
  65. {
  66. CTabCtrl::OnLButtonDown(nFlags, point);
  67. if(m_nCurrentPage != GetCurFocus())
  68. {
  69. m_pPages[m_nCurrentPage]->ShowWindow(SW_HIDE);
  70. m_nCurrentPage=GetCurFocus();
  71. m_pPages[m_nCurrentPage]->ShowWindow(SW_SHOW);
  72. // m_pPages[m_nCurrentPage]->SetFocus();
  73. }
  74. }
  75. int CTabSheet::SetCurSel(int nItem)
  76. {
  77. if( nItem < 0 || nItem >= m_nNumOfPages)
  78. return -1;
  79. int ret = m_nCurrentPage;
  80. if(m_nCurrentPage != nItem )
  81. {
  82. m_pPages[m_nCurrentPage]->ShowWindow(SW_HIDE);
  83. m_nCurrentPage = nItem;
  84. m_pPages[m_nCurrentPage]->ShowWindow(SW_SHOW);
  85. // m_pPages[m_nCurrentPage]->SetFocus();
  86. CTabCtrl::SetCurSel(nItem);
  87. }
  88. return ret;
  89. }
  90. int CTabSheet::GetCurSel()
  91. {
  92. return CTabCtrl::GetCurSel();
  93. }