MainFrm.cpp
上传用户:sz86035077
上传日期:2013-02-27
资源大小:40k
文件大小:4k
源码类别:

Tab控件

开发平台:

Visual C++

  1. // MainFrm.cpp : implementation of the CMainFrame class
  2. //
  3. #include "stdafx.h"
  4. #include "Tab.h"
  5. #include "MainFrm.h"
  6. #include "DownloadView.h"
  7. #include "ProxyView.h"
  8. #include "DetectView.h"
  9. #include "TabDoc.h"
  10. #include "TabView.h"
  11. #ifdef _DEBUG
  12. #define new DEBUG_NEW
  13. #undef THIS_FILE
  14. static char THIS_FILE[] = __FILE__;
  15. #endif
  16. /////////////////////////////////////////////////////////////////////////////
  17. // CMainFrame
  18. IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)
  19. BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
  20. //{{AFX_MSG_MAP(CMainFrame)
  21. // NOTE - the ClassWizard will add and remove mapping macros here.
  22. //    DO NOT EDIT what you see in these blocks of generated code !
  23. ON_WM_CREATE()
  24. //}}AFX_MSG_MAP
  25. END_MESSAGE_MAP()
  26. static UINT indicators[] =
  27. {
  28. ID_SEPARATOR,           // status line indicator
  29. ID_INDICATOR_CAPS,
  30. ID_INDICATOR_NUM,
  31. ID_INDICATOR_SCRL,
  32. };
  33. /////////////////////////////////////////////////////////////////////////////
  34. // CMainFrame construction/destruction
  35. CMainFrame::CMainFrame()
  36. {
  37. // TODO: add member initialization code here
  38. m_nCurrentID=0;
  39. }
  40. CMainFrame::~CMainFrame()
  41. {
  42. }
  43. int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
  44. {
  45. if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
  46. return -1;
  47. if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
  48. | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
  49. !m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
  50. {
  51. TRACE0("Failed to create toolbarn");
  52. return -1;      // fail to create
  53. }
  54. if (!m_wndStatusBar.Create(this) ||
  55. !m_wndStatusBar.SetIndicators(indicators,
  56.   sizeof(indicators)/sizeof(UINT)))
  57. {
  58. TRACE0("Failed to create status barn");
  59. return -1;      // fail to create
  60. }
  61. // TODO: Delete these three lines if you don't want the toolbar to
  62. //  be dockable
  63. m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
  64. EnableDocking(CBRS_ALIGN_ANY);
  65. DockControlBar(&m_wndToolBar);
  66. return 0;
  67. }
  68. BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
  69. {
  70. if( !CFrameWnd::PreCreateWindow(cs) )
  71. return FALSE;
  72. // TODO: Modify the Window class or styles here by modifying
  73. //  the CREATESTRUCT cs
  74. return TRUE;
  75. }
  76. /////////////////////////////////////////////////////////////////////////////
  77. // CMainFrame diagnostics
  78. #ifdef _DEBUG
  79. void CMainFrame::AssertValid() const
  80. {
  81. CFrameWnd::AssertValid();
  82. }
  83. void CMainFrame::Dump(CDumpContext& dc) const
  84. {
  85. CFrameWnd::Dump(dc);
  86. }
  87. #endif //_DEBUG
  88. /////////////////////////////////////////////////////////////////////////////
  89. // CMainFrame message handlers
  90. BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) 
  91. {
  92. // TODO: Add your specialized code here and/or call the base class
  93. if(!m_tabView.CreateStatic(this))
  94. {
  95. TRACE0("failed to createpropertysheetn");
  96. return false;
  97. }
  98. //CRuntimeClass* pNewViewClass = RUNTIME_CLASS(CDownloadView);
  99. CRuntimeClass* pNewViewClass = RUNTIME_CLASS(CTabView);
  100. m_tabView.SetTab(0);
  101. CSize size(160, 180);
  102. if (!m_tabView.CreateView(pNewViewClass, size, pContext))
  103. {
  104. TRACE0("failed to create first panen");
  105. return false;
  106. }
  107. SetActiveView(m_tabView.GetActiveView());
  108. //Invalidate();
  109. return TRUE;
  110. // return CFrameWnd::OnCreateClient(lpcs, pContext);
  111. }
  112. void CMainFrame::HandleTabs(int sel)
  113. {
  114. if (sel == m_nCurrentID)
  115. return;  // already selected
  116. CView* pOldActiveView = GetActiveView();
  117. ::SetWindowLong(pOldActiveView->m_hWnd, GWL_ID, m_nCurrentID);
  118. CRuntimeClass* pNewViewClass;
  119. switch (sel)
  120. {
  121. case 0:
  122. pNewViewClass = RUNTIME_CLASS(CTabView);
  123. break;
  124. case 1:
  125. pNewViewClass = RUNTIME_CLASS(CProxyView);
  126. break;
  127. case 2:
  128. pNewViewClass = RUNTIME_CLASS(CDetectView);
  129. break;
  130. default:
  131. ASSERT(0);
  132. return;
  133. }
  134. // create the new view
  135. CCreateContext context;
  136. context.m_pNewViewClass = pNewViewClass;
  137. context.m_pCurrentDoc = GetActiveDocument();
  138. CView* pNewView = m_tabView.CreateView(pNewViewClass, CSize(100,100), &context);//sunxin
  139. if (pNewView != NULL)
  140. {
  141. // the new view is there, but invisible and not active...
  142. pNewView->ShowWindow(SW_SHOW);
  143. pNewView->OnInitialUpdate();
  144. SetActiveView(pNewView);
  145. m_tabView.RecalcLayout(); //sunxin
  146. RecalcLayout();
  147. m_nCurrentID = sel;
  148. // finally destroy the old view...
  149. pOldActiveView->DestroyWindow();
  150. }
  151. }