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

界面编程

开发平台:

Visual C++

  1. // MainFrm.cpp : implementation of the CMainFrame class
  2. //
  3. #include "stdafx.h"
  4. #include "ZoomScrollBar.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. ON_WM_GETMINMAXINFO()
  19. //}}AFX_MSG_MAP
  20. ON_COMMAND_EX(ID_VIEW_MENUBAR, OnBarCheck )
  21. ON_UPDATE_COMMAND_UI(ID_VIEW_MENUBAR, OnUpdateControlBarMenu)
  22. ON_COMMAND_EX(ID_VIEW_UI_LOOK_BAR, OnBarCheck )
  23. ON_UPDATE_COMMAND_UI(ID_VIEW_UI_LOOK_BAR, OnUpdateControlBarMenu)
  24. END_MESSAGE_MAP()
  25. static UINT indicators[] =
  26. {
  27. ID_SEPARATOR,           // status line indicator
  28. ID_INDICATOR_LOCATION,
  29. ID_ZOOM_VALUE_PANE,
  30. ID_ZOOM_SCROLL_BAR_PANE,
  31. // ID_INDICATOR_CAPS,
  32. // ID_INDICATOR_NUM,
  33. // ID_INDICATOR_SCRL,
  34. };
  35. void CMainFrame::OnUpdateControlBarMenu(CCmdUI* pCmdUI)
  36. {
  37. CExtControlBar::DoFrameBarCheckUpdate( this, pCmdUI, true );
  38. }
  39. BOOL CMainFrame::OnBarCheck(UINT nID)
  40. {
  41. return CExtControlBar::DoFrameBarCheckCmd( this, nID, true );
  42. }
  43. /////////////////////////////////////////////////////////////////////////////
  44. // CMainFrame construction/destruction
  45. CMainFrame::CMainFrame()
  46. {
  47. CWinApp * pApp = ::AfxGetApp();
  48. ASSERT( pApp != NULL );
  49. ASSERT( pApp->m_pszRegistryKey != NULL );
  50. ASSERT( pApp->m_pszRegistryKey[0] != _T('') );
  51. ASSERT( pApp->m_pszProfileName != NULL );
  52. ASSERT( pApp->m_pszProfileName[0] != _T('') );
  53. if( ! g_PaintManager.PaintManagerStateLoad(
  54. pApp->m_pszRegistryKey,
  55. pApp->m_pszProfileName,
  56. pApp->m_pszProfileName
  57. )
  58. )
  59. g_PaintManager.InstallPaintManager(
  60. RUNTIME_CLASS(CExtPaintManagerOffice2007_R2_LunaBlue)
  61. );
  62. // if( ! g_PaintManager.PaintManagerStateLoad(
  63. // pApp->m_pszRegistryKey,
  64. // pApp->m_pszProfileName,
  65. // pApp->m_pszProfileName
  66. // )
  67. // )
  68. // {
  69. // CExtPaintManagerSkin * pPM = new CExtPaintManagerSkin;
  70. // bool bLoaded = true;
  71. // if( ! pPM->m_Skin.SearchAndLoadSkinFile( _T("Aqua.Skin"), false ) )
  72. // {
  73. // if( ! pPM->m_Skin.SearchAndLoadSkinFile( _T("..\..\Skins\Binary\Aqua.Skin"), false ) )
  74. // {
  75. // bLoaded = false;
  76. // ::AfxMessageBox( _T("Failed to load initial skin.") );
  77. // delete pPM;
  78. // }
  79. // }
  80. // if( bLoaded )
  81. // g_PaintManager.InstallPaintManager( pPM );
  82. // }
  83. CExtPopupMenuWnd::g_bMenuExpanding = false;
  84. CExtPopupMenuWnd::g_bMenuHighlightRarely = false;
  85. // window placement persistence
  86. ::memset( &m_dataFrameWP, 0, sizeof(WINDOWPLACEMENT) );
  87. m_dataFrameWP.length = sizeof(WINDOWPLACEMENT);
  88. m_dataFrameWP.showCmd = SW_HIDE;
  89. }
  90. CMainFrame::~CMainFrame()
  91. {
  92. }
  93. void CMainFrame::RecalcLayout(BOOL bNotify)
  94. {
  95. CExtNCW < CFrameWnd > :: RecalcLayout( bNotify );
  96. }
  97. int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
  98. {
  99. if( CExtNCW < CFrameWnd > :: OnCreate( lpCreateStruct ) == -1 )
  100. return -1;
  101. m_wndStatusBar.m_bDrawPaneSeparatorsInsteadOfBorders = true;
  102. if( (! m_wndStatusBar.Create( this ) )
  103. || (! m_wndStatusBar.SetIndicators(
  104. indicators,
  105. sizeof(indicators)/sizeof(UINT)
  106. ) )
  107. )
  108. {
  109. TRACE0("Failed to create status barn");
  110. return -1;      // fail to create
  111. }
  112. m_wndStatusBar.SetPaneWidth( 0, 10 );
  113. m_wndStatusBar.GetStatusBarCtrl().SetMinHeight( 25 );
  114. // create a view to occupy the client area of the frame
  115. if( ! m_wndView.Create(
  116. NULL,
  117. NULL,
  118. AFX_WS_DEFAULT_VIEW|WS_CLIPCHILDREN|WS_CLIPSIBLINGS,
  119. CRect( 0, 0, 0, 0 ),
  120. this,
  121. AFX_IDW_PANE_FIRST,
  122. NULL
  123. )
  124. )
  125. {
  126. TRACE0("Failed to create view windown");
  127. return -1;
  128. }
  129. CString strTitleOld = GetTitle(), strTitleNew;
  130. strTitleNew.Format(
  131. _T("%s - [%d objects loaded]"),
  132. LPCTSTR( strTitleOld ),
  133. m_wndView.GetObjectCount()
  134. );
  135. SetTitle( LPCTSTR( strTitleNew ) );
  136. OnUpdateFrameTitle( FALSE );
  137. CWinApp * pApp = ::AfxGetApp();
  138. ASSERT( pApp != NULL );
  139. ASSERT( pApp->m_pszRegistryKey != NULL );
  140. ASSERT( pApp->m_pszRegistryKey[0] != _T('') );
  141. ASSERT( pApp->m_pszProfileName != NULL );
  142. ASSERT( pApp->m_pszProfileName[0] != _T('') );
  143. ASSERT( pApp->m_pszProfileName != NULL );
  144. HICON hIcon = pApp->LoadIcon( IDR_MAINFRAME );
  145. ASSERT( hIcon != NULL );
  146. SetIcon( hIcon, TRUE );
  147. SetIcon( hIcon, FALSE );
  148. g_CmdManager->ProfileSetup(
  149. pApp->m_pszProfileName,
  150. GetSafeHwnd()
  151. );
  152. VERIFY(
  153. g_CmdManager->UpdateFromMenu(
  154. pApp->m_pszProfileName,
  155. IDR_MAINFRAME
  156. )
  157. );
  158. if( ! m_wndMenuBar.Create(
  159. NULL,
  160. this,
  161. ID_VIEW_MENUBAR
  162. )
  163. )
  164.     {
  165.         TRACE0("Failed to create menubarn");
  166.         return -1;
  167.     }
  168. if( (! m_wndToolBarUiLook.Create( NULL, this, ID_VIEW_UI_LOOK_BAR ) )
  169. || (! m_wndToolBarUiLook.ThemeSwitcherInit() )
  170. )
  171. {
  172. TRACE0("Failed to create the m_wndToolBarUiLook toolbarn");
  173. return -1;      // fail to create
  174. }
  175. m_wndToolBarUiLook.EnableDocking( CBRS_ALIGN_ANY );
  176. if( ! CExtControlBar::FrameEnableDocking( this ) )
  177. {
  178. ASSERT( FALSE );
  179. return -1;
  180. }
  181. if( ! CExtControlBar::ProfileBarStateLoad(
  182. this,
  183. pApp->m_pszRegistryKey,
  184. pApp->m_pszProfileName,
  185. pApp->m_pszProfileName,
  186. &m_dataFrameWP
  187. )
  188. )
  189. {
  190. DockControlBar( &m_wndToolBarUiLook, AFX_IDW_DOCKBAR_LEFT );
  191. RecalcLayout();
  192. }
  193. return 0;
  194. }
  195. BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
  196. {
  197. if( ! CExtNCW < CFrameWnd > :: PreCreateWindow( cs ) )
  198. return FALSE;
  199. cs.dwExStyle &= ~(WS_EX_CLIENTEDGE|WS_EX_LAYOUTRTL);
  200. cs.style |= WS_CLIPCHILDREN|WS_CLIPSIBLINGS;
  201. cs.lpszClass = AfxRegisterWndClass( CS_HREDRAW|CS_HREDRAW|CS_DBLCLKS );
  202. return TRUE;
  203. }
  204. /////////////////////////////////////////////////////////////////////////////
  205. // CMainFrame diagnostics
  206. #ifdef _DEBUG
  207. void CMainFrame::AssertValid() const
  208. {
  209. CExtNCW < CFrameWnd > :: AssertValid();
  210. }
  211. void CMainFrame::Dump(CDumpContext& dc) const
  212. {
  213. CExtNCW < CFrameWnd > :: Dump( dc );
  214. }
  215. #endif //_DEBUG
  216. /////////////////////////////////////////////////////////////////////////////
  217. // CMainFrame message handlers
  218. void CMainFrame::OnSetFocus(CWnd* pOldWnd)
  219. {
  220. pOldWnd;
  221. // forward focus to the view window
  222. if( m_wndView.GetSafeHwnd() != NULL )
  223. m_wndView.SetFocus();
  224. }
  225. BOOL CMainFrame::OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo)
  226. {
  227. // let the view have first crack at the command
  228. if( m_wndView.GetSafeHwnd() != NULL )
  229. {
  230. if( m_wndView.OnCmdMsg( nID, nCode, pExtra, pHandlerInfo ) )
  231. return TRUE;
  232. }
  233. // otherwise, do default handling
  234. return CExtNCW < CFrameWnd > :: OnCmdMsg( nID, nCode, pExtra, pHandlerInfo );
  235. }
  236. BOOL CMainFrame::PreTranslateMessage(MSG* pMsg) 
  237. {
  238. if( m_wndToolBarUiLook.PreTranslateMessage( pMsg ) )
  239. return TRUE;
  240. if( m_wndMenuBar.TranslateMainFrameMessage(pMsg) )
  241. return TRUE;
  242. return CExtNCW < CFrameWnd > :: PreTranslateMessage(pMsg);
  243. }
  244. BOOL CMainFrame::DestroyWindow() 
  245. {
  246. CWinApp * pApp = ::AfxGetApp();
  247. ASSERT( pApp != NULL );
  248. ASSERT( pApp->m_pszRegistryKey != NULL );
  249. ASSERT( pApp->m_pszRegistryKey[0] != _T('') );
  250. ASSERT( pApp->m_pszProfileName != NULL );
  251. ASSERT( pApp->m_pszProfileName[0] != _T('') );
  252. VERIFY(
  253. CExtControlBar::ProfileBarStateSave(
  254. this,
  255. pApp->m_pszRegistryKey,
  256. pApp->m_pszProfileName,
  257. pApp->m_pszProfileName
  258. )
  259. );
  260. VERIFY(
  261. g_PaintManager.PaintManagerStateSave(
  262. pApp->m_pszRegistryKey,
  263. pApp->m_pszProfileName,
  264. pApp->m_pszProfileName
  265. )
  266. );
  267. g_CmdManager->ProfileWndRemove( GetSafeHwnd() );
  268. return CExtNCW < CFrameWnd > :: DestroyWindow();
  269. }
  270. void CMainFrame::ActivateFrame(int nCmdShow) 
  271. {
  272. // window placement persistence
  273. if( m_dataFrameWP.showCmd != SW_HIDE )
  274. {
  275. SetWindowPlacement( &m_dataFrameWP );
  276. CExtNCW < CFrameWnd > :: ActivateFrame( m_dataFrameWP.showCmd );
  277. m_dataFrameWP.showCmd = SW_HIDE;
  278. return;
  279. }
  280. CExtNCW < CFrameWnd > :: ActivateFrame( nCmdShow );
  281. }
  282. void CMainFrame::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI) 
  283. {
  284. CFrameWnd::OnGetMinMaxInfo( lpMMI );
  285. lpMMI->ptMinTrackSize.x = g_PaintManager->UiScalingDo( 700, CExtPaintManager::__EUIST_X );
  286. lpMMI->ptMinTrackSize.y = g_PaintManager->UiScalingDo( 300, CExtPaintManager::__EUIST_Y );
  287. }