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

界面编程

开发平台:

Visual C++

  1. // MainFrm.cpp : implementation of the CMainFrame class
  2. //
  3. #include "stdafx.h"
  4. #include "MDI_DynamicBars.h"
  5. #include "MainFrm.h"
  6. #if (!defined __EXT_MFC_NO_SHELL)
  7. #if (!defined __EXT_CONTROLS_SHELL_H)
  8. #include <ExtControlsShell.h>
  9. #endif
  10. #endif
  11. #ifdef _DEBUG
  12. #define new DEBUG_NEW
  13. #undef THIS_FILE
  14. static char THIS_FILE[] = __FILE__;
  15. #endif
  16. #define __DEMO_BARS_COUNT_ALL 20 // 40
  17. #define __DEMO_BARS_COUNT_INITIALLY_DOCKED 14 // 28
  18. IMPLEMENT_SERIAL( CSimpleControlBar, CExtDynamicControlBar, VERSIONABLE_SCHEMA|1 );
  19. /////////////////////////////////////////////////////////////////////////////
  20. // CMainFrame
  21. IMPLEMENT_DYNAMIC( CMainFrame, CMDIFrameWnd )
  22. BEGIN_MESSAGE_MAP( CMainFrame, CMDIFrameWnd )
  23. //{{AFX_MSG_MAP(CMainFrame)
  24. ON_WM_CREATE()
  25. ON_COMMAND(ID_PERSISTENCE_LOAD_FROM_FILE_RESIZABLE, OnPersistenceLoadFromFile_Resizable)
  26. ON_COMMAND(ID_PERSISTENCE_SAVE_TO_FILE_RESIZABLE, OnPersistenceSaveToFile_Resizable)
  27. ON_COMMAND(ID_PERSISTENCE_LOAD_FROM_FILE_FIXEDSIZED, OnPersistenceLoadFromFile_Fixedsized)
  28. ON_COMMAND(ID_PERSISTENCE_SAVE_TO_FILE_FIXEDSIZED, OnPersistenceSaveToFile_Fixedsized)
  29. //}}AFX_MSG_MAP
  30. ON_COMMAND_EX(ID_VIEW_MENUBAR, OnBarCheck )
  31. ON_UPDATE_COMMAND_UI(ID_VIEW_MENUBAR, OnUpdateControlBarMenu)
  32. ON_COMMAND_EX(ID_VIEW_UI_LOOK_BAR, OnBarCheck )
  33. ON_UPDATE_COMMAND_UI(ID_VIEW_UI_LOOK_BAR, OnUpdateControlBarMenu)
  34. ON_REGISTERED_MESSAGE(
  35. CExtPopupMenuWnd::g_nMsgPrepareMenu,
  36. OnExtMenuPrepare
  37. )
  38. END_MESSAGE_MAP()
  39. static UINT indicators[] =
  40. {
  41. ID_SEPARATOR,           // status line indicator
  42. ID_INDICATOR_CAPS,
  43. ID_INDICATOR_NUM,
  44. ID_INDICATOR_SCRL,
  45. };
  46. /////////////////////////////////////////////////////////////////////////////
  47. // CMainFrame construction/destruction
  48. CMainFrame::CMainFrame()
  49. : m_pBarPersistent( NULL )
  50. {
  51. CWinApp * pApp = ::AfxGetApp();
  52. ASSERT( pApp != NULL );
  53. ASSERT( pApp->m_pszRegistryKey != NULL );
  54. ASSERT( pApp->m_pszRegistryKey[0] != _T('') );
  55. ASSERT( pApp->m_pszProfileName != NULL );
  56. ASSERT( pApp->m_pszProfileName[0] != _T('') );
  57. if( ! g_PaintManager.PaintManagerStateLoad(
  58. pApp->m_pszRegistryKey,
  59. pApp->m_pszProfileName,
  60. pApp->m_pszProfileName
  61. )
  62. )
  63. g_PaintManager.InstallPaintManager(
  64. RUNTIME_CLASS(CExtPaintManagerStudio2005)
  65. );
  66. // CExtPopupMenuWnd::g_bMenuExpanding = false;
  67. // CExtPopupMenuWnd::g_bMenuHighlightRarely = false;
  68. ::memset( &m_dataFrameWP, 0, sizeof(WINDOWPLACEMENT) );
  69. m_dataFrameWP.showCmd = SW_HIDE;
  70. }
  71. CMainFrame::~CMainFrame()
  72. {
  73. }
  74. #if (!defined __EXT_MFC_NO_TAB_CONTROLBARS)
  75. void CMainFrame::OnUpdateControlBarMenu(CCmdUI* pCmdUI)
  76. {
  77. // CFrameWnd::OnUpdateControlBarMenu( pCmdUI );
  78. CExtControlBar::DoFrameBarCheckUpdate(
  79. this,
  80. pCmdUI,
  81. false
  82. );
  83. }
  84. BOOL CMainFrame::OnBarCheck(UINT nID)
  85. {
  86. // return CFrameWnd::OnBarCheck( nID );
  87. return
  88. CExtControlBar::DoFrameBarCheckCmd(
  89. this,
  90. nID,
  91. false
  92. );
  93. }
  94. #endif // (!defined __EXT_MFC_NO_TAB_CONTROLBARS)
  95. int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
  96. {
  97. CWinApp * pApp = ::AfxGetApp();
  98. ASSERT( pApp != NULL );
  99. ASSERT( pApp->m_pszRegistryKey != NULL );
  100. ASSERT( pApp->m_pszRegistryKey[0] != _T('') );
  101. ASSERT( pApp->m_pszProfileName != NULL );
  102. ASSERT( pApp->m_pszProfileName[0] != _T('') );
  103. if( CExtNCW < CMDIFrameWnd > :: OnCreate( lpCreateStruct ) == -1 )
  104. {
  105. ASSERT( FALSE );
  106. return -1;
  107. }
  108. VERIFY(
  109. g_CmdManager->ProfileWndAdd(
  110. pApp->m_pszProfileName,
  111. GetSafeHwnd()
  112. )
  113. );
  114. VERIFY(
  115. g_CmdManager->UpdateFromMenu(
  116. pApp->m_pszProfileName,
  117. IDR_MAINFRAME
  118. )
  119. );
  120. VERIFY(
  121. g_CmdManager->UpdateFromMenu(
  122. pApp->m_pszProfileName,
  123. IDR_MDIDOCTYPE
  124. )
  125. );
  126. VERIFY(
  127. g_CmdManager->UpdateFromMenu(
  128. pApp->m_pszProfileName,
  129. IDR_DYNAMIC_BAR
  130. )
  131. );
  132. m_wndMenuBar.SetMdiWindowPopupName( _T("Window") );
  133. if( ! m_wndMenuBar.Create(
  134. NULL,
  135. this,
  136. ID_VIEW_MENUBAR
  137. )
  138. )
  139.     {
  140.         TRACE0("Failed to create menubarn");
  141.         return -1;      // failed to create
  142.     }
  143. if( (! m_wndToolBar.Create( NULL, this, AFX_IDW_TOOLBAR ) )
  144. || (! m_wndToolBar.LoadToolBar( IDR_MAINFRAME ) )
  145. )
  146. {
  147. TRACE0("Failed to create m_wndToolBar toolbarn");
  148. return -1;      // fail to create
  149. }
  150. if( (! m_wndToolBarUiLook.Create( NULL, this, ID_VIEW_UI_LOOK_BAR ) )
  151. || (! m_wndToolBarUiLook.ThemeSwitcherInit() )
  152. )
  153. {
  154. TRACE0("Failed to create m_wndToolBarUiLook toolbarn");
  155. return -1;      // fail to create
  156. }
  157. m_wndStatusBar.m_bHideTextOnDisabledPanes = false;
  158. m_wndStatusBar.m_bDrawPaneSeparatorsInsteadOfBorders = true;
  159. if( (! m_wndStatusBar.Create(this) )
  160. || (! m_wndStatusBar.SetIndicators(
  161. indicators,
  162. sizeof(indicators) / sizeof(UINT)
  163. ) )
  164. )
  165. {
  166. TRACE0("Failed to create status barn");
  167. return -1;      // fail to create
  168. }
  169. m_wndMenuBar.EnableDocking( CBRS_ALIGN_ANY );
  170. m_wndToolBar.EnableDocking( CBRS_ALIGN_ANY );
  171. m_wndToolBarUiLook.EnableDocking( CBRS_ALIGN_ANY );
  172. if( ! CExtControlBar::FrameEnableDocking(this) )
  173. {
  174. ASSERT( FALSE );
  175. return -1;
  176. }
  177. #if (!defined __EXT_MFC_NO_TAB_CONTROLBARS)
  178. if( ! CExtControlBar::FrameInjectAutoHideAreas(this) )
  179. {
  180. ASSERT( FALSE );
  181. return -1;
  182. }
  183. #endif // (!defined __EXT_MFC_NO_TAB_CONTROLBARS)
  184. static UINT statBasicCommands[] =
  185. {
  186. ID_FILE_NEW, 
  187. ID_FILE_OPEN, 
  188. ID_FILE_SAVE,
  189. ID_APP_EXIT,
  190. ID_APP_ABOUT,
  191. ID_FILE_PRINT,
  192. ID_FILE_PRINT_SETUP, 
  193. ID_EDIT_COPY, 
  194. ID_EDIT_CUT, 
  195. ID_EDIT_PASTE, 
  196. ID_EDIT_UNDO, 
  197. ID_VIEW_TOOLBAR, 
  198. ID_WINDOW_TILE_HORZ,
  199. ID_VIEW_UI_LOOK_BAR,
  200. ID_PERSISTENCE_LOAD_FROM_FILE_RESIZABLE,
  201. ID_PERSISTENCE_SAVE_TO_FILE_RESIZABLE,
  202. 0 // end of commands list
  203. }; // statBasicCommands array
  204. VERIFY(
  205. g_CmdManager->SetBasicCommands(
  206. pApp->m_pszProfileName,
  207. statBasicCommands
  208. )
  209. );
  210. #if (!defined __EXT_MFC_NO_TABMDI_CTRL)
  211. if( ! m_wndMdiTabs.Create(
  212. this,
  213. CRect(0,0,0,0),
  214. UINT(__EXT_MFC_IDC_STATIC),
  215. WS_CHILD|WS_VISIBLE|WS_CLIPCHILDREN|WS_CLIPSIBLINGS,
  216. __ETWS_MDI_DEFAULT|__ETWS_HIDE_ICONS|__ETWS_ITEM_DRAGGING
  217. )
  218. )
  219. {
  220. ASSERT( FALSE );
  221. return -1;
  222. }
  223. // m_wndMdiTabs.ModifyTabWndStyleEx( 0, __ETWS_EX_CLOSE_ON_TABS, false );
  224. #endif // (!defined __EXT_MFC_NO_TABMDI_CTRL)
  225. // install dynamic bar site for this frame window
  226. CExtDynamicBarSite::m_nBarListInMenusCmdID = ID_DYNAMIC_BARS_LIST;
  227. CExtDynamicBarSite::Install( this );
  228. // allocate and initialize one persistent bar
  229. HICON hIcon = (HICON)
  230. ::LoadImage(
  231. ::AfxGetInstanceHandle(),
  232. MAKEINTRESOURCE(IDR_MAINFRAME),
  233. IMAGE_ICON,
  234. 16,
  235. 16,
  236. 0
  237. );
  238. ASSERT( hIcon != NULL );
  239. CExtCmdIcon icon;
  240. icon.AssignFromHICON( hIcon, false );
  241. m_pBarPersistent =
  242. CExtDynamicBarSite::BarAlloc(
  243. _T("Persistent Bar"),
  244. icon,
  245. 0,
  246. RUNTIME_CLASS(CSimpleControlBar),
  247. true // this bar is persistent
  248. );
  249. ASSERT( m_pBarPersistent != NULL );
  250. m_pBarPersistent->m_nMdiMenuResourceID =
  251. IDR_DYNAMIC_BAR;
  252. m_pBarPersistent->m_nMdiAccelTableResourceID =
  253. IDR_MAINFRAME;
  254. UINT nCmdID = (UINT)m_pBarPersistent->GetDlgCtrlID();
  255. CExtCmdItem * pCmdItem =
  256. g_CmdManager->CmdGetPtr(
  257. pApp->m_pszProfileName,
  258. nCmdID
  259. );
  260. ASSERT( pCmdItem != NULL );
  261. pCmdItem->StateSetBasic();
  262. CSimpleDynamicEdit * pEdit = new CSimpleDynamicEdit;
  263. pEdit->m_brush.CreateSolidBrush(
  264. ( STATIC_DOWNCAST(
  265. CSimpleControlBar,
  266. m_pBarPersistent
  267. )
  268. ) -> m_clrEditorBackground
  269. );
  270. VERIFY(
  271. pEdit->Create(
  272. m_pBarPersistent->m_hWnd,
  273. _T("rn")
  274. _T("This is persistent bar.rn")
  275. _T("rn")
  276. _T("Persistent bars are not re-createdrn")
  277. _T("when the CExtDynamicBarSite::StateLoad()rn")
  278. _T("method is invoked.rn")
  279. _T("rn")
  280. )
  281. );
  282. static const CSize _sizeDesiredDocked( 100, 100 );
  283. static const CSize _sizeDesiredFloating( 200, 150 );
  284. m_pBarPersistent->SetInitDesiredSizeHorizontal( _sizeDesiredDocked );
  285. m_pBarPersistent->SetInitDesiredSizeVertical( _sizeDesiredDocked );
  286. m_pBarPersistent->SetInitDesiredSizeFloating( _sizeDesiredFloating );
  287. ShowControlBar( m_pBarPersistent, TRUE, TRUE );
  288. // allocate and initialize dynamic bars
  289. if( ! CExtDynamicBarSite::StateLoad(
  290. pApp->m_pszRegistryKey,
  291. pApp->m_pszProfileName,
  292. pApp->m_pszProfileName
  293. )
  294. )
  295. { // if all bars were not loaded from registry, then allocate them
  296. HICON hIcon = (HICON)
  297. ::LoadImage(
  298. ::AfxGetInstanceHandle(),
  299. MAKEINTRESOURCE(IDR_MAINFRAME),
  300. IMAGE_ICON,
  301. 16,
  302. 16,
  303. 0
  304. );
  305. ASSERT( hIcon != NULL );
  306. CExtCmdIcon icon;
  307. icon.AssignFromHICON( hIcon, false );
  308. int i;
  309. for( i = 0; i < __DEMO_BARS_COUNT_ALL; i++ )
  310. {
  311. CExtSafeString strBarCaption;
  312. strBarCaption.Format(
  313. _T("Dynamic Bar %d"),
  314. i
  315. );
  316. m_arrAllDynamicBars.Add(
  317. CExtDynamicBarSite::BarAlloc(
  318. strBarCaption,
  319. icon,
  320. 0,
  321. RUNTIME_CLASS(CSimpleControlBar)
  322. )
  323. );
  324. ASSERT( m_arrAllDynamicBars[i] != NULL );
  325. m_arrAllDynamicBars[i]->m_nMdiMenuResourceID =
  326. IDR_DYNAMIC_BAR;
  327. m_arrAllDynamicBars[i]->m_nMdiAccelTableResourceID =
  328. IDR_MAINFRAME;
  329. } // for( i = 0; i < __DEMO_BARS_COUNT_ALL; i++ )
  330. } // if all bars were not loaded from registry, then allocate them
  331. else
  332. { // else just get them
  333. CExtDynamicBarSite::BarEnumGetArray( m_arrAllDynamicBars, false, true );
  334. } // else just get them
  335. int i;
  336. for( i = 0; i < m_arrAllDynamicBars.GetSize(); i++ )
  337. { // create edit controls inside all dynamic bars
  338. UINT nCmdID = (UINT)m_arrAllDynamicBars[i]->GetDlgCtrlID();
  339. CExtCmdItem * pCmdItem =
  340. g_CmdManager->CmdGetPtr(
  341. pApp->m_pszProfileName,
  342. nCmdID
  343. );
  344. ASSERT( pCmdItem != NULL );
  345. pCmdItem->StateSetBasic();
  346. CString strEditorText;
  347. strEditorText.Format(
  348. _T("rn")
  349. _T("Edit control inside dynamic resizable control bar "%s"rn")
  350. _T("rn")
  351. _T("rn")
  352. _T("Please try to invoke:rn")
  353. _T("rn")
  354. _T("- "Options" menus, marked with a down arrow in captions of dynamic control barsrn")
  355. _T("rn")
  356. _T("- context menus over the MDI tab window (available in Prof-UIS and Prof-UIS Trial only)rn")
  357. _T("rn")
  358. _T("- system menus of MDI child framesrn")
  359. _T("rn")
  360. _T("- "View | Dynamic Resizable Bars" menurn")
  361. _T("rn")
  362. _T("rn")
  363. ,
  364. LPCTSTR( m_arrAllDynamicBars[i]->m_strCaptionText )
  365. );
  366. CSimpleDynamicEdit * pEdit = new CSimpleDynamicEdit;
  367. pEdit->m_brush.CreateSolidBrush(
  368. ( STATIC_DOWNCAST(
  369. CSimpleControlBar,
  370. m_arrAllDynamicBars[i]
  371. )
  372. ) -> m_clrEditorBackground
  373. );
  374. VERIFY(
  375. pEdit->Create(
  376. m_arrAllDynamicBars[i]->m_hWnd,
  377. LPCTSTR( strEditorText )
  378. )
  379. );
  380. // dynamic bars are initially invisible
  381. static const CSize _sizeDesiredDocked( 80, 60 );
  382. static const CSize _sizeDesiredFloating( 200, 150 );
  383. m_arrAllDynamicBars[i]->SetInitDesiredSizeHorizontal( _sizeDesiredDocked );
  384. m_arrAllDynamicBars[i]->SetInitDesiredSizeVertical( _sizeDesiredDocked );
  385. m_arrAllDynamicBars[i]->SetInitDesiredSizeFloating( _sizeDesiredFloating );
  386. ShowControlBar( m_arrAllDynamicBars[i], TRUE, TRUE );
  387. } // create edit controls inside all dynamic bars
  388. if( ! CExtControlBar::ProfileBarStateLoad(
  389. this,
  390. pApp->m_pszRegistryKey,
  391. pApp->m_pszProfileName,
  392. pApp->m_pszProfileName,
  393. &m_dataFrameWP
  394. )
  395. )
  396. {
  397. DockControlBar( &m_wndMenuBar );
  398. DockControlBar( &m_wndToolBar );
  399. DockControlBar( &m_wndToolBarUiLook, AFX_IDW_DOCKBAR_RIGHT );
  400. int i, j;
  401. for( i = 0, j = 0; i < m_arrAllDynamicBars.GetSize(); j++ )
  402. {
  403. static const UINT g_ArrDockBarIDs[] =
  404. {
  405. AFX_IDW_DOCKBAR_TOP,
  406. AFX_IDW_DOCKBAR_BOTTOM,
  407. AFX_IDW_DOCKBAR_LEFT,
  408. AFX_IDW_DOCKBAR_RIGHT,
  409. };
  410. UINT nDocBarID =
  411. g_ArrDockBarIDs[
  412. j % (sizeof(g_ArrDockBarIDs)/sizeof(g_ArrDockBarIDs[0]))
  413. ];
  414. bool bDockIntoDocument = false;
  415. if( nDocBarID == AFX_IDW_DOCKBAR_FLOAT )
  416. {
  417. nDocBarID = AFX_IDW_DOCKBAR_LEFT;
  418. bDockIntoDocument = true;
  419. }
  420. m_arrAllDynamicBars[i]->
  421. DockControlBarInnerOuter(
  422. nDocBarID,
  423. true,
  424. this,
  425. false
  426. );
  427. if( i >= __DEMO_BARS_COUNT_INITIALLY_DOCKED )
  428. {
  429. m_arrAllDynamicBars[i]->BarStateSet(
  430. CExtDynamicControlBar::__EDBS_DOCUMENT,
  431. true
  432. );
  433. } // if( i >= __DEMO_BARS_COUNT_INITIALLY_DOCKED )
  434. i++;
  435. if( i < m_arrAllDynamicBars.GetSize() )
  436. {
  437. m_arrAllDynamicBars[i]->
  438. DockControlBarLTRB(
  439. m_arrAllDynamicBars[i-1],
  440. ( nDocBarID == AFX_IDW_DOCKBAR_LEFT
  441. || nDocBarID == AFX_IDW_DOCKBAR_RIGHT
  442. )
  443. ? AFX_IDW_DOCKBAR_BOTTOM
  444. : AFX_IDW_DOCKBAR_RIGHT
  445. ,
  446. false
  447. );
  448. if( i >= __DEMO_BARS_COUNT_INITIALLY_DOCKED )
  449. {
  450. m_arrAllDynamicBars[i]->BarStateSet(
  451. CExtDynamicControlBar::__EDBS_DOCUMENT,
  452. true
  453. );
  454. } // if( i >= __DEMO_BARS_COUNT_INITIALLY_DOCKED )
  455. i++;
  456. } // if( i < m_arrAllDynamicBars.GetSize() )
  457. } // for( i = 0, j = 0; i < m_arrAllDynamicBars.GetSize(); j++ )
  458. #if (!defined __EXT_MFC_NO_TAB_CONTROLBARS)
  459. m_pBarPersistent->BarStateSet(
  460. CExtDynamicControlBar::__EDBS_AUTO_HIDDEN,
  461. true
  462. );
  463. #endif // (!defined __EXT_MFC_NO_TAB_CONTROLBARS)
  464. RecalcLayout();
  465. }
  466. g_CmdManager->SerializeState(
  467. pApp->m_pszProfileName,
  468. pApp->m_pszRegistryKey,
  469. pApp->m_pszProfileName,
  470. false
  471. );
  472. PostMessage( WM_COMMAND, ID_WINDOW_CASCADE );
  473. // m_pBarPersistent->FlashCaption( 65535, 250, RGB(255,255,0), RGB(0,128,0) );
  474. return 0;
  475. }
  476. BOOL CMainFrame::DestroyWindow() 
  477. {
  478. CWinApp * pApp = ::AfxGetApp();
  479. ASSERT( pApp != NULL );
  480. ASSERT( pApp->m_pszRegistryKey != NULL );
  481. ASSERT( pApp->m_pszRegistryKey[0] != _T('') );
  482. ASSERT( pApp->m_pszProfileName != NULL );
  483. ASSERT( pApp->m_pszProfileName[0] != _T('') );
  484. pApp;
  485. VERIFY(
  486. CExtControlBar::ProfileBarStateSave(
  487. this,
  488. pApp->m_pszRegistryKey,
  489. pApp->m_pszProfileName,
  490. pApp->m_pszProfileName,
  491. &m_dataFrameWP
  492. )
  493. );
  494. VERIFY(
  495. CExtDynamicBarSite::StateSave(
  496. pApp->m_pszRegistryKey,
  497. pApp->m_pszProfileName,
  498. pApp->m_pszProfileName
  499. )
  500. );
  501. VERIFY(
  502. g_CmdManager->SerializeState(
  503. pApp->m_pszProfileName,
  504. pApp->m_pszRegistryKey,
  505. pApp->m_pszProfileName,
  506. true
  507. )
  508. );
  509. VERIFY(
  510. g_PaintManager.PaintManagerStateSave(
  511. pApp->m_pszRegistryKey,
  512. pApp->m_pszProfileName,
  513. pApp->m_pszProfileName
  514. )
  515. );
  516. g_CmdManager->ProfileWndRemove( GetSafeHwnd() );
  517. return CExtNCW < CMDIFrameWnd > :: DestroyWindow();
  518. }
  519. void CMainFrame::ActivateFrame(int nCmdShow) 
  520. {
  521. if( m_dataFrameWP.showCmd != SW_HIDE )
  522. {
  523. SetWindowPlacement( &m_dataFrameWP );
  524. CExtNCW < CMDIFrameWnd > :: ActivateFrame( m_dataFrameWP.showCmd );
  525. m_dataFrameWP.showCmd = SW_HIDE;
  526. return;
  527. }
  528. CExtNCW < CMDIFrameWnd > :: ActivateFrame( nCmdShow );
  529. }
  530. BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
  531. {
  532. if( ! CExtNCW < CMDIFrameWnd > :: PreCreateWindow( cs ) )
  533. return FALSE;
  534. cs.style |= WS_MAXIMIZE;
  535. return TRUE;
  536. }
  537. /////////////////////////////////////////////////////////////////////////////
  538. // CMainFrame diagnostics
  539. #ifdef _DEBUG
  540. void CMainFrame::AssertValid() const
  541. {
  542. CExtNCW < CMDIFrameWnd > :: AssertValid();
  543. }
  544. void CMainFrame::Dump(CDumpContext& dc) const
  545. {
  546. CExtNCW < CMDIFrameWnd > :: Dump( dc );
  547. }
  548. #endif //_DEBUG
  549. /////////////////////////////////////////////////////////////////////////////
  550. // CMainFrame message handlers
  551. BOOL CMainFrame::PreTranslateMessage(MSG* pMsg) 
  552. {
  553. if( m_wndToolBarUiLook.PreTranslateMessage( pMsg ) )
  554. return TRUE;
  555. if( m_wndMenuBar.TranslateMainFrameMessage( pMsg ) )
  556. return TRUE;
  557. return CExtNCW < CMDIFrameWnd > :: PreTranslateMessage( pMsg );
  558. }
  559. LRESULT CMainFrame::OnExtMenuPrepare(WPARAM wParam, LPARAM lParam)
  560. {
  561. wParam;
  562. lParam;
  563. //////////////////////////////////////////////////////////////////////////
  564. // Add "Windows..." command
  565. //////////////////////////////////////////////////////////////////////////
  566. CExtPopupMenuWnd::MsgPrepareMenuData_t * pData =
  567. reinterpret_cast
  568. < CExtPopupMenuWnd::MsgPrepareMenuData_t * >
  569. ( wParam );
  570. ASSERT( pData != NULL );
  571. CExtPopupMenuWnd * pPopup = pData->m_pPopup;
  572. ASSERT( pPopup != NULL );
  573. INT nItemPos;
  574. INT nNewPos = -1;
  575. nItemPos = pPopup->ItemFindPosForCmdID( __ID_MDIWND_DLGWINDOWS );
  576. if( nItemPos > 0 )
  577. {
  578. // "More Windows..." command found
  579. pPopup->ItemRemove( nItemPos );
  580. nNewPos = nItemPos;
  581. }
  582. else
  583. {
  584. int nMaxCmdID = 0;
  585. for( int nCmdID = __ID_MDIWNDLIST_FIRST; nCmdID <= __ID_MDIWNDLIST_LAST; nCmdID++ ){
  586. nItemPos = pPopup->ItemFindPosForCmdID( nCmdID );
  587. if( nItemPos > 0 ){
  588. if( nCmdID > nMaxCmdID ){
  589. nMaxCmdID = nCmdID;
  590. nNewPos = nItemPos;
  591. }
  592. }
  593. }
  594. if( nNewPos > 0 ){
  595. pPopup->ItemInsert(
  596. (UINT)CExtPopupMenuWnd::TYPE_SEPARATOR,
  597. ++nNewPos
  598. );
  599. nNewPos++;
  600. }
  601. }
  602. if( nNewPos > 0 )
  603. {
  604. UINT nCmdID = ID_WINDOWS_LIST;
  605. CExtCmdItem * pCmdItem =
  606. g_CmdManager->CmdGetPtr(
  607. g_CmdManager->ProfileNameFromWnd( this->GetSafeHwnd() ),
  608. nCmdID
  609. );
  610. if( pCmdItem == NULL ){
  611. pCmdItem = 
  612. g_CmdManager->CmdAllocPtr( 
  613. g_CmdManager->ProfileNameFromWnd( this->GetSafeHwnd() ), 
  614. nCmdID 
  615. );
  616. }
  617. ASSERT( pCmdItem != NULL );
  618. if( pCmdItem != NULL )
  619. {
  620. CExtSafeString sMoreWindows(_T("Windows..."));
  621. CExtSafeString sManageWindows(_T("Manages the currently open windows"));
  622. pCmdItem->m_sMenuText = sMoreWindows;
  623. pCmdItem->m_sToolbarText = pCmdItem->m_sMenuText;
  624. pCmdItem->m_sTipTool = sManageWindows;
  625. pCmdItem->m_sTipStatus = pCmdItem->m_sTipTool;
  626. pCmdItem->StateSetBasic( true );
  627. pPopup->ItemInsert(
  628. nCmdID,
  629. nNewPos,
  630. sMoreWindows,
  631. NULL,
  632. m_hWnd
  633. );
  634. }
  635. }
  636. return 1;
  637. }
  638. BOOL CMainFrame::OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo) 
  639. {
  640. if( CExtDynamicBarSite::OnCmdMsg( nID, nCode, pExtra, pHandlerInfo ) )
  641. return TRUE;
  642. if( nCode == CN_COMMAND )
  643. {
  644. #ifndef __EXT_MFC_NO_MDI_WINDOWS_LIST_DIALOG
  645. if( nID == ID_WINDOWS_LIST )
  646. {
  647. CExtMdiWindowsListDlg dlgMdiWindowsList( this );
  648. dlgMdiWindowsList.DoModal();
  649. return TRUE;
  650. }
  651. #endif // #ifndef __EXT_MFC_NO_MDI_WINDOWS_LIST_DIALOG
  652. }
  653. return CExtNCW < CMDIFrameWnd > :: OnCmdMsg( nID, nCode, pExtra, pHandlerInfo );
  654. }
  655. void CMainFrame::OnPersistenceLoadFromFile_Resizable() 
  656. {
  657. CString strPathName;
  658. #if ( ! defined __EXT_MFC_NO_SHELL_DIALOG_FILE )
  659. CExtShellDialogFile dlgShellFile(
  660. NULL,
  661. CExtShellDialogFile::__EFDT_OPEN_SINGLE
  662. );
  663. dlgShellFile.m_comboFileTypes.SetFilter(
  664. _T("Resizable bar state files (*.RBS)|*.RBS|All files (*.*)|*.*||")
  665. );
  666. dlgShellFile.m_nInitialFileTypeIndex = 0;
  667. dlgShellFile.m_bFilesMustExist = true;
  668. dlgShellFile.m_strCustomDialogCaption = _T("Open resizable bar state from file");
  669. dlgShellFile.m_strEditorTextInitial = _T(".\Default.RBS");
  670. if( dlgShellFile.DoModal() != IDOK )
  671. return;
  672. ASSERT( dlgShellFile.m_arrRetValNames.GetSize() == 1 );
  673. strPathName = LPCTSTR(dlgShellFile.m_arrRetValNames[0]);
  674. #else // ( ! defined __EXT_MFC_NO_SHELL_DIALOG_FILE )
  675. CFileDialog dlgFile(
  676. TRUE,
  677. _T("Resizable bar state"),
  678. _T(".\Default.RBS"),
  679. OFN_ENABLESIZING|OFN_EXPLORER
  680. |OFN_LONGNAMES|OFN_PATHMUSTEXIST|OFN_FILEMUSTEXIST
  681. |OFN_NOCHANGEDIR|OFN_NODEREFERENCELINKS
  682. ,
  683. _T("Resizable bar state files (*.RBS)|*.RBS|All files (*.*)|*.*||"),
  684. this
  685. );
  686. dlgFile.m_ofn.lpstrTitle = _T("Open resizable bar state from file");
  687. if( dlgFile.DoModal() != IDOK )
  688. return;
  689. strPathName = dlgFile.m_ofn.lpstrFile;
  690. ASSERT( ! strPathName.IsEmpty() );
  691. #endif // else from if ( ! defined __EXT_MFC_NO_SHELL_DIALOG_FILE )
  692. try
  693. {
  694. // clean own array of dynamic bars
  695. m_arrAllDynamicBars.RemoveAll();
  696. // init data stream
  697. CFile _file(
  698. strPathName,
  699. CFile::modeRead
  700. |CFile::typeBinary
  701. );
  702. CArchive ar( &_file, CArchive::load );
  703. // load fully dynamic bars
  704. CExtDynamicBarSite::StateSerialize( ar );
  705. // query own array of all the fully dynamic bars
  706. CExtDynamicBarSite::BarEnumGetArray( m_arrAllDynamicBars, false, true );
  707. // re-initialize contained child windows in dynamic bars
  708. CWinApp * pApp = ::AfxGetApp();
  709. ASSERT( pApp != NULL );
  710. ASSERT( pApp->m_pszRegistryKey != NULL );
  711. ASSERT( pApp->m_pszRegistryKey[0] != _T('') );
  712. ASSERT( pApp->m_pszProfileName != NULL );
  713. ASSERT( pApp->m_pszProfileName[0] != _T('') );
  714. int i;
  715. for( i = 0; i < m_arrAllDynamicBars.GetSize(); i++ )
  716. { // create edit controls inside all dynamic bars
  717. UINT nCmdID = (UINT)m_arrAllDynamicBars[i]->GetDlgCtrlID();
  718. CExtCmdItem * pCmdItem =
  719. g_CmdManager->CmdGetPtr(
  720. pApp->m_pszProfileName,
  721. nCmdID
  722. );
  723. ASSERT( pCmdItem != NULL );
  724. pCmdItem->StateSetBasic();
  725. CString strEditorText;
  726. strEditorText.Format(
  727. _T("rn")
  728. _T("Edit control inside dynamic resizable control bar "%s"rn")
  729. _T("rn")
  730. _T("rn")
  731. _T("Please try to invoke:rn")
  732. _T("rn")
  733. _T("- "Options" menus, marked with a down arrow in captions of dynamic control barsrn")
  734. _T("rn")
  735. _T("- context menus over the MDI tab window (available in Prof-UIS and Prof-UIS Trial only)rn")
  736. _T("rn")
  737. _T("- system menus of MDI child framesrn")
  738. _T("rn")
  739. _T("- "View | Dynamic Resizable Bars" menurn")
  740. _T("rn")
  741. _T("rn")
  742. ,
  743. LPCTSTR( m_arrAllDynamicBars[i]->m_strCaptionText )
  744. );
  745. CSimpleDynamicEdit * pEdit = new CSimpleDynamicEdit;
  746. pEdit->m_brush.CreateSolidBrush(
  747. ( STATIC_DOWNCAST(
  748. CSimpleControlBar,
  749. m_arrAllDynamicBars[i]
  750. )
  751. ) -> m_clrEditorBackground
  752. );
  753. VERIFY(
  754. pEdit->Create(
  755. m_arrAllDynamicBars[i]->m_hWnd,
  756. LPCTSTR( strEditorText )
  757. )
  758. );
  759. // dynamic bars are initially invisible
  760. static const CSize _sizeDesiredDocked( 80, 60 );
  761. static const CSize _sizeDesiredFloating( 200, 150 );
  762. m_arrAllDynamicBars[i]->SetInitDesiredSizeHorizontal( _sizeDesiredDocked );
  763. m_arrAllDynamicBars[i]->SetInitDesiredSizeVertical( _sizeDesiredDocked );
  764. m_arrAllDynamicBars[i]->SetInitDesiredSizeFloating( _sizeDesiredFloating );
  765. ShowControlBar( m_arrAllDynamicBars[i], TRUE, TRUE );
  766. } // create edit controls inside all dynamic bars
  767. // load docking state of all the resizable bars only
  768. if( ! CExtControlBar::ProfileBarStateSerialize(
  769. ar,
  770. this,
  771. NULL,
  772. false,
  773. true
  774. )
  775. )
  776. {
  777. ASSERT( FALSE );
  778. ::AfxThrowUserException();
  779. }
  780. return;
  781. } // try
  782. catch( CException * pException )
  783. {
  784. pException;
  785. } // catch( CException * pException )
  786. catch( ... )
  787. {
  788. ASSERT( FALSE );
  789. } // catch( ... )
  790. CExtDynamicBarSite::BarEnumGetArray( m_arrAllDynamicBars, false, true );
  791. ::AfxMessageBox( _T("Failed to load file"), MB_OK|MB_ICONERROR );
  792. }
  793. void CMainFrame::OnPersistenceSaveToFile_Resizable() 
  794. {
  795. CString strPathName;
  796. #if ( ! defined __EXT_MFC_NO_SHELL_DIALOG_FILE )
  797. CExtShellDialogFile dlgShellFile(
  798. NULL,
  799. CExtShellDialogFile::__EFDT_SAVE_AS
  800. );
  801. dlgShellFile.m_comboFileTypes.SetFilter(
  802. _T("Resizable bar state files (*.RBS)|*.RBS|All files (*.*)|*.*||")
  803. );
  804. dlgShellFile.m_nInitialFileTypeIndex = 0;
  805. dlgShellFile.m_bPathMustExist = true;
  806. dlgShellFile.m_strCustomDialogCaption = _T("Save resizable bar state to file");
  807. dlgShellFile.m_strEditorTextInitial = _T(".\Default.RBS");
  808. if( dlgShellFile.DoModal() != IDOK )
  809. return;
  810. ASSERT( dlgShellFile.m_arrRetValNames.GetSize() == 1 );
  811. strPathName = LPCTSTR(dlgShellFile.m_arrRetValNames[0]);
  812. #else // ( ! defined __EXT_MFC_NO_SHELL_DIALOG_FILE )
  813. CFileDialog dlgFile(
  814. FALSE,
  815. _T("Resizable bar state"),
  816. _T(".\Default.RBS"),
  817. OFN_ENABLESIZING|OFN_EXPLORER
  818. |OFN_LONGNAMES|OFN_PATHMUSTEXIST
  819. |OFN_NOCHANGEDIR|OFN_NODEREFERENCELINKS
  820. ,
  821. _T("Resizable bar state files (*.RBS)|*.RBS|All files (*.*)|*.*||"),
  822. this
  823. );
  824. dlgFile.m_ofn.lpstrTitle = _T("Save resizable bar state to file");
  825. if( dlgFile.DoModal() != IDOK )
  826. return;
  827. strPathName = dlgFile.m_ofn.lpstrFile;
  828. ASSERT( ! strPathName.IsEmpty() );
  829. #endif // else from if ( ! defined __EXT_MFC_NO_SHELL_DIALOG_FILE )
  830. try
  831. {
  832. // initialize data stream
  833. CFile _file(
  834. strPathName,
  835. CFile::modeCreate
  836. |CFile::modeWrite
  837. |CFile::typeBinary
  838. );
  839. CArchive ar( &_file, CArchive::store );
  840. // save state of dynamic bars
  841. CExtDynamicBarSite::StateSerialize( ar );
  842. // save docking state of all the resizable bars only
  843. if( ! CExtControlBar::ProfileBarStateSerialize(
  844. ar,
  845. this,
  846. NULL,
  847. false,
  848. true
  849. )
  850. )
  851. {
  852. ASSERT( FALSE );
  853. ::AfxThrowUserException();
  854. }
  855. return;
  856. } // try
  857. catch( CException * pException )
  858. {
  859. pException;
  860. } // catch( CException * pException )
  861. catch( ... )
  862. {
  863. ASSERT( FALSE );
  864. } // catch( ... )
  865. ::AfxMessageBox( _T("Failed to save file"), MB_OK|MB_ICONERROR );
  866. }
  867. void CMainFrame::OnPersistenceLoadFromFile_Fixedsized() 
  868. {
  869. CString strPathName;
  870. #if ( ! defined __EXT_MFC_NO_SHELL_DIALOG_FILE )
  871. CExtShellDialogFile dlgShellFile(
  872. NULL,
  873. CExtShellDialogFile::__EFDT_OPEN_SINGLE
  874. );
  875. dlgShellFile.m_comboFileTypes.SetFilter(
  876. _T("Fixedsized bar state files (*.FBS)|*.FBS|All files (*.*)|*.*||")
  877. );
  878. dlgShellFile.m_nInitialFileTypeIndex = 0;
  879. dlgShellFile.m_bFilesMustExist = true;
  880. dlgShellFile.m_strCustomDialogCaption = _T("Open fixedsized bar state from file");
  881. dlgShellFile.m_strEditorTextInitial = _T(".\Default.FBS");
  882. if( dlgShellFile.DoModal() != IDOK )
  883. return;
  884. ASSERT( dlgShellFile.m_arrRetValNames.GetSize() == 1 );
  885. strPathName = LPCTSTR(dlgShellFile.m_arrRetValNames[0]);
  886. #else // ( ! defined __EXT_MFC_NO_SHELL_DIALOG_FILE )
  887. CFileDialog dlgFile(
  888. TRUE,
  889. _T("Fixedsized bar state"),
  890. _T(".\Default.FBS"),
  891. OFN_ENABLESIZING|OFN_EXPLORER
  892. |OFN_LONGNAMES|OFN_PATHMUSTEXIST|OFN_FILEMUSTEXIST
  893. |OFN_NOCHANGEDIR|OFN_NODEREFERENCELINKS
  894. ,
  895. _T("Fixedsized bar state files (*.FBS)|*.FBS|All files (*.*)|*.*||"),
  896. this
  897. );
  898. dlgFile.m_ofn.lpstrTitle = _T("Open fixedsized bar state from file");
  899. if( dlgFile.DoModal() != IDOK )
  900. return;
  901. strPathName = dlgFile.m_ofn.lpstrFile;
  902. ASSERT( ! strPathName.IsEmpty() );
  903. #endif // else from if ( ! defined __EXT_MFC_NO_SHELL_DIALOG_FILE )
  904. try
  905. {
  906. // init data stream
  907. CFile _file(
  908. strPathName,
  909. CFile::modeRead
  910. |CFile::typeBinary
  911. );
  912. CArchive ar( &_file, CArchive::load );
  913. // load docking state of all the fixedsized bars only
  914. if( ! CExtControlBar::ProfileBarStateSerialize(
  915. ar,
  916. this,
  917. NULL,
  918. true,
  919. false
  920. )
  921. )
  922. {
  923. ASSERT( FALSE );
  924. ::AfxThrowUserException();
  925. }
  926. return;
  927. } // try
  928. catch( CException * pException )
  929. {
  930. pException;
  931. } // catch( CException * pException )
  932. catch( ... )
  933. {
  934. ASSERT( FALSE );
  935. } // catch( ... )
  936. ::AfxMessageBox( _T("Failed to load file"), MB_OK|MB_ICONERROR );
  937. }
  938. void CMainFrame::OnPersistenceSaveToFile_Fixedsized() 
  939. {
  940. CString strPathName;
  941. #if ( ! defined __EXT_MFC_NO_SHELL_DIALOG_FILE )
  942. CExtShellDialogFile dlgShellFile(
  943. NULL,
  944. CExtShellDialogFile::__EFDT_SAVE_AS
  945. );
  946. dlgShellFile.m_comboFileTypes.SetFilter(
  947. _T("Fixedsized bar state files (*.FBS)|*.FBS|All files (*.*)|*.*||")
  948. );
  949. dlgShellFile.m_nInitialFileTypeIndex = 0;
  950. dlgShellFile.m_bPathMustExist = true;
  951. dlgShellFile.m_strCustomDialogCaption = _T("Save fixedsized bar state to file");
  952. dlgShellFile.m_strEditorTextInitial = _T(".\Default.FBS");
  953. if( dlgShellFile.DoModal() != IDOK )
  954. return;
  955. ASSERT( dlgShellFile.m_arrRetValNames.GetSize() == 1 );
  956. strPathName = LPCTSTR(dlgShellFile.m_arrRetValNames[0]);
  957. #else // ( ! defined __EXT_MFC_NO_SHELL_DIALOG_FILE )
  958. CFileDialog dlgFile(
  959. FALSE,
  960. _T("Fixedsized bar state"),
  961. _T(".\Default.FBS"),
  962. OFN_ENABLESIZING|OFN_EXPLORER
  963. |OFN_LONGNAMES|OFN_PATHMUSTEXIST
  964. |OFN_NOCHANGEDIR|OFN_NODEREFERENCELINKS
  965. ,
  966. _T("Fixedsized bar state files (*.FBS)|*.FBS|All files (*.*)|*.*||"),
  967. this
  968. );
  969. dlgFile.m_ofn.lpstrTitle = _T("Save fixedsized bar state to file");
  970. if( dlgFile.DoModal() != IDOK )
  971. return;
  972. strPathName = dlgFile.m_ofn.lpstrFile;
  973. ASSERT( ! strPathName.IsEmpty() );
  974. #endif // else from if ( ! defined __EXT_MFC_NO_SHELL_DIALOG_FILE )
  975. try
  976. {
  977. // initialize data stream
  978. CFile _file(
  979. strPathName,
  980. CFile::modeCreate
  981. |CFile::modeWrite
  982. |CFile::typeBinary
  983. );
  984. CArchive ar( &_file, CArchive::store );
  985. // save docking state of all the resizable bars only
  986. if( ! CExtControlBar::ProfileBarStateSerialize(
  987. ar,
  988. this,
  989. NULL,
  990. true,
  991. false
  992. )
  993. )
  994. {
  995. ASSERT( FALSE );
  996. ::AfxThrowUserException();
  997. }
  998. return;
  999. } // try
  1000. catch( CException * pException )
  1001. {
  1002. pException;
  1003. } // catch( CException * pException )
  1004. catch( ... )
  1005. {
  1006. ASSERT( FALSE );
  1007. } // catch( ... )
  1008. ::AfxMessageBox( _T("Failed to save file"), MB_OK|MB_ICONERROR );
  1009. }