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

界面编程

开发平台:

Visual C++

  1. // MainFrm.cpp : implementation of the CMainFrame class
  2. //
  3. #include "stdafx.h"
  4. #include "SDI.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. ON_COMMAND_EX(ID_VIEW_RESIZABLE_BAR_0, OnBarCheck )
  24. ON_UPDATE_COMMAND_UI(ID_VIEW_RESIZABLE_BAR_0, OnUpdateControlBarMenu)
  25. ON_COMMAND_EX(ID_VIEW_RESIZABLE_BAR_1, OnBarCheck )
  26. ON_UPDATE_COMMAND_UI(ID_VIEW_RESIZABLE_BAR_1, OnUpdateControlBarMenu)
  27. ON_COMMAND_EX(ID_VIEW_RESIZABLE_BAR_2, OnBarCheck )
  28. ON_UPDATE_COMMAND_UI(ID_VIEW_RESIZABLE_BAR_2, OnUpdateControlBarMenu)
  29. ON_COMMAND_EX(ID_VIEW_RESIZABLE_BAR_3, OnBarCheck )
  30. ON_UPDATE_COMMAND_UI(ID_VIEW_RESIZABLE_BAR_3, OnUpdateControlBarMenu)
  31. ON_COMMAND_EX(ID_VIEW_RESIZABLE_BAR_4, OnBarCheck )
  32. ON_UPDATE_COMMAND_UI(ID_VIEW_RESIZABLE_BAR_4, OnUpdateControlBarMenu)
  33. END_MESSAGE_MAP()
  34. static UINT indicators[] =
  35. {
  36. ID_SEPARATOR,           // status line indicator
  37. ID_INDICATOR_CAPS,
  38. ID_INDICATOR_NUM,
  39. ID_INDICATOR_SCRL,
  40. };
  41. void CMainFrame::OnUpdateControlBarMenu(CCmdUI* pCmdUI)
  42. {
  43. CExtControlBar::DoFrameBarCheckUpdate( this, pCmdUI, true );
  44. }
  45. BOOL CMainFrame::OnBarCheck(UINT nID)
  46. {
  47. return CExtControlBar::DoFrameBarCheckCmd( this, nID, true );
  48. }
  49. /////////////////////////////////////////////////////////////////////////////
  50. // CMainFrame construction/destruction
  51. CMainFrame::CMainFrame()
  52. : m_wndInBarEdit( true, true )
  53. , m_wndInBarListBox( true, true )
  54. {
  55. CWinApp * pApp = ::AfxGetApp();
  56. ASSERT( pApp != NULL );
  57. ASSERT( pApp->m_pszRegistryKey != NULL );
  58. ASSERT( pApp->m_pszRegistryKey[0] != _T('') );
  59. ASSERT( pApp->m_pszProfileName != NULL );
  60. ASSERT( pApp->m_pszProfileName[0] != _T('') );
  61. if( ! g_PaintManager.PaintManagerStateLoad(
  62. pApp->m_pszRegistryKey,
  63. pApp->m_pszProfileName,
  64. pApp->m_pszProfileName
  65. )
  66. )
  67. g_PaintManager.InstallPaintManager(
  68. RUNTIME_CLASS(CExtPaintManagerOffice2007_R2_LunaBlue)
  69. );
  70. // window placement persistence
  71. ::memset( &m_dataFrameWP, 0, sizeof(WINDOWPLACEMENT) );
  72. m_dataFrameWP.length = sizeof(WINDOWPLACEMENT);
  73. m_dataFrameWP.showCmd = SW_HIDE;
  74. }
  75. CMainFrame::~CMainFrame()
  76. {
  77. }
  78. void CMainFrame::RecalcLayout(BOOL bNotify)
  79. {
  80. CExtNCW < CFrameWnd > :: RecalcLayout( bNotify );
  81. }
  82. static UINT g_statBasicCommands[] =
  83. {
  84. ID_APP_ABOUT,
  85. ID_APP_EXIT,
  86. ID_VIEW_MENUBAR,
  87. ID_VIEW_TOOLBAR,
  88. ID_VIEW_UI_LOOK_BAR,
  89. ID_VIEW_RESIZABLE_BAR_0,
  90. ID_VIEW_RESIZABLE_BAR_1,
  91. ID_VIEW_RESIZABLE_BAR_2,
  92. ID_VIEW_RESIZABLE_BAR_3,
  93. ID_VIEW_RESIZABLE_BAR_4,
  94. ID_VIEW_STATUS_BAR,
  95. ID_EDIT_COPY,
  96. ID_EDIT_CUT,
  97. ID_EDIT_PASTE,
  98. 0, // end of list
  99. };
  100. int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
  101. {
  102. // Uncomment the following like for making all the tabbed bar containers based on
  103. // multi-row tab control:
  104. // CExtControlBar::g_dwTabContainerTabsStyle = __ETWS_MULTI_ROW_COLUMN; //|__ETWS_EQUAL_WIDTHS|__ETWS_FULL_WIDTH;
  105. if( CExtNCW < CFrameWnd > :: OnCreate( lpCreateStruct ) == -1 )
  106. return -1;
  107. // create a view to occupy the client area of the frame
  108. if( ! m_wndView.Create(
  109. NULL,
  110. NULL,
  111. AFX_WS_DEFAULT_VIEW,
  112. CRect( 0, 0, 0, 0 ),
  113. this,
  114. AFX_IDW_PANE_FIRST,
  115. NULL
  116. )
  117. )
  118. {
  119. TRACE0("Failed to create view windown");
  120. return -1;
  121. }
  122. CWinApp * pApp = ::AfxGetApp();
  123. ASSERT( pApp != NULL );
  124. ASSERT( pApp->m_pszRegistryKey != NULL );
  125. ASSERT( pApp->m_pszRegistryKey[0] != _T('') );
  126. ASSERT( pApp->m_pszProfileName != NULL );
  127. ASSERT( pApp->m_pszProfileName[0] != _T('') );
  128. ASSERT( pApp->m_pszProfileName != NULL );
  129. HICON hIcon = pApp->LoadIcon( IDR_MAINFRAME );
  130. ASSERT( hIcon != NULL );
  131. SetIcon( hIcon, TRUE );
  132. SetIcon( hIcon, FALSE );
  133. g_CmdManager->ProfileSetup(
  134. pApp->m_pszProfileName,
  135. GetSafeHwnd()
  136. );
  137. VERIFY(
  138. g_CmdManager->UpdateFromMenu(
  139. pApp->m_pszProfileName,
  140. IDR_MAINFRAME
  141. )
  142. );
  143. if( ! m_wndMenuBar.Create(
  144. NULL,
  145. this,
  146. ID_VIEW_MENUBAR
  147. )
  148. )
  149.     {
  150.         TRACE0("Failed to create menubarn");
  151.         return -1;
  152.     }
  153. if( (! m_wndToolBar.Create(
  154. _T("ToolBar"),
  155. this,
  156. AFX_IDW_TOOLBAR
  157. ) )
  158. || (! m_wndToolBar.LoadToolBar( IDR_MAINFRAME ) )
  159. )
  160. {
  161. TRACE0("Failed to create toolbarn");
  162. return -1;
  163. }
  164. if( (! m_wndToolBarUiLook.Create( NULL, this, ID_VIEW_UI_LOOK_BAR ) )
  165. || (! m_wndToolBarUiLook.ThemeSwitcherInit() )
  166. )
  167. {
  168. TRACE0("Failed to create the m_wndToolBarUiLook toolbarn");
  169. return -1;      // fail to create
  170. }
  171. if( ! m_wndResizableBar0.Create(
  172. _T("Resizable Bar 0"),
  173. this,
  174. ID_VIEW_RESIZABLE_BAR_0
  175. )
  176. )
  177. {
  178. TRACE0("Failed to create m_wndResizableBar0n");
  179. return -1; // fail to create
  180. }
  181. if( ! m_wndInBarEdit.Create(
  182. WS_CHILD|WS_VISIBLE|WS_VSCROLL|WS_HSCROLL|ES_MULTILINE|ES_LEFT,
  183. CRect(0,0,0,0),
  184. &m_wndResizableBar0,
  185. m_wndResizableBar0.GetDlgCtrlID()
  186. )
  187. )
  188. {
  189. TRACE0("Failed to create m_wndInBarEditn");
  190. return -1; // fail to create
  191. }
  192. m_wndInBarEdit.SetFont(
  193. CFont::FromHandle(
  194. (HFONT)::GetStockObject(DEFAULT_GUI_FONT)
  195. )
  196. );
  197. if( ! m_wndResizableBar1.Create(
  198. _T("Resizable Bar 1"),
  199. this,
  200. ID_VIEW_RESIZABLE_BAR_1
  201. )
  202. )
  203. {
  204. TRACE0("Failed to create m_wndResizableBar1n");
  205. return -1; // fail to create
  206. }
  207. if( ! m_wndInBarListBox.Create(
  208. WS_CHILD|WS_VISIBLE|WS_VSCROLL
  209. |LBS_HASSTRINGS|LBS_NOINTEGRALHEIGHT
  210. |LBS_EXTENDEDSEL|LBS_MULTIPLESEL
  211. ,
  212. CRect(0,0,0,0),
  213. &m_wndResizableBar1,
  214. m_wndResizableBar1.GetDlgCtrlID()
  215. )
  216. )
  217. {
  218. TRACE0("Failed to create m_wndInBarListBoxn");
  219. return -1; // fail to create
  220. }
  221. m_wndInBarListBox.SetFont(
  222. CFont::FromHandle(
  223. (HFONT)::GetStockObject(DEFAULT_GUI_FONT)
  224. )
  225. );
  226. for( INT iLbStrNo = 0; iLbStrNo < 50; iLbStrNo++ )
  227. {
  228. CString s;
  229. s.Format( _T("String %02d"), iLbStrNo );
  230. m_wndInBarListBox.AddString( LPCTSTR(s) );
  231. }
  232. if( ! m_wndResizableBar2.Create(
  233. _T("Resizable Bar 2"),
  234. this,
  235. ID_VIEW_RESIZABLE_BAR_2
  236. )
  237. )
  238. {
  239. TRACE0("Failed to create m_wndResizableBar2n");
  240. return -1; // fail to create
  241. }
  242. if( ! m_wndInBarColorPicker.Create(
  243. _T("BUTTON"),
  244. _T(""),
  245. WS_CHILD|WS_VISIBLE,
  246. CRect(0,0,0,0),
  247. &m_wndResizableBar2,
  248. m_wndResizableBar2.GetDlgCtrlID()
  249. )
  250. )
  251. {
  252. TRACE0("Failed to create m_wndInBarColorPickern");
  253. return -1; // fail to create
  254. }
  255. if( ! m_wndResizableBar3.Create(
  256. _T("Resizable Bar 3"),
  257. this,
  258. ID_VIEW_RESIZABLE_BAR_3
  259. )
  260. )
  261. {
  262. TRACE0("Failed to create m_wndResizableBar3n");
  263. return -1; // fail to create
  264. }
  265. if( !m_wndInBarDlg.Create(
  266. IDD_IN_BAR_DLG,
  267. &m_wndResizableBar3
  268. )
  269. )
  270. {
  271. TRACE0("Failed to create m_wndInBarDlgn");
  272. return -1; // fail to create
  273. }
  274. m_wndInBarDlg.ShowSizeGrip( FALSE );
  275. if( ! m_wndResizableBar4.Create(
  276. _T("Resizable Bar 4"),
  277. this,
  278. ID_VIEW_RESIZABLE_BAR_4
  279. )
  280. )
  281. {
  282. TRACE0("Failed to create m_wndResizableBar4n");
  283. return -1; // fail to create
  284. }
  285. if( (! m_wndStatusBar.Create( this ) )
  286. || (! m_wndStatusBar.SetIndicators(
  287. indicators,
  288. sizeof(indicators)/sizeof(UINT)
  289. ) )
  290. )
  291. {
  292. TRACE0("Failed to create status barn");
  293. return -1;      // fail to create
  294. }
  295.     m_wndMenuBar.EnableDocking( CBRS_ALIGN_ANY );
  296. m_wndToolBar.EnableDocking( CBRS_ALIGN_ANY );
  297. m_wndToolBarUiLook.EnableDocking( CBRS_ALIGN_ANY );
  298. m_wndResizableBar0.EnableDocking( CBRS_ALIGN_ANY );
  299. m_wndResizableBar1.EnableDocking( CBRS_ALIGN_ANY );
  300. m_wndResizableBar2.EnableDocking( CBRS_ALIGN_ANY );
  301. m_wndResizableBar3.EnableDocking( CBRS_ALIGN_ANY );
  302. m_wndResizableBar4.EnableDocking( CBRS_ALIGN_ANY );
  303. if( ! CExtControlBar::FrameEnableDocking( this ) )
  304. {
  305. ASSERT( FALSE );
  306. return -1;
  307. }
  308. VERIFY(
  309. g_CmdManager->SetBasicCommands(
  310. pApp->m_pszProfileName,
  311. g_statBasicCommands
  312. )
  313. );
  314. g_CmdManager->SerializeState(
  315. pApp->m_pszProfileName,
  316. pApp->m_pszRegistryKey,
  317. pApp->m_pszProfileName,
  318. false
  319. );
  320. if( ! CExtControlBar::ProfileBarStateLoad(
  321. this,
  322. pApp->m_pszRegistryKey,
  323. pApp->m_pszProfileName,
  324. pApp->m_pszProfileName,
  325. &m_dataFrameWP
  326. )
  327. )
  328. {
  329. DockControlBar( &m_wndMenuBar );
  330. DockControlBar( &m_wndToolBar );
  331. DockControlBar( &m_wndToolBarUiLook, AFX_IDW_DOCKBAR_RIGHT );
  332. m_wndResizableBar0.DockControlBar( AFX_IDW_DOCKBAR_RIGHT, 1, this, false );
  333. m_wndResizableBar1.DockControlBar( AFX_IDW_DOCKBAR_LEFT, 1, this, false );
  334. m_wndResizableBar2.DockControlBar( AFX_IDW_DOCKBAR_TOP, 2, this, false );
  335. m_wndResizableBar2.DockControlBar( &m_wndResizableBar3, true, false, this, true );
  336. m_wndResizableBar4.DockControlBar( AFX_IDW_DOCKBAR_BOTTOM, 2, this, false );
  337. RecalcLayout();
  338. }
  339. //CMenu * pSysMenu = GetSystemMenu( FALSE );
  340. // if( pSysMenu != NULL )
  341. // pSysMenu->EnableMenuItem(
  342. // SC_CLOSE,
  343. // MF_DISABLED|MF_GRAYED|MF_BYCOMMAND
  344. // );
  345. // m_wndMenuBar.FlashCaption( 65535, 250, RGB(255,255,0), RGB(0,128,0) );
  346. // m_wndToolBar.FlashCaption( 65535, 250, RGB(255,255,0), RGB(0,128,0) );
  347. // m_wndResizableBar0.FlashCaption( 65535, 375 );
  348. // m_wndResizableBar1.FlashCaption( 65535, 500, RGB(224,224,224), RGB(132,0,132) );
  349. // m_wndResizableBar2.FlashCaption( 65535, 250, RGB(255,255,0), RGB(0,128,0) );
  350. return 0;
  351. }
  352. BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
  353. {
  354. if( ! CExtNCW < CFrameWnd > :: PreCreateWindow( cs ) )
  355. return FALSE;
  356. cs.dwExStyle &= ~WS_EX_CLIENTEDGE;
  357. cs.lpszClass = AfxRegisterWndClass(0);
  358. return TRUE;
  359. }
  360. /////////////////////////////////////////////////////////////////////////////
  361. // CMainFrame diagnostics
  362. #ifdef _DEBUG
  363. void CMainFrame::AssertValid() const
  364. {
  365. CExtNCW < CFrameWnd > :: AssertValid();
  366. }
  367. void CMainFrame::Dump(CDumpContext& dc) const
  368. {
  369. CExtNCW < CFrameWnd > :: Dump( dc );
  370. }
  371. #endif //_DEBUG
  372. /////////////////////////////////////////////////////////////////////////////
  373. // CMainFrame message handlers
  374. void CMainFrame::OnSetFocus(CWnd* pOldWnd)
  375. {
  376. pOldWnd;
  377. // forward focus to the view window
  378. m_wndView.SetFocus();
  379. }
  380. BOOL CMainFrame::OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo)
  381. {
  382. if( ::GetFocus() == m_wndInBarEdit.GetSafeHwnd()
  383. && m_wndInBarEdit.OnCmdMsg( nID, nCode, pExtra, pHandlerInfo )
  384. )
  385. return TRUE;
  386. if( m_wndView.OnCmdMsg( nID, nCode, pExtra, pHandlerInfo ) )
  387. return TRUE;
  388. return CExtNCW < CFrameWnd > :: OnCmdMsg( nID, nCode, pExtra, pHandlerInfo );
  389. }
  390. BOOL CMainFrame::PreTranslateMessage(MSG* pMsg) 
  391. {
  392. if( m_wndToolBarUiLook.PreTranslateMessage( pMsg ) )
  393. return TRUE;
  394. if( m_wndMenuBar.TranslateMainFrameMessage(pMsg) )
  395. return TRUE;
  396. return CExtNCW < CFrameWnd > :: PreTranslateMessage(pMsg);
  397. }
  398. BOOL CMainFrame::DestroyWindow() 
  399. {
  400. CWinApp * pApp = ::AfxGetApp();
  401. ASSERT( pApp != NULL );
  402. ASSERT( pApp->m_pszRegistryKey != NULL );
  403. ASSERT( pApp->m_pszRegistryKey[0] != _T('') );
  404. ASSERT( pApp->m_pszProfileName != NULL );
  405. ASSERT( pApp->m_pszProfileName[0] != _T('') );
  406. VERIFY(
  407. CExtControlBar::ProfileBarStateSave(
  408. this,
  409. pApp->m_pszRegistryKey,
  410. pApp->m_pszProfileName,
  411. pApp->m_pszProfileName
  412. )
  413. );
  414. VERIFY(
  415. g_CmdManager->SerializeState(
  416. pApp->m_pszProfileName,
  417. pApp->m_pszRegistryKey,
  418. pApp->m_pszProfileName,
  419. true
  420. )
  421. );
  422. VERIFY(
  423. g_PaintManager.PaintManagerStateSave(
  424. pApp->m_pszRegistryKey,
  425. pApp->m_pszProfileName,
  426. pApp->m_pszProfileName
  427. )
  428. );
  429. g_CmdManager->ProfileWndRemove( GetSafeHwnd() );
  430. return CExtNCW < CFrameWnd > :: DestroyWindow();
  431. }
  432. void CMainFrame::ActivateFrame(int nCmdShow) 
  433. {
  434. // window placement persistence
  435. if( m_dataFrameWP.showCmd != SW_HIDE )
  436. {
  437. SetWindowPlacement( &m_dataFrameWP );
  438. CExtNCW < CFrameWnd > :: ActivateFrame( m_dataFrameWP.showCmd );
  439. m_dataFrameWP.showCmd = SW_HIDE;
  440. return;
  441. }
  442. CExtNCW < CFrameWnd > :: ActivateFrame( nCmdShow );
  443. }