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

界面编程

开发平台:

Visual C++

  1. // ChildFrm.cpp : implementation of the CChildFrame class
  2. //
  3. #include "stdafx.h"
  4. #include "MDI_InnerOuterBars.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. ON_COMMAND_EX(ID_VIEW_CHILDFRAME_BAR_0, OnBarCheck )
  22. ON_UPDATE_COMMAND_UI(ID_VIEW_CHILDFRAME_BAR_0, OnUpdateControlBarMenu)
  23. ON_COMMAND_EX(ID_VIEW_CHILDFRAME_BAR_1, OnBarCheck )
  24. ON_UPDATE_COMMAND_UI(ID_VIEW_CHILDFRAME_BAR_1, OnUpdateControlBarMenu)
  25. ON_COMMAND_EX(ID_VIEW_CHILDFRAME_BAR_2, OnBarCheck )
  26. ON_UPDATE_COMMAND_UI(ID_VIEW_CHILDFRAME_BAR_2, OnUpdateControlBarMenu)
  27. ON_COMMAND_EX(IDR_TOOLBAR_CHILD0, OnBarCheck )
  28. ON_UPDATE_COMMAND_UI(IDR_TOOLBAR_CHILD0, OnUpdateControlBarMenu)
  29. ON_COMMAND_EX(IDR_TOOLBAR_CHILD1, OnBarCheck )
  30. ON_UPDATE_COMMAND_UI(IDR_TOOLBAR_CHILD1, OnUpdateControlBarMenu)
  31. END_MESSAGE_MAP()
  32. /////////////////////////////////////////////////////////////////////////////
  33. // CChildFrame construction/destruction
  34. CChildFrame::CChildFrame()
  35. : m_sProfileName( _T("Default MDI child profile") )
  36. {
  37. // TODO: add member initialization code here
  38. m_hChildFrameIcon = NULL;
  39. HINSTANCE hInstResource =
  40. AfxFindResourceHandle(
  41. MAKEINTRESOURCE(IDR_MDITYPE),
  42. RT_GROUP_ICON
  43. );
  44. ASSERT( hInstResource != NULL );
  45. if( hInstResource != NULL )
  46. {
  47. m_hChildFrameIcon =
  48. (HICON)::LoadImage(
  49. hInstResource,
  50. MAKEINTRESOURCE(IDR_MDITYPE),
  51. IMAGE_ICON,
  52. 16,
  53. 16,
  54. 0
  55. );
  56. ASSERT( m_hChildFrameIcon != NULL );
  57. }
  58. }
  59. CChildFrame::~CChildFrame()
  60. {
  61. if( m_hChildFrameIcon != NULL )
  62. {
  63. ::DestroyIcon( m_hChildFrameIcon );
  64. }
  65. }
  66. void CChildFrame::OnUpdateControlBarMenu(CCmdUI* pCmdUI)
  67. {
  68. CExtControlBar::DoFrameBarCheckUpdate( this, pCmdUI, true );
  69. }
  70. BOOL CChildFrame::OnBarCheck(UINT nID)
  71. {
  72. return CExtControlBar::DoFrameBarCheckCmd( this, nID, true );
  73. }
  74. BOOL CChildFrame::PreCreateWindow(CREATESTRUCT& cs)
  75. {
  76. // TODO: Modify the Window class or styles here by modifying
  77. //  the CREATESTRUCT cs
  78. if( ! CExtNCW < CMDIChildWnd > :: PreCreateWindow( cs ) )
  79. return FALSE;
  80. cs.style |= WS_CLIPCHILDREN|WS_CLIPSIBLINGS;
  81. cs.dwExStyle &= ~WS_EX_CLIENTEDGE;
  82. cs.lpszClass = AfxRegisterWndClass(0);
  83. return TRUE;
  84. }
  85. /////////////////////////////////////////////////////////////////////////////
  86. // CChildFrame diagnostics
  87. #ifdef _DEBUG
  88. void CChildFrame::AssertValid() const
  89. {
  90. CExtNCW < CMDIChildWnd > :: AssertValid();
  91. }
  92. void CChildFrame::Dump(CDumpContext& dc) const
  93. {
  94. CExtNCW < CMDIChildWnd > :: Dump( dc );
  95. }
  96. #endif //_DEBUG
  97. /////////////////////////////////////////////////////////////////////////////
  98. // CChildFrame message handlers
  99. void CChildFrame::OnFileClose() 
  100. {
  101. // To close the frame, just send a WM_CLOSE, which is the equivalent
  102. // choosing close from the system menu.
  103. SendMessage(WM_CLOSE);
  104. }
  105. int CChildFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) 
  106. {
  107. if( CExtNCW < CMDIChildWnd > :: OnCreate( lpCreateStruct ) == -1 )
  108. return -1;
  109. ASSERT( m_hChildFrameIcon != NULL );
  110. SetIcon( m_hChildFrameIcon, FALSE );
  111. SetIcon( m_hChildFrameIcon, TRUE );
  112. // create a view to occupy the client area of the frame
  113. if( ! m_wndView.Create(
  114. NULL,
  115. NULL,
  116. AFX_WS_DEFAULT_VIEW,
  117. CRect(0, 0, 0, 0),
  118. this,
  119. AFX_IDW_PANE_FIRST,
  120. NULL
  121. )
  122. )
  123. {
  124. TRACE0("Failed to create view windown");
  125. return -1;
  126. }
  127. if( !m_wndToolbar0.Create(
  128. _T("Child Toolbar 0"),
  129. this,
  130. IDR_TOOLBAR_CHILD0
  131. )
  132. || !m_wndToolbar0.LoadToolBar(IDR_TOOLBAR_CHILD0)
  133. )
  134. {
  135. TRACE0("Failed to create m_wndToolbar0n");
  136. return -1; // fail to create
  137. }
  138. if( !m_wndToolbar1.Create(
  139. _T("Child Toolbar 1"),
  140. this,
  141. IDR_TOOLBAR_CHILD1
  142. )
  143. || !m_wndToolbar1.LoadToolBar(IDR_TOOLBAR_CHILD1)
  144. )
  145. {
  146. TRACE0("Failed to create m_wndToolbar1n");
  147. return -1; // fail to create
  148. }
  149. if( !m_wndResizableBar0.Create(
  150. _T("Resizable Bar 0"),
  151. this,
  152. ID_VIEW_CHILDFRAME_BAR_0
  153. )
  154. || !m_wndListBox0.Create(
  155. WS_CHILD|WS_VISIBLE|LBS_NOINTEGRALHEIGHT,
  156. CRect( 0, 0, 0, 0 ),
  157. &m_wndResizableBar0,
  158. UINT( IDC_STATIC )
  159. )
  160. )
  161. {
  162. TRACE0("Failed to create m_wndResizableBar0n");
  163. return -1; // fail to create
  164. }
  165. m_wndListBox0.SetFont( CFont::FromHandle( (HFONT)::GetStockObject(DEFAULT_GUI_FONT) ) );
  166. m_wndListBox0.AddString( _T("CChildFrame::m_wndListBox0") );
  167. if( !m_wndResizableBar1.Create(
  168. _T("Resizable Bar 1"),
  169. this,
  170. ID_VIEW_CHILDFRAME_BAR_1
  171. )
  172. || !m_wndListBox1.Create(
  173. WS_CHILD|WS_VISIBLE|LBS_NOINTEGRALHEIGHT,
  174. CRect( 0, 0, 0, 0 ),
  175. &m_wndResizableBar1,
  176. UINT( IDC_STATIC )
  177. )
  178. )
  179. {
  180. TRACE0("Failed to create m_wndResizableBar1n");
  181. return -1; // fail to create
  182. }
  183. m_wndListBox1.SetFont( CFont::FromHandle( (HFONT)::GetStockObject(DEFAULT_GUI_FONT) ) );
  184. m_wndListBox1.AddString( _T("CChildFrame::m_wndListBox1") );
  185. if( !m_wndResizableBar2.Create(
  186. _T("Resizable Bar 2"),
  187. this,
  188. ID_VIEW_CHILDFRAME_BAR_2
  189. )
  190. || !m_wndListBox2.Create(
  191. WS_CHILD|WS_VISIBLE|LBS_NOINTEGRALHEIGHT,
  192. CRect( 0, 0, 0, 0 ),
  193. &m_wndResizableBar2,
  194. UINT( IDC_STATIC )
  195. )
  196. )
  197. {
  198. TRACE0("Failed to create m_wndResizableBar2n");
  199. return -1; // fail to create
  200. }
  201. m_wndListBox2.SetFont( CFont::FromHandle( (HFONT)::GetStockObject(DEFAULT_GUI_FONT) ) );
  202. m_wndListBox2.AddString( _T("CChildFrame::m_wndListBox2") );
  203. m_wndToolbar0.EnableDocking(CBRS_ALIGN_ANY);
  204. m_wndToolbar1.EnableDocking(CBRS_ALIGN_ANY);
  205. m_wndResizableBar0.EnableDocking(CBRS_ALIGN_ANY);
  206. m_wndResizableBar1.EnableDocking(CBRS_ALIGN_ANY);
  207. m_wndResizableBar2.EnableDocking(CBRS_ALIGN_ANY);
  208. if( !CExtControlBar::FrameEnableDocking(this) )
  209. {
  210. ASSERT( FALSE );
  211. return -1;
  212. }
  213. #if (!defined __EXT_MFC_NO_TAB_CONTROLBARS)
  214. if( !CExtControlBar::FrameInjectAutoHideAreas(this) )
  215. {
  216. ASSERT( FALSE );
  217. return -1;
  218. }
  219. #endif // (!defined __EXT_MFC_NO_TAB_CONTROLBARS)
  220. CWinApp * pApp = ::AfxGetApp();
  221. ASSERT( pApp != NULL );
  222. ASSERT( pApp->m_pszRegistryKey != NULL );
  223. ASSERT( pApp->m_pszRegistryKey[0] != _T('') );
  224. if( ! CExtControlBar::ProfileBarStateLoad(
  225. this,
  226. pApp->m_pszRegistryKey,
  227. pApp->m_pszProfileName,
  228. LPCTSTR( m_sProfileName )
  229. )
  230. )
  231. {
  232. DockControlBar( &m_wndToolbar0, AFX_IDW_DOCKBAR_TOP );
  233. DockControlBar( &m_wndToolbar1, AFX_IDW_DOCKBAR_LEFT );
  234. m_wndResizableBar0.DockControlBar( AFX_IDW_DOCKBAR_TOP, 1, this, false );
  235. m_wndResizableBar0.DockControlBar( &m_wndResizableBar1, true, false, this, false );
  236. m_wndResizableBar2.DockControlBar( AFX_IDW_DOCKBAR_BOTTOM, 1, this, true );
  237. #if (!defined __EXT_MFC_NO_TAB_CONTROLBARS)
  238. m_wndResizableBar2.AutoHideModeSet( true, false, false, true );
  239. #endif // (!defined __EXT_MFC_NO_TAB_CONTROLBARS)
  240. }
  241. DelayRecalcLayout();
  242. return 0;
  243. }
  244. void CChildFrame::OnSetFocus(CWnd* pOldWnd) 
  245. {
  246. CExtNCW < CMDIChildWnd > :: OnSetFocus( pOldWnd );
  247. if( m_wndView.GetSafeHwnd() != NULL )
  248. m_wndView.SetFocus();
  249. }
  250. BOOL CChildFrame::OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo) 
  251. {
  252. // let the view have first crack at the command
  253. if( m_wndView.GetSafeHwnd() != NULL )
  254. {
  255. if( m_wndView.OnCmdMsg(nID, nCode, pExtra, pHandlerInfo ) )
  256. return TRUE;
  257. }
  258. // otherwise, do default handling
  259. return CExtNCW < CMDIChildWnd > :: OnCmdMsg( nID, nCode, pExtra, pHandlerInfo );
  260. }
  261. BOOL CChildFrame::PreTranslateMessage(MSG* pMsg) 
  262. {
  263. CMainFrame * pMainFrame =
  264. DYNAMIC_DOWNCAST(
  265. CMainFrame,
  266. ::AfxGetMainWnd()
  267. );
  268. ASSERT_VALID( pMainFrame );
  269. if( pMainFrame->m_wndMenuBar.TranslateMainFrameMessage(pMsg) )
  270. return TRUE;
  271. return CExtNCW < CMDIChildWnd > :: PreTranslateMessage( pMsg );
  272. }
  273. BOOL CChildFrame::DestroyWindow() 
  274. {
  275. CWinApp * pApp = ::AfxGetApp();
  276. ASSERT( pApp != NULL );
  277. ASSERT( pApp->m_pszRegistryKey != NULL );
  278. ASSERT( pApp->m_pszRegistryKey[0] != _T('') );
  279. VERIFY(
  280. CExtControlBar::ProfileBarStateSave(
  281. this,
  282. pApp->m_pszRegistryKey,
  283. pApp->m_pszProfileName,
  284. LPCTSTR( m_sProfileName )
  285. )
  286. );
  287. g_CmdManager->ProfileWndRemove( GetSafeHwnd() );
  288. return CExtNCW < CMDIChildWnd > :: DestroyWindow();
  289. }