ChildFrm.cpp
上传用户:sesekoo
上传日期:2020-07-18
资源大小:21543k
文件大小:4k
源码类别:

界面编程

开发平台:

Visual C++

  1. // ChildFrm.cpp : implementation of the CChildFrame class
  2. //
  3. #include "stdafx.h"
  4. #include "MthOutput.h"
  5. #include "ChildFrm.h"
  6. #include "MainFrm.h"
  7. #ifdef _DEBUG
  8. #define new DEBUG_NEW
  9. #undef THIS_FILE
  10. static char THIS_FILE[] = __FILE__;
  11. #endif
  12. /////////////////////////////////////////////////////////////////////////////
  13. // CChildFrame
  14. IMPLEMENT_DYNCREATE( CChildFrame, CMDIChildWnd )
  15. BEGIN_MESSAGE_MAP( CChildFrame, CMDIChildWnd )
  16. //{{AFX_MSG_MAP(CChildFrame)
  17. ON_COMMAND(ID_FILE_CLOSE, OnFileClose)
  18. ON_WM_SETFOCUS()
  19. ON_WM_CREATE()
  20. //}}AFX_MSG_MAP
  21. END_MESSAGE_MAP()
  22. /////////////////////////////////////////////////////////////////////////////
  23. // CChildFrame construction/destruction
  24. CChildFrame::CChildFrame()
  25. {
  26. // TODO: add member initialization code here
  27. m_hChildFrameIcon = NULL;
  28. HINSTANCE hInstResource =
  29. AfxFindResourceHandle(
  30. MAKEINTRESOURCE(IDR_MDITYPE),
  31. RT_GROUP_ICON
  32. );
  33. ASSERT( hInstResource != NULL );
  34. if( hInstResource != NULL )
  35. {
  36. m_hChildFrameIcon =
  37. (HICON)::LoadImage(
  38. hInstResource,
  39. MAKEINTRESOURCE(IDR_MDITYPE),
  40. IMAGE_ICON,
  41. 16,
  42. 16,
  43. 0
  44. );
  45. ASSERT( m_hChildFrameIcon != NULL );
  46. }
  47. }
  48. CChildFrame::~CChildFrame()
  49. {
  50. if( m_hChildFrameIcon != NULL )
  51. {
  52. ::DestroyIcon( m_hChildFrameIcon );
  53. }
  54. }
  55. BOOL CChildFrame::PreCreateWindow(CREATESTRUCT& cs)
  56. {
  57. // TODO: Modify the Window class or styles here by modifying
  58. //  the CREATESTRUCT cs
  59. if( ! CExtNCW < CMDIChildWnd > :: PreCreateWindow( cs ) )
  60. return FALSE;
  61. cs.dwExStyle &= ~WS_EX_CLIENTEDGE;
  62. cs.lpszClass = AfxRegisterWndClass(0);
  63. return TRUE;
  64. }
  65. /////////////////////////////////////////////////////////////////////////////
  66. // CChildFrame diagnostics
  67. #ifdef _DEBUG
  68. void CChildFrame::AssertValid() const
  69. {
  70. CExtNCW < CMDIChildWnd > :: AssertValid();
  71. }
  72. void CChildFrame::Dump(CDumpContext& dc) const
  73. {
  74. CExtNCW < CMDIChildWnd > :: Dump( dc );
  75. }
  76. #endif //_DEBUG
  77. /////////////////////////////////////////////////////////////////////////////
  78. // CChildFrame message handlers
  79. void CChildFrame::OnFileClose() 
  80. {
  81. // To close the frame, just send a WM_CLOSE, which is the equivalent
  82. // choosing close from the system menu.
  83. SendMessage(WM_CLOSE);
  84. }
  85. int CChildFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) 
  86. {
  87. if( CExtNCW < CMDIChildWnd > :: OnCreate( lpCreateStruct ) == -1 )
  88. return -1;
  89. ASSERT( m_hChildFrameIcon != NULL );
  90. SetIcon( m_hChildFrameIcon, FALSE );
  91. SetIcon( m_hChildFrameIcon, TRUE );
  92. m_DemoThread.m_wndDemoEventSource.m_pWndLogCtrl = &m_wndLogCtrl;
  93. if(  !m_wndLogCtrl.Create(
  94. this,
  95. UINT(AFX_IDW_PANE_FIRST)
  96. )
  97. || !m_DemoThread.CreateThread(
  98. &m_wndLogCtrl
  99. )
  100. )
  101. {
  102. ASSERT( FALSE );
  103. return -1;
  104. }
  105. return 0;
  106. }
  107. void CChildFrame::OnSetFocus(CWnd* pOldWnd) 
  108. {
  109. CExtNCW < CMDIChildWnd > :: OnSetFocus( pOldWnd );
  110. if( m_wndLogCtrl.GetSafeHwnd() != NULL )
  111. m_wndLogCtrl.SetFocus();
  112. }
  113. BOOL CChildFrame::OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo) 
  114. {
  115. // let the view have first crack at the command
  116. if( m_wndLogCtrl.GetSafeHwnd() != NULL )
  117. {
  118. if( m_wndLogCtrl.OnCmdMsg( nID,nCode,pExtra,pHandlerInfo ) )
  119. return TRUE;
  120. }
  121. // otherwise, do default handling
  122. return CExtNCW < CMDIChildWnd > :: OnCmdMsg( nID, nCode, pExtra, pHandlerInfo );
  123. }
  124. BOOL CChildFrame::PreTranslateMessage(MSG* pMsg) 
  125. {
  126. CMainFrame * pMainFrame =
  127. DYNAMIC_DOWNCAST(
  128. CMainFrame,
  129. ::AfxGetMainWnd()
  130. );
  131. ASSERT_VALID( pMainFrame );
  132. if( pMainFrame->m_wndMenuBar.TranslateMainFrameMessage(pMsg) )
  133. return TRUE;
  134. return CExtNCW < CMDIChildWnd > :: PreTranslateMessage( pMsg );
  135. }
  136. BOOL CChildFrame::DestroyWindow() 
  137. {
  138. HWND hWndEventSource = m_DemoThread.m_wndDemoEventSource.GetSafeHwnd();
  139. if( hWndEventSource != NULL
  140. && ::IsWindow(hWndEventSource)
  141. )
  142. {
  143. m_DemoThread.m_wndDemoEventSource.PostMessage(
  144. WM_TIMER,
  145. ID_TIMER_DELAYED_DESTROY
  146. );
  147. Sleep( 1000 );
  148. }
  149. return CExtNCW < CMDIChildWnd > :: DestroyWindow();
  150. }