MyTabCtrl.cpp
上传用户:yangxun008
上传日期:2008-03-25
资源大小:3863k
文件大小:3k
源码类别:

按钮控件

开发平台:

Visual C++

  1. // MyTabCtrl.cpp : implementation file
  2. //
  3. /////////////////////////////////////////////////////
  4. // This class is provided as is and Ben Hill takes no
  5. // responsibility for any loss of any kind in connection
  6. // to this code.
  7. /////////////////////////////////////////////////////
  8. // Is is meant purely as a educational tool and may
  9. // contain bugs.
  10. /////////////////////////////////////////////////////
  11. // ben@shido.fsnet.co.uk
  12. // http://www.shido.fsnet.co.uk
  13. /////////////////////////////////////////////////////
  14. // Thanks to a mystery poster in the C++ forum on 
  15. // www.codeguru.com I can't find your name to say thanks
  16. // for your Control drawing code. If you are that person 
  17. // thank you very much. I have been able to use some of 
  18. // you ideas to produce this sample application.
  19. /////////////////////////////////////////////////////
  20. #include "stdafx.h"
  21. #include "Resource.h"
  22. #include "MyTabCtrl.h"
  23. #include "DlgBasic.h"
  24. #include "DlgAdvanced.h"
  25. #include "DlgTransparent.h"
  26. #include "DlgShadeButtonST.h"
  27. #include "DlgAbout.h"
  28. #ifdef _DEBUG
  29. #define new DEBUG_NEW
  30. #undef THIS_FILE
  31. static char THIS_FILE[] = __FILE__;
  32. #endif
  33. /////////////////////////////////////////////////////////////////////////////
  34. // CMyTabCtrl
  35. CMyTabCtrl::CMyTabCtrl()
  36. {
  37. ::ZeroMemory(&m_tabPages, sizeof(m_tabPages));
  38. m_tabPages[0]=new CDlgBasic;
  39. m_tabPages[1]=new CDlgAdvanced;
  40. m_tabPages[2]=new CDlgTransparent;
  41. m_tabPages[3]=new CDlgShadeButtonST;
  42. m_tabPages[4]=new CDlgAbout;
  43. m_nNumberOfPages=5;
  44. }
  45. CMyTabCtrl::~CMyTabCtrl()
  46. {
  47. for(int nCount=0; nCount < m_nNumberOfPages; nCount++){
  48. delete m_tabPages[nCount];
  49. }
  50. }
  51. void CMyTabCtrl::Init()
  52. {
  53. m_tabCurrent=0;
  54. m_tabPages[0]->Create(IDD_BASIC, this);
  55. m_tabPages[1]->Create(IDD_ADVANCED, this);
  56. m_tabPages[2]->Create(IDD_TRANSPARENT, this);
  57. m_tabPages[3]->Create(IDD_SHADED, this);
  58. m_tabPages[4]->Create(IDD_ABOUT, this);
  59. m_tabPages[0]->ShowWindow(SW_SHOW);
  60. m_tabPages[1]->ShowWindow(SW_HIDE);
  61. m_tabPages[2]->ShowWindow(SW_HIDE);
  62. m_tabPages[3]->ShowWindow(SW_HIDE);
  63. m_tabPages[4]->ShowWindow(SW_HIDE);
  64. SetRectangle();
  65. }
  66. void CMyTabCtrl::SetRectangle()
  67. {
  68. CRect tabRect, itemRect;
  69. int nX, nY, nXc, nYc;
  70. GetClientRect(&tabRect);
  71. GetItemRect(0, &itemRect);
  72. nX=itemRect.left;
  73. nY=itemRect.bottom+1;
  74. nXc=tabRect.right-itemRect.left-1;
  75. nYc=tabRect.bottom-nY-1;
  76. m_tabPages[0]->SetWindowPos(&wndTop, nX, nY, nXc, nYc, SWP_SHOWWINDOW);
  77. for(int nCount=1; nCount < m_nNumberOfPages; nCount++){
  78. m_tabPages[nCount]->SetWindowPos(&wndTop, nX, nY, nXc, nYc, SWP_HIDEWINDOW);
  79. }
  80. }
  81. BEGIN_MESSAGE_MAP(CMyTabCtrl, CTabCtrl)
  82. //{{AFX_MSG_MAP(CMyTabCtrl)
  83. ON_WM_LBUTTONDOWN()
  84. //}}AFX_MSG_MAP
  85. END_MESSAGE_MAP()
  86. /////////////////////////////////////////////////////////////////////////////
  87. // CMyTabCtrl message handlers
  88. void CMyTabCtrl::OnLButtonDown(UINT nFlags, CPoint point) 
  89. {
  90. CTabCtrl::OnLButtonDown(nFlags, point);
  91. if(m_tabCurrent != GetCurFocus()){
  92. m_tabPages[m_tabCurrent]->ShowWindow(SW_HIDE);
  93. m_tabCurrent=GetCurFocus();
  94. m_tabPages[m_tabCurrent]->ShowWindow(SW_SHOW);
  95. m_tabPages[m_tabCurrent]->SetFocus();
  96. }
  97. }