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

界面编程

开发平台:

Visual C++

  1. // MainFrm.cpp : implementation of the CMainFrame class
  2. //
  3. #include "stdafx.h"
  4. #include "SDIDOCVIEW.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_DYNCREATE( CMainFrame, CFrameWnd )
  14. BEGIN_MESSAGE_MAP( CMainFrame, CFrameWnd )
  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_RESIZABLEBAR_EMPTY, OnBarCheck )
  23. ON_UPDATE_COMMAND_UI(ID_VIEW_RESIZABLEBAR_EMPTY, OnUpdateControlBarMenu)
  24. ON_COMMAND_EX(ID_VIEW_RESIZABLEBAR_TREE, OnBarCheck )
  25. ON_UPDATE_COMMAND_UI(ID_VIEW_RESIZABLEBAR_TREE, OnUpdateControlBarMenu)
  26. ON_COMMAND_EX(ID_VIEW_RESIZABLEBAR_EDIT, OnBarCheck )
  27. ON_UPDATE_COMMAND_UI(ID_VIEW_RESIZABLEBAR_EDIT, OnUpdateControlBarMenu)
  28. ON_COMMAND_EX(ID_VIEW_RESIZABLEBAR_CP, OnBarCheck )
  29. ON_UPDATE_COMMAND_UI(ID_VIEW_RESIZABLEBAR_CP, OnUpdateControlBarMenu)
  30. ON_COMMAND_EX(ID_VIEW_RESIZABLEBAR_DLG, OnBarCheck )
  31. ON_UPDATE_COMMAND_UI(ID_VIEW_RESIZABLEBAR_DLG, OnUpdateControlBarMenu)
  32. END_MESSAGE_MAP()
  33. static UINT indicators[] =
  34. {
  35. ID_SEPARATOR,           // status line indicator
  36. ID_INDICATOR_CAPS,
  37. ID_INDICATOR_NUM,
  38. ID_INDICATOR_SCRL,
  39. };
  40. /////////////////////////////////////////////////////////////////////////////
  41. // CMainFrame construction/destruction
  42. CMainFrame::CMainFrame()
  43. : m_wndDockedCtrlEdit( true, true )
  44. , m_wndDockedCtrlTree( true, true )
  45. {
  46. CWinApp * pApp = ::AfxGetApp();
  47. ASSERT( pApp != NULL );
  48. ASSERT( pApp->m_pszRegistryKey != NULL );
  49. ASSERT( pApp->m_pszRegistryKey[0] != _T('') );
  50. ASSERT( pApp->m_pszProfileName != NULL );
  51. ASSERT( pApp->m_pszProfileName[0] != _T('') );
  52. if( ! g_PaintManager.PaintManagerStateLoad(
  53. pApp->m_pszRegistryKey,
  54. pApp->m_pszProfileName,
  55. pApp->m_pszProfileName
  56. )
  57. )
  58. g_PaintManager.InstallPaintManager(
  59. RUNTIME_CLASS(CExtPaintManagerOffice2007_R2_LunaBlue)
  60. );
  61. ::memset( &m_dataFrameWP, 0, sizeof(WINDOWPLACEMENT) );
  62. m_dataFrameWP.length = sizeof(WINDOWPLACEMENT);
  63. m_dataFrameWP.showCmd = SW_HIDE;
  64. }
  65. CMainFrame::~CMainFrame()
  66. {
  67. }
  68. void CMainFrame::OnUpdateControlBarMenu(CCmdUI* pCmdUI)
  69. {
  70. CExtControlBar::DoFrameBarCheckUpdate( this, pCmdUI, false );
  71. }
  72. BOOL CMainFrame::OnBarCheck(UINT nID)
  73. {
  74. return CExtControlBar::DoFrameBarCheckCmd( this, nID, false );
  75. }
  76. int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
  77. {
  78. CWinApp * pApp = ::AfxGetApp();
  79. ASSERT( pApp != NULL );
  80. ASSERT( pApp->m_pszRegistryKey != NULL );
  81. ASSERT( pApp->m_pszRegistryKey[0] != _T('') );
  82. ASSERT( pApp->m_pszProfileName != NULL );
  83. ASSERT( pApp->m_pszProfileName[0] != _T('') );
  84. if( CExtNCW < CFrameWnd > :: OnCreate( lpCreateStruct ) == -1 )
  85. {
  86. ASSERT( FALSE );
  87. return -1;
  88. }
  89. VERIFY(
  90. g_CmdManager->ProfileWndAdd(
  91. pApp->m_pszProfileName,
  92. GetSafeHwnd()
  93. )
  94. );
  95. VERIFY(
  96. g_CmdManager->UpdateFromMenu(
  97. pApp->m_pszProfileName,
  98. IDR_MAINFRAME
  99. )
  100. );
  101. if( !m_wndMenuBar.Create(
  102. NULL,
  103. this,
  104. ID_VIEW_MENUBAR
  105. )
  106. )
  107.     {
  108.         TRACE0("Failed to create menubarn");
  109.         return -1;      // failed to create
  110.     }
  111. if( (! m_wndToolBar.Create( NULL, this, AFX_IDW_TOOLBAR ) )
  112. || (! m_wndToolBar.LoadToolBar( IDR_MAINFRAME ) )
  113. )
  114. {
  115. TRACE0("Failed to create the m_wndToolBar toolbarn");
  116. return -1;      // fail to create
  117. }
  118. if( (! m_wndToolBarUiLook.Create( NULL, this, ID_VIEW_UI_LOOK_BAR ) )
  119. || (! m_wndToolBarUiLook.ThemeSwitcherInit() )
  120. )
  121. {
  122. TRACE0("Failed to create the m_wndToolBarUiLook toolbarn");
  123. return -1;      // fail to create
  124. }
  125. if( (! m_wndStatusBar.Create( this ) )
  126. || (! m_wndStatusBar.SetIndicators(
  127. indicators,
  128. sizeof(indicators) / sizeof(UINT)
  129. )
  130. )
  131. )
  132. {
  133. TRACE0("Failed to create status barn");
  134. return -1;      // fail to create
  135. }
  136. m_wndResizableBarEmpty.SetInitDesiredSizeVertical(
  137. CSize( 200, 400 )
  138. );
  139. m_wndResizableBarEmpty.SetInitDesiredSizeHorizontal(
  140. CSize( 400, 200 )
  141. );
  142. if( !m_wndResizableBarEmpty.Create(
  143. NULL, // _T("Optional control bar caption"),
  144. this,
  145. ID_VIEW_RESIZABLEBAR_EMPTY
  146. )
  147. )
  148. {
  149. TRACE0("Failed to create m_wndResizableBarEmptyn");
  150. return -1; // fail to create
  151. }
  152. m_wndResizableBarTree.SetInitDesiredSizeVertical(
  153. CSize( 200, 400 )
  154. );
  155. m_wndResizableBarTree.SetInitDesiredSizeHorizontal(
  156. CSize( 400, 200 )
  157. );
  158. if( !m_wndResizableBarTree.Create(
  159. NULL, // _T("Optional control bar caption"),
  160. this,
  161. ID_VIEW_RESIZABLEBAR_TREE
  162. )
  163. )
  164. {
  165. TRACE0("Failed to create m_wndResizableBarTreen");
  166. return -1; // fail to create
  167. }
  168. if( !m_wndDockedCtrlTree.Create(
  169. WS_CHILD|WS_VISIBLE|WS_VSCROLL|WS_HSCROLL
  170. |TVS_HASBUTTONS|TVS_HASLINES|TVS_LINESATROOT
  171. |TVS_INFOTIP|TVS_DISABLEDRAGDROP
  172. |TVS_SINGLEEXPAND|TVS_SHOWSELALWAYS
  173. ,
  174. CRect(0,0,0,0),
  175. &m_wndResizableBarTree,
  176. m_wndResizableBarTree.GetDlgCtrlID()
  177. )
  178. )
  179. {
  180. TRACE0("Failed to create m_wndDockedCtrlEditn");
  181. return -1; // fail to create
  182. }
  183. m_wndDockedCtrlTree.SetFont(
  184. CFont::FromHandle(
  185. (HFONT)::GetStockObject(DEFAULT_GUI_FONT)
  186. )
  187. );
  188. for( int nTreeIdx0=0; nTreeIdx0<10; nTreeIdx0++ )
  189. {
  190. CString sTreeItemText;
  191. sTreeItemText.Format( _T("Item 1-%d"), nTreeIdx0+1 );
  192. HTREEITEM htiAtLevel0 =
  193. m_wndDockedCtrlTree.InsertItem(
  194. LPCTSTR(sTreeItemText)
  195. );
  196. ASSERT( htiAtLevel0 != NULL );
  197. for( int nTreeIdx1=0; nTreeIdx1<5; nTreeIdx1++ )
  198. {
  199. sTreeItemText.Format( _T("Item 2-%d"), nTreeIdx1+1 );
  200. HTREEITEM htiAtLevel1 =
  201. m_wndDockedCtrlTree.InsertItem(
  202. LPCTSTR(sTreeItemText),
  203. htiAtLevel0
  204. );
  205. ASSERT( htiAtLevel1 != NULL );
  206. for( int nTreeIdx2=0; nTreeIdx2<3; nTreeIdx2++ )
  207. {
  208. sTreeItemText.Format( _T("Item 3-%d"), nTreeIdx2+1 );
  209. HTREEITEM htiAtLevel2 =
  210. m_wndDockedCtrlTree.InsertItem(
  211. LPCTSTR(sTreeItemText),
  212. htiAtLevel1
  213. );
  214. ASSERT( htiAtLevel2 != NULL );
  215. htiAtLevel2;
  216. } // for( int nTreeIdx2=0; nTreeIdx2<5; nTreeIdx2++ )
  217. } // for( int nTreeIdx1=0; nTreeIdx1<5; nTreeIdx1++ )
  218. } // for( int nTreeIdx0=0; nTreeIdx0<10; nTreeIdx0++ )
  219. m_wndResizableBarEdit.SetInitDesiredSizeVertical(
  220. CSize( 200, 400 )
  221. );
  222. m_wndResizableBarEdit.SetInitDesiredSizeHorizontal(
  223. CSize( 400, 200 )
  224. );
  225. if( !m_wndResizableBarEdit.Create(
  226. NULL, // _T("Optional control bar caption"),
  227. this,
  228. ID_VIEW_RESIZABLEBAR_EDIT
  229. )
  230. )
  231. {
  232. TRACE0("Failed to create m_wndResizableBarEditn");
  233. return -1; // fail to create
  234. }
  235. if( !m_wndDockedCtrlEdit.Create(
  236. WS_CHILD|WS_VISIBLE
  237. |ES_MULTILINE|ES_LEFT
  238. |ES_NOHIDESEL|ES_WANTRETURN
  239. ,
  240. CRect(0,0,0,0),
  241. &m_wndResizableBarEdit,
  242. m_wndResizableBarEdit.GetDlgCtrlID()
  243. )
  244. )
  245. {
  246. TRACE0("Failed to create m_wndDockedCtrlEditn");
  247. return -1; // fail to create
  248. }
  249. m_wndDockedCtrlEdit.SetFont(
  250. CFont::FromHandle(
  251. (HFONT)::GetStockObject(DEFAULT_GUI_FONT)
  252. )
  253. );
  254. m_wndDockedCtrlEdit.SetWindowText(
  255. _T("    Edit controlrn")
  256. _T("    inside resizable control bar")
  257. );
  258. m_wndResizableBarCP.SetInitDesiredSizeVertical(
  259. CSize( 200, 400 )
  260. );
  261. m_wndResizableBarCP.SetInitDesiredSizeHorizontal(
  262. CSize( 400, 200 )
  263. );
  264. if( !m_wndResizableBarCP.Create(
  265. NULL, // _T("Optional control bar caption"),
  266. this,
  267. ID_VIEW_RESIZABLEBAR_CP
  268. )
  269. )
  270. {
  271. TRACE0("Failed to create m_wndResizableBarCPn");
  272. return -1; // fail to create
  273. }
  274. if( !m_wndDockedCtrlCP.Create(
  275. _T("BUTTON"),
  276. _T(""),
  277. WS_CHILD|WS_VISIBLE,
  278. CRect(0,0,0,0),
  279. &m_wndResizableBarCP,
  280. m_wndResizableBarCP.GetDlgCtrlID()
  281. )
  282. )
  283. {
  284. TRACE0("Failed to create m_wndDockedCtrlCPn");
  285. return -1; // fail to create
  286. }
  287. m_wndResizableBarDlg.SetInitDesiredSizeVertical(
  288. CSize( 200, 400 )
  289. );
  290. m_wndResizableBarDlg.SetInitDesiredSizeHorizontal(
  291. CSize( 400, 200 )
  292. );
  293. if( !m_wndResizableBarDlg.Create(
  294. NULL, // _T("Optional control bar caption"),
  295. this,
  296. ID_VIEW_RESIZABLEBAR_DLG
  297. )
  298. )
  299. {
  300. TRACE0("Failed to create m_wndResizableBarDlgn");
  301. return -1; // fail to create
  302. }
  303. if( !m_wndDockedResizableDialog.Create(
  304. IDD_DIALOG_FOR_RESIZABLE_BAR,
  305. &m_wndResizableBarDlg
  306. )
  307. )
  308. {
  309. TRACE0("Failed to create m_wndResizableBarDlgn");
  310. return -1; // fail to create
  311. }
  312. m_wndDockedResizableDialog.ShowSizeGrip( FALSE );
  313. m_wndDockedResizableDialog.AddAnchor(
  314. IDC_EDIT_IN_RESIZABLE_FORM,
  315. __RDA_LT,
  316. __RDA_RT
  317. );
  318. VERIFY(
  319. m_wndEditInDockedDlg.SubclassDlgItem(
  320. IDC_EDIT_IN_RESIZABLE_FORM,
  321. &m_wndDockedResizableDialog
  322. )
  323. && m_wndLableInDockedDlg.SubclassDlgItem(
  324. IDC_STATIC1,
  325. &m_wndDockedResizableDialog
  326. )
  327. );
  328. m_wndMenuBar.EnableDocking( CBRS_ALIGN_ANY );
  329. m_wndToolBar.EnableDocking( CBRS_ALIGN_ANY );
  330. m_wndToolBarUiLook.EnableDocking( CBRS_ALIGN_ANY );
  331. m_wndResizableBarEmpty.EnableDocking( CBRS_ALIGN_ANY );
  332. m_wndResizableBarTree.EnableDocking( CBRS_ALIGN_ANY );
  333. m_wndResizableBarEdit.EnableDocking( CBRS_ALIGN_ANY );
  334. m_wndResizableBarCP.EnableDocking( CBRS_ALIGN_ANY );
  335. m_wndResizableBarDlg.EnableDocking( CBRS_ALIGN_ANY );
  336. //
  337. // Prof-UIS advanced docking windows feature:
  338. // Show content of control bars when docking / resizing
  339. //
  340. if( !CExtControlBar::FrameEnableDocking(this) )
  341. {
  342. ASSERT( FALSE );
  343. return -1;
  344. }
  345. #if (!defined __EXT_MFC_NO_TAB_CONTROLBARS)
  346. if( !CExtControlBar::FrameInjectAutoHideAreas(this) )
  347. {
  348. ASSERT( FALSE );
  349. return -1;
  350. }
  351. #endif // (!defined __EXT_MFC_NO_TAB_CONTROLBARS)
  352. static UINT statBasicCommands[] =
  353. {
  354. ID_FILE_NEW, 
  355. ID_FILE_OPEN, 
  356. ID_FILE_SAVE,
  357. ID_APP_EXIT,
  358. ID_APP_ABOUT,
  359. ID_FILE_PRINT,
  360. ID_FILE_PRINT_SETUP, 
  361. ID_EDIT_COPY, 
  362. ID_EDIT_CUT, 
  363. ID_EDIT_PASTE, 
  364. ID_EDIT_UNDO, 
  365. ID_VIEW_TOOLBAR, 
  366. ID_VIEW_UI_LOOK_BAR,
  367. ID_VIEW_RESIZABLEBAR_EMPTY,
  368. ID_VIEW_RESIZABLEBAR_TREE,
  369. ID_VIEW_RESIZABLEBAR_EDIT,
  370. ID_VIEW_RESIZABLEBAR_CP,
  371. ID_VIEW_RESIZABLEBAR_DLG,
  372. 0 // end of commands list
  373. }; // statBasicCommands array
  374. VERIFY(
  375. g_CmdManager->SetBasicCommands(
  376. pApp->m_pszProfileName,
  377. statBasicCommands
  378. )
  379. );
  380. g_CmdManager->SerializeState(
  381. pApp->m_pszProfileName,
  382. pApp->m_pszRegistryKey,
  383. pApp->m_pszProfileName,
  384. false
  385. );
  386. if( !CExtControlBar::ProfileBarStateLoad(
  387. this,
  388. pApp->m_pszRegistryKey,
  389. pApp->m_pszProfileName,
  390. pApp->m_pszProfileName,
  391. &m_dataFrameWP
  392. )
  393. )
  394. {
  395. DockControlBar( &m_wndMenuBar );
  396. DockControlBar( &m_wndToolBar );
  397. DockControlBar( &m_wndToolBarUiLook, AFX_IDW_DOCKBAR_RIGHT );
  398. m_wndResizableBarEmpty.FloatControlBar(
  399. CPoint( 40, 100 )
  400. );
  401. m_wndResizableBarTree.FloatControlBar(
  402. CPoint( 300, 100 )
  403. );
  404. m_wndResizableBarEmpty.DockControlBar(
  405. &m_wndResizableBarEdit,
  406. true,
  407. true,
  408. this,
  409. true
  410. );
  411. m_wndResizableBarCP.FloatControlBar(
  412. CPoint( 360, 170 )
  413. );
  414. m_wndResizableBarCP.DockControlBar(
  415. &m_wndResizableBarDlg,
  416. false,
  417. true,
  418. this,
  419. true
  420. );
  421. }
  422. //  m_wndMenuBar.FlashCaption( 65535, 250, RGB(255,255,0), RGB(0,128,0) );
  423. //  m_wndToolBar.FlashCaption( 65535, 250, RGB(255,255,0), RGB(0,128,0) );
  424. //  m_wndResizableBarEdit.FlashCaption( 65535, 375 );
  425. //  m_wndResizableBarCP.FlashCaption( 65535, 500, RGB(224,224,224), RGB(132,0,132) );
  426. //  m_wndResizableBarTree.FlashCaption( 65535, 250, RGB(255,255,0), RGB(0,128,0) );
  427. return 0;
  428. }
  429. BOOL CMainFrame::DestroyWindow() 
  430. {
  431. CWinApp * pApp = ::AfxGetApp();
  432. ASSERT( pApp != NULL );
  433. ASSERT( pApp->m_pszRegistryKey != NULL );
  434. ASSERT( pApp->m_pszRegistryKey[0] != _T('') );
  435. ASSERT( pApp->m_pszProfileName != NULL );
  436. ASSERT( pApp->m_pszProfileName[0] != _T('') );
  437. pApp;
  438. VERIFY(
  439. CExtControlBar::ProfileBarStateSave(
  440. this,
  441. pApp->m_pszRegistryKey,
  442. pApp->m_pszProfileName,
  443. pApp->m_pszProfileName,
  444. &m_dataFrameWP
  445. )
  446. );
  447. VERIFY(
  448. g_CmdManager->SerializeState(
  449. pApp->m_pszProfileName,
  450. pApp->m_pszRegistryKey,
  451. pApp->m_pszProfileName,
  452. true
  453. )
  454. );
  455. VERIFY(
  456. g_PaintManager.PaintManagerStateSave(
  457. pApp->m_pszRegistryKey,
  458. pApp->m_pszProfileName,
  459. pApp->m_pszProfileName
  460. )
  461. );
  462. g_CmdManager->ProfileWndRemove( GetSafeHwnd() );
  463. return CExtNCW < CFrameWnd > :: DestroyWindow();
  464. }
  465. void CMainFrame::ActivateFrame(int nCmdShow) 
  466. {
  467. if( m_dataFrameWP.showCmd != SW_HIDE )
  468. {
  469. SetWindowPlacement( &m_dataFrameWP );
  470. CExtNCW < CFrameWnd > :: ActivateFrame( m_dataFrameWP.showCmd );
  471. m_dataFrameWP.showCmd = SW_HIDE;
  472. return;
  473. }
  474. CExtNCW < CFrameWnd > :: ActivateFrame(nCmdShow);
  475. }
  476. BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
  477. {
  478. if( ! CExtNCW < CFrameWnd > :: PreCreateWindow( cs ) )
  479. return FALSE;
  480. cs.style = WS_OVERLAPPED | WS_CAPTION | FWS_ADDTOTITLE
  481. | WS_THICKFRAME | WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_MAXIMIZE;
  482. cs.dwExStyle &= ~(WS_EX_STATICEDGE|WS_EX_CLIENTEDGE);
  483. return TRUE;
  484. }
  485. /////////////////////////////////////////////////////////////////////////////
  486. // CMainFrame diagnostics
  487. #ifdef _DEBUG
  488. void CMainFrame::AssertValid() const
  489. {
  490. CExtNCW < CFrameWnd > :: AssertValid();
  491. }
  492. void CMainFrame::Dump(CDumpContext& dc) const
  493. {
  494. CExtNCW < CFrameWnd > :: Dump( dc );
  495. }
  496. #endif //_DEBUG
  497. /////////////////////////////////////////////////////////////////////////////
  498. // CMainFrame message handlers
  499. BOOL CMainFrame::PreTranslateMessage(MSG* pMsg) 
  500. {
  501. if( m_wndToolBarUiLook.PreTranslateMessage( pMsg ) )
  502. return TRUE;
  503. if( m_wndMenuBar.TranslateMainFrameMessage( pMsg ) )
  504. return TRUE;
  505. return CExtNCW < CFrameWnd > :: PreTranslateMessage( pMsg );
  506. }