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

界面编程

开发平台:

Visual C++

  1. // MainFrm.cpp : implementation of the CMainFrame class
  2. //
  3. #include "stdafx.h"
  4. #include "MDI.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, CMDIFrameWnd )
  14. BEGIN_MESSAGE_MAP( CMainFrame, CMDIFrameWnd )
  15. //{{AFX_MSG_MAP(CMainFrame)
  16. ON_WM_CREATE()
  17. //}}AFX_MSG_MAP
  18. ON_COMMAND_EX(ID_VIEW_MENUBAR, OnBarCheck )
  19. ON_UPDATE_COMMAND_UI(ID_VIEW_MENUBAR, OnUpdateControlBarMenu)
  20. ON_COMMAND_EX(ID_VIEW_UI_LOOK_BAR, OnBarCheck )
  21. ON_UPDATE_COMMAND_UI(ID_VIEW_UI_LOOK_BAR, OnUpdateControlBarMenu)
  22. ON_COMMAND_EX(ID_VIEW_UI_LOOK_BAR, OnBarCheck )
  23. ON_UPDATE_COMMAND_UI(ID_VIEW_UI_LOOK_BAR, OnUpdateControlBarMenu)
  24. ON_COMMAND_EX(ID_VIEW_RESIZABLE_BAR_0, OnBarCheck )
  25. ON_UPDATE_COMMAND_UI(ID_VIEW_RESIZABLE_BAR_0, OnUpdateControlBarMenu)
  26. ON_COMMAND_EX(ID_VIEW_RESIZABLE_BAR_1, OnBarCheck )
  27. ON_UPDATE_COMMAND_UI(ID_VIEW_RESIZABLE_BAR_1, OnUpdateControlBarMenu)
  28. ON_COMMAND_EX(ID_VIEW_RESIZABLE_BAR_2, OnBarCheck )
  29. ON_UPDATE_COMMAND_UI(ID_VIEW_RESIZABLE_BAR_2, OnUpdateControlBarMenu)
  30. ON_COMMAND_EX(ID_VIEW_RESIZABLE_BAR_3, OnBarCheck )
  31. ON_UPDATE_COMMAND_UI(ID_VIEW_RESIZABLE_BAR_3, OnUpdateControlBarMenu)
  32. ON_COMMAND_EX(ID_VIEW_RESIZABLE_BAR_4, OnBarCheck )
  33. ON_UPDATE_COMMAND_UI(ID_VIEW_RESIZABLE_BAR_4, OnUpdateControlBarMenu)
  34. ON_COMMAND_EX(ID_VIEW_RESIZABLE_BAR_TA, OnBarCheck )
  35. ON_UPDATE_COMMAND_UI(ID_VIEW_RESIZABLE_BAR_TA, OnUpdateControlBarMenu)
  36. ON_REGISTERED_MESSAGE(
  37. CExtPopupMenuWnd::g_nMsgPrepareMenu,
  38. OnExtMenuPrepare
  39. )
  40. END_MESSAGE_MAP()
  41. static UINT indicators[] =
  42. {
  43. ID_SEPARATOR,           // status line indicator
  44. ID_INDICATOR_CAPS,
  45. ID_INDICATOR_NUM,
  46. ID_INDICATOR_SCRL,
  47. };
  48. void CMainFrame::OnUpdateControlBarMenu(CCmdUI* pCmdUI)
  49. {
  50. CExtControlBar::DoFrameBarCheckUpdate( this, pCmdUI, true );
  51. }
  52. BOOL CMainFrame::OnBarCheck(UINT nID)
  53. {
  54. return CExtControlBar::DoFrameBarCheckCmd( this, nID, true );
  55. }
  56. /////////////////////////////////////////////////////////////////////////////
  57. // CMainFrame construction/destruction
  58. CMainFrame::CMainFrame()
  59. : m_wndInBarEdit( true, true )
  60. , m_wndInBarListBox( true, true )
  61. {
  62. CWinApp * pApp = ::AfxGetApp();
  63. ASSERT( pApp != NULL );
  64. ASSERT( pApp->m_pszRegistryKey != NULL );
  65. ASSERT( pApp->m_pszRegistryKey[0] != _T('') );
  66. ASSERT( pApp->m_pszProfileName != NULL );
  67. ASSERT( pApp->m_pszProfileName[0] != _T('') );
  68. if( ! g_PaintManager.PaintManagerStateLoad(
  69. pApp->m_pszRegistryKey,
  70. pApp->m_pszProfileName,
  71. pApp->m_pszProfileName
  72. )
  73. )
  74. g_PaintManager.InstallPaintManager(
  75. RUNTIME_CLASS(CExtPaintManagerOffice2007_R2_LunaBlue)
  76. );
  77. // window placement persistence
  78. ::memset( &m_dataFrameWP, 0, sizeof(WINDOWPLACEMENT) );
  79. m_dataFrameWP.length = sizeof(WINDOWPLACEMENT);
  80. m_dataFrameWP.showCmd = SW_HIDE;
  81. }
  82. CMainFrame::~CMainFrame()
  83. {
  84. }
  85. static UINT g_statBasicCommands[] =
  86. {
  87. ID_APP_ABOUT,
  88. ID_APP_EXIT,
  89. ID_FILE_NEW,
  90. ID_VIEW_MENUBAR,
  91. ID_VIEW_TOOLBAR,
  92. ID_VIEW_UI_LOOK_BAR,
  93. ID_VIEW_RESIZABLE_BAR_0,
  94. ID_VIEW_RESIZABLE_BAR_1,
  95. ID_VIEW_RESIZABLE_BAR_2,
  96. ID_VIEW_RESIZABLE_BAR_3,
  97. ID_VIEW_RESIZABLE_BAR_4,
  98. ID_VIEW_RESIZABLE_BAR_TA,
  99. ID_VIEW_STATUS_BAR,
  100. ID_EDIT_COPY,
  101. ID_EDIT_CUT,
  102. ID_EDIT_PASTE,
  103. ID_WINDOW_CASCADE,
  104. ID_WINDOW_TILE_HORZ,
  105. 0, // end of list
  106. };
  107. int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
  108. {
  109. if( CExtNCW < CMDIFrameWnd > :: OnCreate( lpCreateStruct ) == -1 )
  110. return -1;
  111. CWinApp * pApp = ::AfxGetApp();
  112. ASSERT( pApp != NULL );
  113. ASSERT( pApp->m_pszRegistryKey != NULL );
  114. ASSERT( pApp->m_pszRegistryKey[0] != _T('') );
  115. ASSERT( pApp->m_pszProfileName != NULL );
  116. ASSERT( pApp->m_pszProfileName[0] != _T('') );
  117. ASSERT( pApp->m_pszProfileName != NULL );
  118. g_CmdManager->ProfileSetup(
  119. pApp->m_pszProfileName,
  120. GetSafeHwnd()
  121. );
  122. VERIFY(
  123. g_CmdManager->UpdateFromMenu(
  124. pApp->m_pszProfileName,
  125. IDR_MAINFRAME
  126. )
  127. );
  128. VERIFY(
  129. g_CmdManager->UpdateFromMenu(
  130. pApp->m_pszProfileName,
  131. IDR_MDITYPE
  132. )
  133. );
  134. m_wndMenuBar.SetMdiWindowPopupName( _T("Window") );
  135. if( (! m_wndMenuBar.Create(
  136. NULL, // _T("Menu Bar"),
  137. this,
  138. ID_VIEW_MENUBAR
  139. ) )
  140. )
  141.     {
  142.         TRACE0("Failed to create menubarn");
  143.         return -1;      // failed to create
  144.     }
  145. if( (! m_wndToolBar.Create(
  146. _T("ToolBar"),
  147. this,
  148. AFX_IDW_TOOLBAR
  149. ) )
  150. || (! m_wndToolBar.LoadToolBar( IDR_MAINFRAME ) )
  151. )
  152. {
  153. TRACE0("Failed to create toolbarn");
  154. return -1;      // fail to create
  155. }
  156. if( (! m_wndToolBarUiLook.Create( NULL, this, ID_VIEW_UI_LOOK_BAR ) )
  157. || (! m_wndToolBarUiLook.ThemeSwitcherInit() )
  158. )
  159. {
  160. TRACE0("Failed to create toolbar2n");
  161. return -1;      // fail to create
  162. }
  163. if( !m_wndResizableBar0.Create(
  164. _T("Resizable Bar 0"),
  165. this,
  166. ID_VIEW_RESIZABLE_BAR_0
  167. )
  168. )
  169. {
  170. TRACE0("Failed to create m_wndResizableBar0n");
  171. return -1; // fail to create
  172. }
  173. if( !m_wndInBarEdit.Create(
  174. WS_CHILD|WS_VISIBLE|WS_VSCROLL|WS_HSCROLL
  175. |ES_MULTILINE|ES_LEFT|ES_WANTRETURN,
  176. CRect(0,0,0,0),
  177. &m_wndResizableBar0,
  178. m_wndResizableBar0.GetDlgCtrlID()
  179. )
  180. )
  181. {
  182. TRACE0("Failed to create m_wndInBarEditn");
  183. return -1; // fail to create
  184. }
  185. m_wndInBarEdit.SetFont(
  186. CFont::FromHandle(
  187. (HFONT)::GetStockObject(DEFAULT_GUI_FONT)
  188. )
  189. );
  190. if( !m_wndResizableBar1.Create(
  191. _T("Resizable Bar 1"),
  192. this,
  193. ID_VIEW_RESIZABLE_BAR_1
  194. )
  195. )
  196. {
  197. TRACE0("Failed to create m_wndResizableBar1n");
  198. return -1; // fail to create
  199. }
  200. if( !m_wndInBarListBox.Create(
  201. WS_CHILD|WS_VISIBLE|WS_VSCROLL|WS_HSCROLL
  202. |LBS_HASSTRINGS|LBS_NOINTEGRALHEIGHT
  203. |LBS_EXTENDEDSEL|LBS_MULTIPLESEL
  204. ,
  205. CRect(0,0,0,0),
  206. &m_wndResizableBar1,
  207. m_wndResizableBar1.GetDlgCtrlID()
  208. )
  209. )
  210. {
  211. TRACE0("Failed to create m_wndInBarListBoxn");
  212. return -1; // fail to create
  213. }
  214. m_wndInBarListBox.SetFont(
  215. CFont::FromHandle(
  216. (HFONT)::GetStockObject(DEFAULT_GUI_FONT)
  217. )
  218. );
  219. if( !m_wndResizableBar2.Create(
  220. _T("Resizable Bar 2"),
  221. this,
  222. ID_VIEW_RESIZABLE_BAR_2
  223. )
  224. )
  225. {
  226. TRACE0("Failed to create m_wndResizableBar2n");
  227. return -1; // fail to create
  228. }
  229. if( !m_wndInBarColorPicker.Create(
  230. _T("BUTTON"),
  231. _T(""),
  232. WS_CHILD|WS_VISIBLE,
  233. CRect(0,0,0,0),
  234. &m_wndResizableBar2,
  235. m_wndResizableBar2.GetDlgCtrlID()
  236. )
  237. )
  238. {
  239. TRACE0("Failed to create m_wndInBarColorPickern");
  240. return -1; // fail to create
  241. }
  242. if( !m_wndResizableBar3.Create(
  243. _T("Resizable Bar 3"),
  244. this,
  245. ID_VIEW_RESIZABLE_BAR_3
  246. )
  247. )
  248. {
  249. TRACE0("Failed to create m_wndResizableBar3n");
  250. return -1; // fail to create
  251. }
  252. if( !m_wndInBarDlg.Create(
  253. IDD_IN_BAR_DLG,
  254. &m_wndResizableBar3
  255. )
  256. )
  257. {
  258. TRACE0("Failed to create m_wndInBarDlgn");
  259. return -1; // fail to create
  260. }
  261. m_wndInBarDlg.ShowSizeGrip( FALSE );
  262. if( !m_wndResizableBar4.Create(
  263. _T("Resizable Bar 4"),
  264. this,
  265. ID_VIEW_RESIZABLE_BAR_4
  266. )
  267. )
  268. {
  269. TRACE0("Failed to create m_wndResizableBar4n");
  270. return -1; // fail to create
  271. }
  272. if( !m_wndResizableBarTA.Create(
  273. _T("Task Area"),
  274. this,
  275. ID_VIEW_RESIZABLE_BAR_TA
  276. )
  277. )
  278. {
  279. TRACE0("Failed to create m_wndResizableBarTAn");
  280. return -1; // fail to create
  281. }
  282. if( (! m_wndStatusBar.Create(this) )
  283. || (! m_wndStatusBar.SetIndicators(
  284. indicators,
  285. sizeof(indicators)/sizeof(UINT) ) )
  286. )
  287. {
  288. TRACE0("Failed to create status barn");
  289. return -1;      // fail to create
  290. }
  291. for( INT iLbStrNo = 0; iLbStrNo < 50; iLbStrNo++ )
  292. {
  293. CString s;
  294. s.Format( _T("String %02d"), iLbStrNo );
  295. m_wndInBarListBox.AddString( LPCTSTR(s) );
  296. s += _T("rn");
  297. m_wndInBarEdit.SetSel( -1, -1 );
  298. m_wndInBarEdit.ReplaceSel( s );
  299. }
  300. m_wndInBarEdit.SetSel( 0, 0 );
  301.     m_wndMenuBar.EnableDocking(CBRS_ALIGN_ANY);
  302. m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
  303. m_wndToolBarUiLook.EnableDocking(CBRS_ALIGN_ANY);
  304. m_wndResizableBar0.EnableDocking(CBRS_ALIGN_ANY);
  305. m_wndResizableBar1.EnableDocking(CBRS_ALIGN_ANY);
  306. m_wndResizableBar2.EnableDocking(CBRS_ALIGN_ANY);
  307. m_wndResizableBar3.EnableDocking(CBRS_ALIGN_ANY);
  308. m_wndResizableBar4.EnableDocking(CBRS_ALIGN_ANY);
  309. m_wndResizableBarTA.EnableDocking(CBRS_ALIGN_LEFT|CBRS_ALIGN_RIGHT);
  310. if( ! CExtControlBar::FrameEnableDocking(this) )
  311. {
  312. ASSERT( FALSE );
  313. return -1;
  314. }
  315. VERIFY(
  316. g_CmdManager->SetBasicCommands(
  317. pApp->m_pszProfileName,
  318. g_statBasicCommands
  319. )
  320. );
  321. if( ! CExtControlBar::ProfileBarStateLoad(
  322. this,
  323. pApp->m_pszRegistryKey,
  324. pApp->m_pszProfileName,
  325. pApp->m_pszProfileName,
  326. &m_dataFrameWP
  327. )
  328. )
  329. {
  330. DockControlBar( &m_wndMenuBar );
  331. DockControlBar( &m_wndToolBar );
  332. DockControlBar( &m_wndToolBarUiLook, AFX_IDW_DOCKBAR_RIGHT );
  333. m_wndResizableBar0.SetInitDesiredSizeVertical(   CSize( 120, 120 ) );
  334. m_wndResizableBar1.SetInitDesiredSizeHorizontal( CSize( 120, 120 ) );
  335. m_wndResizableBar2.SetInitDesiredSizeVertical(   CSize( 120, 120 ) );
  336. m_wndResizableBar3.SetInitDesiredSizeHorizontal( CSize( 120, 120 ) );
  337. m_wndResizableBar4.SetInitDesiredSizeVertical(   CSize( 120, 120 ) );
  338. m_wndResizableBar0.DockControlBar( AFX_IDW_DOCKBAR_LEFT, 1, this, false );
  339. m_wndResizableBar1.DockControlBarLTRB( 50, &m_wndResizableBar0, AFX_IDW_DOCKBAR_BOTTOM, true );
  340. m_wndResizableBar3.DockControlBar( AFX_IDW_DOCKBAR_BOTTOM, 2, this, false );
  341. m_wndResizableBar2.DockControlBarLTRB( 50, &m_wndResizableBar3, AFX_IDW_DOCKBAR_LEFT, true );
  342. m_wndResizableBar4.DockControlBar( AFX_IDW_DOCKBAR_RIGHT, 1, this, false );
  343. m_wndResizableBarTA.DockControlBar( AFX_IDW_DOCKBAR_RIGHT, 3, this, false );
  344. RecalcLayout();
  345. }
  346. g_CmdManager->SerializeState(
  347. pApp->m_pszProfileName,
  348. pApp->m_pszRegistryKey,
  349. pApp->m_pszProfileName,
  350. false
  351. );
  352. CRect rcWndTA;
  353. m_wndResizableBarTA.GetWindowRect( &rcWndTA );
  354. CSize _sizeTA = rcWndTA.Size();
  355. m_wndResizableBarTA.SetInitDesiredSizeFloating( _sizeTA );
  356. return 0;
  357. }
  358. BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
  359. {
  360. if( ! CExtNCW < CMDIFrameWnd > :: PreCreateWindow( cs ) )
  361. return FALSE;
  362. return TRUE;
  363. }
  364. /////////////////////////////////////////////////////////////////////////////
  365. // CMainFrame diagnostics
  366. #ifdef _DEBUG
  367. void CMainFrame::AssertValid() const
  368. {
  369. CExtNCW < CMDIFrameWnd > :: AssertValid();
  370. }
  371. void CMainFrame::Dump(CDumpContext& dc) const
  372. {
  373. CExtNCW < CMDIFrameWnd > :: Dump( dc );
  374. }
  375. #endif //_DEBUG
  376. /////////////////////////////////////////////////////////////////////////////
  377. // CMainFrame message handlers
  378. BOOL CMainFrame::PreTranslateMessage(MSG* pMsg) 
  379. {
  380. if( m_wndToolBarUiLook.PreTranslateMessage( pMsg ) )
  381. return TRUE;
  382. if( m_wndMenuBar.TranslateMainFrameMessage( pMsg ) )
  383. return TRUE;
  384. return CExtNCW < CMDIFrameWnd > :: PreTranslateMessage( pMsg );
  385. }
  386. BOOL CMainFrame::DestroyWindow() 
  387. {
  388. CWinApp * pApp = ::AfxGetApp();
  389. ASSERT( pApp != NULL );
  390. ASSERT( pApp->m_pszRegistryKey != NULL );
  391. ASSERT( pApp->m_pszRegistryKey[0] != _T('') );
  392. ASSERT( pApp->m_pszProfileName != NULL );
  393. ASSERT( pApp->m_pszProfileName[0] != _T('') );
  394. VERIFY(
  395. CExtControlBar::ProfileBarStateSave(
  396. this,
  397. pApp->m_pszRegistryKey,
  398. pApp->m_pszProfileName,
  399. pApp->m_pszProfileName
  400. )
  401. );
  402. VERIFY(
  403. g_CmdManager->SerializeState(
  404. pApp->m_pszProfileName,
  405. pApp->m_pszRegistryKey,
  406. pApp->m_pszProfileName,
  407. true
  408. )
  409. );
  410. VERIFY(
  411. g_PaintManager.PaintManagerStateSave(
  412. pApp->m_pszRegistryKey,
  413. pApp->m_pszProfileName,
  414. pApp->m_pszProfileName
  415. )
  416. );
  417. g_CmdManager->ProfileWndRemove( GetSafeHwnd() );
  418. return CExtNCW < CMDIFrameWnd > :: DestroyWindow();
  419. }
  420. void CMainFrame::ActivateFrame(int nCmdShow) 
  421. {
  422. // window placement persistence
  423. if( m_dataFrameWP.showCmd != SW_HIDE )
  424. {
  425. SetWindowPlacement( &m_dataFrameWP );
  426. CExtNCW < CMDIFrameWnd > :: ActivateFrame( m_dataFrameWP.showCmd );
  427. m_dataFrameWP.showCmd = SW_HIDE;
  428. return;
  429. }
  430. CExtNCW < CMDIFrameWnd > :: ActivateFrame( nCmdShow );
  431. }
  432. LRESULT CMainFrame::OnExtMenuPrepare(WPARAM wParam, LPARAM lParam)
  433. {
  434. wParam;
  435. lParam;
  436. //////////////////////////////////////////////////////////////////////////
  437. // Add "Windows..." command
  438. //////////////////////////////////////////////////////////////////////////
  439. CExtPopupMenuWnd::MsgPrepareMenuData_t * pData =
  440. reinterpret_cast
  441. < CExtPopupMenuWnd::MsgPrepareMenuData_t * >
  442. ( wParam );
  443. ASSERT( pData != NULL );
  444. CExtPopupMenuWnd * pPopup = pData->m_pPopup;
  445. ASSERT( pPopup != NULL );
  446. INT nItemPos;
  447. INT nNewPos = -1;
  448. nItemPos = pPopup->ItemFindPosForCmdID( __ID_MDIWND_DLGWINDOWS );
  449. if( nItemPos > 0 )
  450. {
  451. // "More Windows..." command found
  452. pPopup->ItemRemove( nItemPos );
  453. nNewPos = nItemPos;
  454. }
  455. else
  456. {
  457. int nMaxCmdID = 0;
  458. for( int nCmdID = __ID_MDIWNDLIST_FIRST; nCmdID <= __ID_MDIWNDLIST_LAST; nCmdID++ ){
  459. nItemPos = pPopup->ItemFindPosForCmdID( nCmdID );
  460. if( nItemPos > 0 ){
  461. if( nCmdID > nMaxCmdID ){
  462. nMaxCmdID = nCmdID;
  463. nNewPos = nItemPos;
  464. }
  465. }
  466. }
  467. if( nNewPos > 0 ){
  468. pPopup->ItemInsert(
  469. (UINT)CExtPopupMenuWnd::TYPE_SEPARATOR,
  470. ++nNewPos
  471. );
  472. nNewPos++;
  473. }
  474. }
  475. if( nNewPos > 0 )
  476. {
  477. UINT nCmdID = ID_WINDOWS_LIST;
  478. CExtCmdItem * pCmdItem =
  479. g_CmdManager->CmdGetPtr(
  480. g_CmdManager->ProfileNameFromWnd( this->GetSafeHwnd() ),
  481. nCmdID
  482. );
  483. if( pCmdItem == NULL ){
  484. pCmdItem = 
  485. g_CmdManager->CmdAllocPtr( 
  486. g_CmdManager->ProfileNameFromWnd( this->GetSafeHwnd() ), 
  487. nCmdID 
  488. );
  489. }
  490. ASSERT( pCmdItem != NULL );
  491. if( pCmdItem != NULL )
  492. {
  493. CExtSafeString sMoreWindows(_T("Windows..."));
  494. CExtSafeString sManageWindows(_T("Manages the currently open windows"));
  495. pCmdItem->m_sMenuText = sMoreWindows;
  496. pCmdItem->m_sToolbarText = pCmdItem->m_sMenuText;
  497. pCmdItem->m_sTipTool = sManageWindows;
  498. pCmdItem->m_sTipStatus = pCmdItem->m_sTipTool;
  499. pCmdItem->StateSetBasic( true );
  500. pPopup->ItemInsert(
  501. nCmdID,
  502. nNewPos,
  503. sMoreWindows,
  504. NULL,
  505. m_hWnd
  506. );
  507. }
  508. }
  509. return 1;
  510. }
  511. void CMainFrame::RecalcLayout(BOOL bNotify)
  512. {
  513. CExtNCW < CMDIFrameWnd > :: RecalcLayout( bNotify );
  514. }
  515. BOOL CMainFrame::OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo) 
  516. {
  517. #if (!defined __EXT_MFC_NO_MDI_WINDOWS_LIST_DIALOG)
  518. if( nCode == CN_COMMAND )
  519. {
  520. if( nID == ID_WINDOWS_LIST )
  521. {
  522. CMyMdiWindowsListDlg dlgMdiWindowsList( this );
  523. dlgMdiWindowsList.DoModal();
  524. return TRUE;
  525. }
  526. }
  527. #endif // (!defined __EXT_MFC_NO_MDI_WINDOWS_LIST_DIALOG)
  528. return CExtNCW < CMDIFrameWnd > :: OnCmdMsg( nID, nCode, pExtra, pHandlerInfo );
  529. }