ChildFrm.cpp
上传用户:st5609838
上传日期:2013-03-29
资源大小:66k
文件大小:4k
源码类别:

搜索引擎

开发平台:

Visual C++

  1. // ChildFrm.cpp : implementation of the CChildFrame class
  2. //
  3. #include "stdafx.h"
  4. #include "Spider.h"
  5. #include <afxpriv.h>
  6. #include "ThreadParams.h"
  7. #include "ChildFrm.h"
  8. #include "SpiderDoc.h"
  9. #include "SpiderList.h"
  10. #include "SpiderView.h"
  11. #ifdef _DEBUG
  12. #define new DEBUG_NEW
  13. #undef THIS_FILE
  14. static char THIS_FILE[] = __FILE__;
  15. #endif
  16. /////////////////////////////////////////////////////////////////////////////
  17. // CChildFrame
  18. IMPLEMENT_DYNCREATE(CChildFrame, CMDIChildWnd)
  19. BEGIN_MESSAGE_MAP(CChildFrame, CMDIChildWnd)
  20. //{{AFX_MSG_MAP(CChildFrame)
  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. //}}AFX_MSG_MAP
  24. ON_MESSAGE(WM_USER_LIST,OnView)
  25. END_MESSAGE_MAP()
  26. /////////////////////////////////////////////////////////////////////////////
  27. // CChildFrame construction/destruction
  28. CChildFrame::CChildFrame()
  29. {
  30. // TODO: add member initialization code here
  31. }
  32. CChildFrame::~CChildFrame()
  33. {
  34. }
  35. BOOL CChildFrame::PreCreateWindow(CREATESTRUCT& cs)
  36. {
  37. // TODO: Modify the Window class or styles here by modifying
  38. //  the CREATESTRUCT cs
  39. cs.style = WS_CHILD | WS_VISIBLE | WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU
  40. | FWS_ADDTOTITLE | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_MAXIMIZE;
  41. return CMDIChildWnd::PreCreateWindow(cs);
  42. }
  43. /////////////////////////////////////////////////////////////////////////////
  44. // CChildFrame diagnostics
  45. #ifdef _DEBUG
  46. void CChildFrame::AssertValid() const
  47. {
  48. CMDIChildWnd::AssertValid();
  49. }
  50. void CChildFrame::Dump(CDumpContext& dc) const
  51. {
  52. CMDIChildWnd::Dump(dc);
  53. }
  54. #endif //_DEBUG
  55. /////////////////////////////////////////////////////////////////////////////
  56. // CChildFrame message handlers
  57. BOOL CChildFrame::ReplaceView(CRuntimeClass * pViewClass)
  58. {
  59.   CCreateContext context;
  60.   CView * pCurrentView;    
  61.   
  62.   // if no active view for the frame, return FALSE because this 
  63.   // function retrieves the current document from the active view
  64.   if ((pCurrentView=GetActiveView())==NULL)
  65.      return FALSE;               
  66.   
  67.   // If we're already displaying this kind of view, no need to go 
  68.   // further. 
  69.   if ((pCurrentView->IsKindOf(pViewClass))==TRUE)
  70.      return TRUE;
  71.                                     
  72.    // Get pointer to CDocument object so that it can be used in the creation 
  73.    // process of the new view
  74.    CDocument * pDoc= pCurrentView->GetDocument();
  75.    
  76.     // set flag so that document will not be deleted when view is destroyed
  77.     BOOL bAutoDelete=pDoc->m_bAutoDelete;
  78.    pDoc->m_bAutoDelete=FALSE;    
  79.     // Delete existing view 
  80.     pCurrentView->DestroyWindow();
  81.     // restore flag  
  82.     pDoc->m_bAutoDelete=bAutoDelete;
  83.             
  84.             
  85.     // Create new view and redraw
  86.    
  87.    context.m_pNewViewClass=pViewClass;
  88.    context.m_pCurrentDoc=pDoc;
  89.    context.m_pNewDocTemplate=NULL;
  90.    context.m_pLastView=NULL;
  91.    context.m_pCurrentFrame=this;
  92.                              
  93.    CView * pNewView = (CView *) pViewClass->CreateObject();
  94.    if (pNewView == NULL)
  95. {
  96.      TRACE1("Warning: Dynamic create of view type %Fs failedn",
  97. pViewClass->m_lpszClassName);
  98. return FALSE;
  99. }
  100.     if (!pNewView->Create(NULL, NULL, AFX_WS_DEFAULT_VIEW,
  101. CRect(0,0,0,0), this, AFX_IDW_PANE_FIRST, &context))
  102. {
  103.      TRACE0("Warning: couldn't create view for framen");
  104. return FALSE;  // programmer can assume FALSE return value 
  105.                // from this function means that there 
  106.                //isn't a view
  107. }                                      
  108.    // WM_INITIALUPDATE is define in AFXPRIV.H
  109.    pNewView->SendMessage(WM_INITIALUPDATE, 0, 0); 
  110.    
  111.    RecalcLayout();                
  112.    
  113.    pNewView->UpdateWindow();
  114.    
  115.    SetActiveView(pNewView);
  116.    
  117.    return TRUE;
  118. }
  119. LRESULT CChildFrame::OnView(WPARAM wParam,LPARAM lParam) 
  120. {
  121. UINT nType = wParam;
  122. switch(nType)
  123. {
  124. case 1: ReplaceView(RUNTIME_CLASS(CSpiderList));
  125. break;
  126. case 0:
  127. default:  ReplaceView(RUNTIME_CLASS(CSpiderView));
  128. break;
  129. }
  130. return TRUE;
  131. }