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

界面编程

开发平台:

Visual C++

  1. // MainFrm.cpp : implementation of the CMainFrame class
  2. //
  3. #include "stdafx.h"
  4. #include "StatusPanes.h"
  5. #include "MainFrm.h"
  6. #ifdef _DEBUG
  7. #define new DEBUG_NEW
  8. #undef THIS_FILE
  9. static char THIS_FILE[] = __FILE__;
  10. #endif
  11. /////////////////////////////////////////////////////////////////////////////
  12. // CMainFrame
  13. IMPLEMENT_DYNAMIC( CMainFrame, CFrameWnd )
  14. BEGIN_MESSAGE_MAP( CMainFrame, CFrameWnd )
  15. //{{AFX_MSG_MAP(CMainFrame)
  16. ON_WM_CREATE()
  17. ON_WM_SETFOCUS()
  18. //}}AFX_MSG_MAP
  19. ON_COMMAND_EX( ID_VIEW_MENUBAR, OnBarCheck )
  20. ON_UPDATE_COMMAND_UI( ID_VIEW_MENUBAR, OnUpdateControlBarMenu )
  21. ON_COMMAND_EX( ID_VIEW_UI_LOOK_BAR, OnBarCheck )
  22. ON_UPDATE_COMMAND_UI( ID_VIEW_UI_LOOK_BAR, OnUpdateControlBarMenu )
  23. END_MESSAGE_MAP()
  24. static UINT indicators[] =
  25. {
  26. ID_SEPARATOR,           // status line indicator
  27. ID_INDICATOR_CAPS,
  28. ID_INDICATOR_NUM,
  29. ID_INDICATOR_SCRL,
  30. };
  31. /////////////////////////////////////////////////////////////////////////////
  32. // CMainFrame construction/destruction
  33. CMainFrame::CMainFrame()
  34. {
  35. CWinApp * pApp = ::AfxGetApp();
  36. ASSERT( pApp != NULL );
  37. ASSERT( pApp->m_pszRegistryKey != NULL );
  38. ASSERT( pApp->m_pszRegistryKey[0] != _T('') );
  39. ASSERT( pApp->m_pszProfileName != NULL );
  40. ASSERT( pApp->m_pszProfileName[0] != _T('') );
  41. if( ! g_PaintManager.PaintManagerStateLoad(
  42. pApp->m_pszRegistryKey,
  43. pApp->m_pszProfileName,
  44. pApp->m_pszProfileName
  45. )
  46. )
  47. g_PaintManager.InstallPaintManager(
  48. RUNTIME_CLASS(CExtPaintManagerOffice2003)
  49. );
  50. // window placement persistence
  51. ::memset( &m_dataFrameWP, 0, sizeof(WINDOWPLACEMENT) );
  52. m_dataFrameWP.length = sizeof(WINDOWPLACEMENT);
  53. m_dataFrameWP.showCmd = SW_HIDE;
  54. m_pWndView = NULL;
  55. }
  56. CMainFrame::~CMainFrame()
  57. {
  58. }
  59. static UINT g_statBasicCommands[] =
  60. {
  61. ID_APP_ABOUT,
  62. ID_APP_EXIT,
  63. ID_VIEW_MENUBAR,
  64. ID_VIEW_TOOLBAR,
  65. ID_VIEW_UI_LOOK_BAR,
  66. ID_VIEW_UI_LOOK_BAR,
  67. ID_VIEW_STATUS_BAR,
  68. 0, // end of list
  69. };
  70. int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
  71. {
  72. if( CExtNCW < CFrameWnd > :: OnCreate( lpCreateStruct ) == -1 )
  73. return -1;
  74. // create a view to occupy the client area of the frame
  75. m_pWndView = new CChildFormView;
  76. if(! m_pWndView->Create(
  77. NULL, 
  78. NULL, 
  79. AFX_WS_DEFAULT_VIEW, 
  80. CRect( 0, 0, 0, 0 ),
  81. this, 
  82. AFX_IDW_PANE_FIRST, 
  83. NULL
  84. )
  85. )
  86. {
  87. TRACE0("Failed to create view windown");
  88. return -1;
  89. }
  90. CWinApp * pApp = ::AfxGetApp();
  91. ASSERT( pApp != NULL );
  92. ASSERT( pApp->m_pszRegistryKey != NULL );
  93. ASSERT( pApp->m_pszRegistryKey[0] != _T('') );
  94. ASSERT( pApp->m_pszProfileName != NULL );
  95. ASSERT( pApp->m_pszProfileName[0] != _T('') );
  96. ASSERT( pApp->m_pszProfileName != NULL );
  97. HICON hIcon = pApp->LoadIcon( IDR_MAINFRAME );
  98. ASSERT( hIcon != NULL );
  99. SetIcon( hIcon, TRUE );
  100. SetIcon( hIcon, FALSE );
  101. g_CmdManager->ProfileSetup(
  102. pApp->m_pszProfileName,
  103. GetSafeHwnd()
  104. );
  105. VERIFY(
  106. g_CmdManager->UpdateFromMenu(
  107. pApp->m_pszProfileName,
  108. IDR_MAINFRAME
  109. )
  110. );
  111. VERIFY(
  112. g_CmdManager->UpdateFromToolBar(
  113. pApp->m_pszProfileName,
  114. IDR_TOOLBAR_SMALL_ICONS
  115. )
  116. );
  117. if( ! m_wndMenuBar.Create( NULL, this, ID_VIEW_MENUBAR ) )
  118.     {
  119.         TRACE0("Failed to create menubarn");
  120.         return -1;      // failed to create
  121.     }
  122. if( (! m_wndToolBar.Create( NULL, this, AFX_IDW_TOOLBAR ) )
  123. || (! m_wndToolBar.LoadToolBar( IDR_MAINFRAME ) )
  124. )
  125. {
  126. TRACE0("Failed to create the m_wndToolBar toolbarn");
  127. return -1;      // fail to create
  128. }
  129. if( (! m_wndToolBarUiLook.Create( NULL, this, ID_VIEW_UI_LOOK_BAR ) )
  130. || (! m_wndToolBarUiLook.ThemeSwitcherInit() )
  131. )
  132. {
  133. TRACE0("Failed to create the m_wndToolBar toolbarn");
  134. return -1;      // fail to create
  135. }
  136. if( (! m_wndStatusBar.Create( this ) )
  137. || (! m_wndStatusBar.SetIndicators(
  138. indicators,
  139. sizeof(indicators) / sizeof(UINT)
  140. )
  141. )
  142. )
  143. {
  144. TRACE0("Failed to create status barn");
  145. return -1;      // fail to create
  146. }
  147. m_wndStatusBar.GetStatusBarCtrl().SetMinHeight(21);
  148.     m_wndMenuBar.EnableDocking( CBRS_ALIGN_ANY );
  149. m_wndToolBar.EnableDocking( CBRS_ALIGN_ANY );
  150. m_wndToolBarUiLook.EnableDocking( CBRS_ALIGN_ANY );
  151. if( ! CExtControlBar::FrameEnableDocking(this) )
  152. {
  153. ASSERT( FALSE );
  154. return -1;
  155. }
  156. VERIFY(
  157. g_CmdManager->SetBasicCommands(
  158. pApp->m_pszProfileName,
  159. g_statBasicCommands
  160. )
  161. );
  162. if( ! CExtControlBar::ProfileBarStateLoad(
  163. this,
  164. pApp->m_pszRegistryKey,
  165. pApp->m_pszProfileName,
  166. pApp->m_pszProfileName,
  167. &m_dataFrameWP
  168. )
  169. )
  170. {
  171. DockControlBar( &m_wndMenuBar );
  172. DockControlBar( &m_wndToolBar );
  173. DockControlBar( &m_wndToolBarUiLook, AFX_IDW_DOCKBAR_RIGHT );
  174. RecalcLayout();
  175. }
  176. g_CmdManager->SerializeState(
  177. pApp->m_pszProfileName,
  178. pApp->m_pszRegistryKey,
  179. pApp->m_pszProfileName,
  180. false
  181. );
  182. return 0;
  183. }
  184. BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
  185. {
  186. if( ! CExtNCW < CFrameWnd > :: PreCreateWindow( cs ) )
  187. return FALSE;
  188. cs.dwExStyle &= ~WS_EX_CLIENTEDGE;
  189. cs.lpszClass = AfxRegisterWndClass(0);
  190. return TRUE;
  191. }
  192. /////////////////////////////////////////////////////////////////////////////
  193. // CMainFrame diagnostics
  194. #ifdef _DEBUG
  195. void CMainFrame::AssertValid() const
  196. {
  197. CExtNCW < CFrameWnd > :: AssertValid();
  198. }
  199. void CMainFrame::Dump(CDumpContext& dc) const
  200. {
  201. CExtNCW < CFrameWnd > :: Dump( dc );
  202. }
  203. #endif //_DEBUG
  204. /////////////////////////////////////////////////////////////////////////////
  205. // CMainFrame message handlers
  206. void CMainFrame::OnSetFocus(CWnd* pOldWnd)
  207. {
  208. pOldWnd;
  209. // forward focus to the view window
  210. m_pWndView->SetFocus();
  211. }
  212. BOOL CMainFrame::OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo)
  213. {
  214. // let the view have first crack at the command
  215. if( m_pWndView->OnCmdMsg( nID, nCode, pExtra, pHandlerInfo ) )
  216. return TRUE;
  217. // otherwise, do default handling
  218. return CExtNCW < CFrameWnd > :: OnCmdMsg( nID, nCode, pExtra, pHandlerInfo );
  219. }
  220. BOOL CMainFrame::PreTranslateMessage(MSG* pMsg) 
  221. {
  222. if( m_wndToolBarUiLook.PreTranslateMessage( pMsg ) )
  223. return TRUE;
  224. if( m_wndMenuBar.TranslateMainFrameMessage( pMsg ) )
  225. return TRUE;
  226. return CExtNCW < CFrameWnd > :: PreTranslateMessage( pMsg );
  227. }
  228. BOOL CMainFrame::DestroyWindow() 
  229. {
  230. CWinApp * pApp = ::AfxGetApp();
  231. ASSERT( pApp != NULL );
  232. ASSERT( pApp->m_pszRegistryKey != NULL );
  233. ASSERT( pApp->m_pszRegistryKey[0] != _T('') );
  234. ASSERT( pApp->m_pszProfileName != NULL );
  235. ASSERT( pApp->m_pszProfileName[0] != _T('') );
  236. VERIFY(
  237. CExtControlBar::ProfileBarStateSave(
  238. this,
  239. pApp->m_pszRegistryKey,
  240. pApp->m_pszProfileName,
  241. pApp->m_pszProfileName
  242. )
  243. );
  244. VERIFY(
  245. g_CmdManager->SerializeState(
  246. pApp->m_pszProfileName,
  247. pApp->m_pszRegistryKey,
  248. pApp->m_pszProfileName,
  249. true
  250. )
  251. );
  252. VERIFY(
  253. g_PaintManager.PaintManagerStateSave(
  254. pApp->m_pszRegistryKey,
  255. pApp->m_pszProfileName,
  256. pApp->m_pszProfileName
  257. )
  258. );
  259. g_CmdManager->ProfileWndRemove( GetSafeHwnd() );
  260. return CExtNCW < CFrameWnd > :: DestroyWindow();
  261. }
  262. void CMainFrame::ActivateFrame(int nCmdShow) 
  263. {
  264. // window placement persistence
  265. if( m_dataFrameWP.showCmd != SW_HIDE )
  266. {
  267. SetWindowPlacement( &m_dataFrameWP );
  268. CExtNCW < CFrameWnd > :: ActivateFrame( m_dataFrameWP.showCmd );
  269. m_dataFrameWP.showCmd = SW_HIDE;
  270. return;
  271. }
  272. CExtNCW < CFrameWnd > :: ActivateFrame( nCmdShow );
  273. }