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

界面编程

开发平台:

Visual C++

  1. // MainFrm.cpp : implementation of the CMainFrame class
  2. //
  3. #include "stdafx.h"
  4. #include "AviFrames.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. CTypedPtrArray< CPtrArray, CMainFrame::CZoomBarSliderButton* > CMainFrame::CZoomBarSliderButton::g_arrButtons;
  17. CTypedPtrArray< CPtrArray, CMainFrame::CSeekBarSliderButton* > CMainFrame::CSeekBarSliderButton::g_arrButtons;
  18. BOOL CMainFrame::CSeekBarSliderButton::g_bSynchronizing = FALSE; 
  19. BOOL CMainFrame::CZoomBarSliderButton::g_bSynchronizing = FALSE; 
  20. /////////////////////////////////////////////////////////////////////////////
  21. // CMainFrame
  22. IMPLEMENT_DYNAMIC( CMainFrame, CFrameWnd )
  23. BEGIN_MESSAGE_MAP( CMainFrame, CFrameWnd )
  24. //{{AFX_MSG_MAP(CMainFrame)
  25. ON_WM_CREATE()
  26. ON_WM_SETFOCUS()
  27. ON_COMMAND(ID_PLAY, OnPlay)
  28. ON_UPDATE_COMMAND_UI(ID_PLAY, OnUpdatePlay)
  29. ON_COMMAND(ID_STOP, OnStop)
  30. ON_UPDATE_COMMAND_UI(ID_STOP, OnUpdateStop)
  31. ON_COMMAND(ID_PAUSE, OnPause)
  32. ON_UPDATE_COMMAND_UI(ID_PAUSE, OnUpdatePause)
  33. ON_COMMAND(ID_FILE_OPEN, OnFileOpen)
  34. ON_WM_TIMER()
  35. ON_COMMAND(ID_MYEXTBTN_SLIDER, OnSlider)
  36. ON_COMMAND(ID_MYEXTBTN_SCROLLER, OnScroller)
  37. //}}AFX_MSG_MAP
  38. ON_COMMAND_EX( ID_VIEW_MENUBAR, OnBarCheck )
  39. ON_UPDATE_COMMAND_UI( ID_VIEW_MENUBAR, OnUpdateControlBarMenu )
  40. ON_COMMAND_EX( ID_VIEW_UI_LOOK_BAR, OnBarCheck )
  41. ON_UPDATE_COMMAND_UI( ID_VIEW_UI_LOOK_BAR, OnUpdateControlBarMenu )
  42. ON_COMMAND_EX( IDR_TOOLBAR_PLAYER, OnBarCheck )
  43. ON_UPDATE_COMMAND_UI( IDR_TOOLBAR_PLAYER, OnUpdateControlBarMenu )
  44. ON_COMMAND_EX( IDR_TOOLBAR_SEEK, OnBarCheck )
  45. ON_UPDATE_COMMAND_UI( IDR_TOOLBAR_SEEK, OnUpdateControlBarMenu )
  46. ON_COMMAND_EX( IDR_TOOLBAR_ZOOM, OnBarCheck )
  47. ON_UPDATE_COMMAND_UI( IDR_TOOLBAR_ZOOM, OnUpdateControlBarMenu )
  48. END_MESSAGE_MAP()
  49. static UINT indicators[] =
  50. {
  51. ID_SEPARATOR,           // status line indicator
  52. ID_INDICATOR_CAPS,
  53. ID_INDICATOR_NUM,
  54. ID_INDICATOR_SCRL,
  55. };
  56. /////////////////////////////////////////////////////////////////////////////
  57. // CMainFrame construction/destruction
  58. CMainFrame::CMainFrame()
  59. {
  60. CWinApp * pApp = ::AfxGetApp();
  61. ASSERT( pApp != NULL );
  62. ASSERT( pApp->m_pszRegistryKey != NULL );
  63. ASSERT( pApp->m_pszRegistryKey[0] != _T('') );
  64. ASSERT( pApp->m_pszProfileName != NULL );
  65. ASSERT( pApp->m_pszProfileName[0] != _T('') );
  66. if( ! g_PaintManager.PaintManagerStateLoad(
  67. pApp->m_pszRegistryKey,
  68. pApp->m_pszProfileName,
  69. pApp->m_pszProfileName
  70. )
  71. )
  72. g_PaintManager.InstallPaintManager( 
  73. RUNTIME_CLASS(CExtPaintManagerOffice2007_R2_LunaBlue) 
  74. );
  75. // window placement persistence
  76. ::memset( &m_dataFrameWP, 0, sizeof(WINDOWPLACEMENT) );
  77. m_dataFrameWP.length = sizeof(WINDOWPLACEMENT);
  78. m_dataFrameWP.showCmd = SW_HIDE;
  79. m_pWndView = NULL;
  80. m_pAviPlayer = NULL;
  81. if( ! g_PaintManager.m_bIsWin2000orLater )
  82. CExtPopupMenuWnd::g_bMenuWithShadows = false;
  83. }
  84. CMainFrame::~CMainFrame()
  85. {
  86. if(m_pAviPlayer)
  87. delete m_pAviPlayer;
  88. }
  89. static UINT g_statBasicCommands[] =
  90. {
  91. ID_APP_ABOUT,
  92. ID_APP_EXIT,
  93. ID_VIEW_MENUBAR,
  94. ID_VIEW_TOOLBAR,
  95. ID_VIEW_UI_LOOK_BAR,
  96. IDR_TOOLBAR_PLAYER,
  97. IDR_TOOLBAR_SEEK,
  98. IDR_TOOLBAR_ZOOM,
  99. ID_VIEW_STATUS_BAR,
  100. ID_FILE_OPEN,
  101. ID_PLAY,
  102. ID_STOP,
  103. ID_PAUSE,
  104. 0, // end of list
  105. };
  106. //////////////////////////////////////////////////////////////////////////
  107. int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
  108. {
  109. if( CExtNCW < CFrameWnd > :: OnCreate( lpCreateStruct ) == -1 )
  110. return -1;
  111. // create a view to occupy the client area of the frame
  112. m_pWndView = new CAviView;
  113. if( ! m_pWndView->Create( this ) )
  114. {
  115. TRACE0("Failed to create view windown");
  116. return -1;
  117. }
  118. CWinApp * pApp = ::AfxGetApp();
  119. ASSERT( pApp != NULL );
  120. ASSERT( pApp->m_pszRegistryKey != NULL );
  121. ASSERT( pApp->m_pszRegistryKey[0] != _T('') );
  122. ASSERT( pApp->m_pszProfileName != NULL );
  123. ASSERT( pApp->m_pszProfileName[0] != _T('') );
  124. ASSERT( pApp->m_pszProfileName != NULL );
  125. HICON hIcon = pApp->LoadIcon( IDR_MAINFRAME );
  126. ASSERT( hIcon != NULL );
  127. SetIcon( hIcon, TRUE );
  128. SetIcon( hIcon, FALSE );
  129. g_CmdManager->ProfileSetup(
  130. pApp->m_pszProfileName,
  131. GetSafeHwnd()
  132. );
  133. VERIFY(
  134. g_CmdManager->UpdateFromMenu(
  135. pApp->m_pszProfileName,
  136. IDR_MAINFRAME
  137. )
  138. );
  139. if( !m_wndMenuBar.Create(
  140. NULL,
  141. this,
  142. ID_VIEW_MENUBAR
  143. )
  144. )
  145.     {
  146.         TRACE0("Failed to create menubarn");
  147.         return -1;      // failed to create
  148.     }
  149. if( !m_wndToolBar.Create(
  150. _T("ToolBar"),
  151. this,
  152. AFX_IDW_TOOLBAR
  153. )
  154. ||
  155. !m_wndToolBar.LoadToolBar(IDR_MAINFRAME)
  156. )
  157. {
  158. TRACE0("Failed to create toolbarn");
  159. return -1;      // fail to create
  160. }
  161. if( !m_wndToolBarPlayer.Create(
  162. _T("Player"),
  163. this,
  164. IDR_TOOLBAR_PLAYER
  165. )
  166. ||
  167. !m_wndToolBarPlayer.LoadToolBar(IDR_TOOLBAR_PLAYER)
  168. )
  169. {
  170. TRACE0("Failed to create toolbar m_wndToolBarPlayer n");
  171. return -1;      // fail to create
  172. }
  173. if(  (! m_wndToolBarUiLook.Create( NULL, this, ID_VIEW_UI_LOOK_BAR ) )
  174. || (! m_wndToolBarUiLook.ThemeSwitcherInit() )
  175. )
  176. {
  177. TRACE0("Failed to create toolbar m_wndToolBarUiLookn");
  178. return -1;      // fail to create
  179. }
  180. /////////////////////////////////////////////////////////////////
  181. if( !m_wndToolBarSeek.Create(
  182. _T("Seek Slider"),
  183. this,
  184. IDR_TOOLBAR_SEEK)
  185. )
  186. {
  187. TRACE0("Failed to create toolbar m_wndToolBarSeek n");
  188. return -1;      // fail to create
  189. }
  190. m_wndToolBarSeek.InitContentExpandButton();
  191. if( !m_wndToolBarZoom.Create(
  192. _T("Zoom Slider"),
  193. this,
  194. IDR_TOOLBAR_ZOOM)
  195. )
  196. {
  197. TRACE0("Failed to create toolbar m_wndToolBarZoom n");
  198. return -1;      // fail to create
  199. }
  200. m_wndToolBarZoom.InitContentExpandButton();
  201. CExtCmdItem * pCmdItemSlider =
  202. g_CmdManager->CmdAllocPtr(
  203. pApp->m_pszProfileName,
  204. ID_MYEXTBTN_SLIDER
  205. );
  206. ASSERT( pCmdItemSlider != NULL );
  207. pCmdItemSlider->m_sToolbarText = _T("Zoom:");
  208. pCmdItemSlider->m_sMenuText = _T("Zoom slider");
  209. pCmdItemSlider->m_sTipTool
  210. = pCmdItemSlider->m_sTipStatus
  211. = _T("Zoom slider");
  212. CExtCmdItem * pCmdItemScroller =
  213. g_CmdManager->CmdAllocPtr(
  214. pApp->m_pszProfileName,
  215. ID_MYEXTBTN_SCROLLER
  216. );
  217. ASSERT( pCmdItemScroller != NULL );
  218. pCmdItemScroller->m_sToolbarText = _T("Seek:");
  219. pCmdItemScroller->m_sMenuText = _T("Seek slider");
  220. pCmdItemScroller->m_sTipTool
  221. = pCmdItemScroller->m_sTipStatus
  222. = _T("Seek slider");
  223. CZoomBarSliderButton *pZoomSliderTBB =
  224. new CZoomBarSliderButton(
  225. /////////////////
  226. // standard CExtBarButton parms
  227. /////////////////
  228. &m_wndToolBarZoom,
  229. ID_MYEXTBTN_SLIDER,
  230. 0,
  231. /////////////////
  232. // CExtBarSliderButton specific parms
  233. /////////////////
  234. //
  235. // scroll total/pos/page
  236. 11, 4, 0,
  237. // button extent horz(left/right)/vert(up/down) in pixels
  238. // (if zeros - use slider-like layout instead of scrollbar-like)
  239. 0, 0,
  240. // total slider control extent horz/vert in pixels
  241. 100, 100
  242. );
  243. VERIFY(
  244. m_wndToolBarZoom.InsertSpecButton(
  245. -1,
  246. pZoomSliderTBB,
  247. FALSE
  248. )
  249. );
  250. CSeekBarSliderButton *pSeekScrollerTBB = new CSeekBarSliderButton(
  251. /////////////////
  252. // standard CExtBarButton parms
  253. /////////////////
  254. &m_wndToolBarSeek,
  255. ID_MYEXTBTN_SCROLLER,
  256. 0,
  257. /////////////////
  258. // CExtBarScrollerButton specific parms
  259. /////////////////
  260. //
  261. // scroll total/pos/page
  262. 0, 0, 0,
  263. // button extent horz(left/right)/vert(up/down) in pixels
  264. // (if zeros - use slider-like layout instead of scrollbar-like)
  265. 10, 10,
  266. // total slider control extent horz/vert in pixels
  267. 300, 300
  268. );
  269. VERIFY(
  270. m_wndToolBarSeek.InsertSpecButton(
  271. -1,
  272. pSeekScrollerTBB,
  273. FALSE
  274. )
  275. );
  276. if( !m_wndStatusBar.Create(this)
  277. || !m_wndStatusBar.SetIndicators(
  278. indicators,
  279. sizeof(indicators) / sizeof(UINT)
  280. )
  281. )
  282. {
  283. TRACE0("Failed to create status barn");
  284. return -1;      // fail to create
  285. }
  286. m_wndStatusBar.m_bHideTextOnDisabledPanes = false;
  287. m_wndStatusBar.m_bDrawPaneSeparatorsInsteadOfBorders = true;
  288. m_wndStatusBar.SetPaneWidth(0, 90);
  289. m_wndStatusBar.AddPane(IDS_PANE_ZOOM, 1);
  290. m_wndStatusBar.SetPaneWidth(1, 40);
  291. m_wndStatusBar.AddPane(IDS_PANE_FRAMES_TOTAL, 2);
  292. m_wndStatusBar.SetPaneWidth(2, 120);
  293. m_wndStatusBar.AddPane(IDS_PANE_CURRENT_FRAME, 3);
  294. m_wndStatusBar.SetPaneWidth(3, 120);
  295. m_wndStatusBar.AddPane(IDS_PANE_FRAMES_SKIPPED, 4);
  296. m_wndStatusBar.SetPaneWidth(4, 120);
  297. m_wndMenuBar.EnableDocking(CBRS_ALIGN_ANY);
  298. m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
  299. m_wndToolBarUiLook.EnableDocking(CBRS_ALIGN_ANY);
  300. m_wndToolBarPlayer.EnableDocking(CBRS_ALIGN_ANY);
  301. m_wndToolBarZoom.EnableDocking(CBRS_ALIGN_ANY);
  302. m_wndToolBarSeek.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. //////////////////////////////////////////////////////////////////////////
  321. #if (!defined __EXT_MFC_NO_CUSTOMIZE)
  322. VERIFY(
  323. CExtCustomizeSite::MenuInfoAdd(
  324. this,
  325. _T("Default"),
  326. IDR_MAINFRAME,
  327. true
  328. )
  329. );
  330. VERIFY(
  331. CExtCustomizeSite::MenuInfoLoadAccelTable(
  332. _T("Default"),
  333. IDR_MAINFRAME
  334. )
  335. );
  336. if( !CExtCustomizeSite::EnableCustomization(
  337. this,
  338. __ECSF_DEFAULT|__ECSF_PARMS_DISABLE_PERSONALIZED
  339. )
  340. )
  341. {
  342. ASSERT( FALSE );
  343. return -1;
  344. }
  345. CExtCustomizeSite::CategoryUpdate( IDR_MAINFRAME );
  346. CExtCustomizeSite::CategoryMakeAllCmdsUnique();
  347. CExtCustomizeSite::CategoryAppendAllCommands();
  348. CExtCustomizeSite::CategoryAppendNewMenu();
  349. CExtCustomizeSite::CustomizeStateLoad(
  350. pApp->m_pszRegistryKey,
  351. pApp->m_pszProfileName,
  352. pApp->m_pszProfileName
  353. );
  354. #endif // (!defined __EXT_MFC_NO_CUSTOMIZE)
  355. //////////////////////////////////////////////////////////////////////////
  356. if( !CExtControlBar::ProfileBarStateLoad(
  357. this,
  358. pApp->m_pszRegistryKey,
  359. pApp->m_pszProfileName,
  360. pApp->m_pszProfileName,
  361. &m_dataFrameWP
  362. )
  363. )
  364. {
  365. DockControlBar( &m_wndMenuBar );
  366. DockControlBar( &m_wndToolBar );
  367. DockControlBar( &m_wndToolBarZoom );
  368. RecalcLayout();
  369. CRect wrAlreadyDockedBar;
  370. m_wndToolBarZoom.GetWindowRect( &wrAlreadyDockedBar );
  371. wrAlreadyDockedBar.OffsetRect( 1, 0 );
  372. DockControlBar( &m_wndToolBarSeek, AFX_IDW_DOCKBAR_TOP, &wrAlreadyDockedBar );
  373. m_wndToolBar.GetWindowRect( &wrAlreadyDockedBar );
  374. wrAlreadyDockedBar.OffsetRect( 1, 0 );
  375. DockControlBar( &m_wndToolBarPlayer, AFX_IDW_DOCKBAR_TOP, &wrAlreadyDockedBar );
  376. DockControlBar( &m_wndToolBarUiLook, AFX_IDW_DOCKBAR_RIGHT );
  377. RecalcLayout();
  378. }
  379. SetTimer(1, 200, NULL);
  380. return 0;
  381. }
  382. //////////////////////////////////////////////////////////////////////////
  383. BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
  384. {
  385. if( ! CExtNCW < CFrameWnd > :: PreCreateWindow( cs ) )
  386. return FALSE;
  387. // TODO: Modify the Window class or styles here by modifying
  388. //  the CREATESTRUCT cs
  389. cs.dwExStyle &= ~WS_EX_CLIENTEDGE;
  390. cs.lpszClass = AfxRegisterWndClass(0);
  391. return TRUE;
  392. }
  393. /////////////////////////////////////////////////////////////////////////////
  394. // CMainFrame diagnostics
  395. //////////////////////////////////////////////////////////////////////////
  396. #ifdef _DEBUG
  397. void CMainFrame::AssertValid() const
  398. {
  399. CExtNCW < CFrameWnd > :: AssertValid();
  400. }
  401. void CMainFrame::Dump(CDumpContext& dc) const
  402. {
  403. CExtNCW < CFrameWnd > :: Dump( dc );
  404. }
  405. #endif //_DEBUG
  406. /////////////////////////////////////////////////////////////////////////////
  407. // CMainFrame message handlers
  408. void CMainFrame::OnSetFocus(CWnd* pOldWnd)
  409. {
  410. pOldWnd;
  411. // forward focus to the view window
  412. if( m_pWndView->GetSafeHwnd() != NULL )
  413. m_pWndView->SetFocus();
  414. }
  415. //////////////////////////////////////////////////////////////////////////
  416. BOOL CMainFrame::OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo)
  417. {
  418. // // let the view have first crack at the command
  419. // if( m_pWndView->GetSafeHwnd() != NULL )
  420. // if (m_pWndView->OnCmdMsg(nID, nCode, pExtra, pHandlerInfo))
  421. // return TRUE;
  422. if( ID_MYEXTBTN_SLIDER == nID )
  423. {
  424. if( nCode == CN_UPDATE_COMMAND_UI )
  425. {
  426. #if (defined __EXT_MFC_NO_CUSTOMIZE)
  427. CWinApp * pApp = ::AfxGetApp();
  428. ASSERT( pApp != NULL );
  429. CExtCmdItem * pCmdItemSlider =
  430. g_CmdManager->CmdGetPtr(
  431. pApp->m_pszProfileName,
  432. ID_MYEXTBTN_SLIDER
  433. );
  434. ASSERT( pCmdItemSlider != NULL );
  435. CZoomBarSliderButton * pZoomSliderTBB = (CZoomBarSliderButton *)
  436. STATIC_DOWNCAST(
  437. CExtBarSliderButton,
  438. m_wndToolBarZoom.GetButton(
  439. m_wndToolBarZoom.CommandToIndex(ID_MYEXTBTN_SLIDER)
  440. )
  441. );
  442. ULONG nPos = pZoomSliderTBB->ScrollPosGet();
  443. pCmdItemSlider->m_sTipTool.Format(
  444. _T("SliderPos = %lu"),
  445. nPos
  446. );
  447. #endif // (defined __EXT_MFC_NO_CUSTOMIZE)
  448. CCmdUI * pCmdUI = (CCmdUI*)pExtra;
  449. ASSERT( pCmdUI != NULL );
  450. pCmdUI->Enable( m_pAviPlayer != NULL && m_pAviPlayer->IsOpen() );
  451. return TRUE;
  452. }
  453. } // if( ID_MYEXTBTN_SLIDER == nID )
  454. //////////////////////////////////////////////////////////////////////////
  455. //////////////////////////////////////////////////////////////////////////
  456. //////////////////////////////////////////////////////////////////////////
  457. if( ID_MYEXTBTN_SCROLLER == nID )
  458. {
  459. if( nCode == CN_UPDATE_COMMAND_UI )
  460. {
  461. #if (defined __EXT_MFC_NO_CUSTOMIZE)
  462. CWinApp * pApp = ::AfxGetApp();
  463. ASSERT( pApp != NULL );
  464. CExtCmdItem * pCmdItemScroller =
  465. g_CmdManager->CmdGetPtr(
  466. pApp->m_pszProfileName,
  467. ID_MYEXTBTN_SCROLLER
  468. );
  469. ASSERT( pCmdItemScroller != NULL );
  470. CSeekBarSliderButton *pSeekScrollerTBB = (CSeekBarSliderButton *)
  471. STATIC_DOWNCAST(
  472. CExtBarSliderButton,
  473. m_wndToolBarSeek.GetButton(
  474. m_wndToolBarSeek.CommandToIndex(ID_MYEXTBTN_SCROLLER)
  475. )
  476. );
  477. ULONG nPos = pSeekScrollerTBB->ScrollPosGet();
  478. pCmdItemScroller->m_sTipTool.Format(
  479. _T("ScrollerPos = %lu"),
  480. nPos
  481. );
  482. #endif // (defined __EXT_MFC_NO_CUSTOMIZE)
  483. CCmdUI * pCmdUI = (CCmdUI*)pExtra;
  484. ASSERT( pCmdUI != NULL );
  485. pCmdUI->Enable( m_pAviPlayer != NULL && m_pAviPlayer->IsOpen() );
  486. return TRUE;
  487. }
  488. } // if( ID_MYEXTBTN_SCROLLER == nID )
  489. // otherwise, do default handling
  490. return CExtNCW < CFrameWnd > :: OnCmdMsg( nID, nCode, pExtra, pHandlerInfo );
  491. }
  492. //////////////////////////////////////////////////////////////////////////
  493. BOOL CMainFrame::PreTranslateMessage(MSG* pMsg) 
  494. {
  495. if( m_wndToolBarUiLook.PreTranslateMessage( pMsg ) )
  496. return true;
  497. if( m_wndMenuBar.TranslateMainFrameMessage( pMsg ) )
  498. return TRUE;
  499. return CExtNCW < CFrameWnd > :: PreTranslateMessage( pMsg );
  500. }
  501. //////////////////////////////////////////////////////////////////////////
  502. BOOL CMainFrame::DestroyWindow() 
  503. {
  504. CWinApp * pApp = ::AfxGetApp();
  505. ASSERT( pApp != NULL );
  506. ASSERT( pApp->m_pszRegistryKey != NULL );
  507. ASSERT( pApp->m_pszRegistryKey[0] != _T('') );
  508. ASSERT( pApp->m_pszProfileName != NULL );
  509. ASSERT( pApp->m_pszProfileName[0] != _T('') );
  510. #if (!defined __EXT_MFC_NO_CUSTOMIZE)
  511. VERIFY(
  512. CExtCustomizeSite::CustomizeStateSave(
  513. pApp->m_pszRegistryKey,
  514. pApp->m_pszProfileName,
  515. pApp->m_pszProfileName
  516. )
  517. );
  518. #endif // (!defined __EXT_MFC_NO_CUSTOMIZE)
  519. VERIFY(
  520. CExtControlBar::ProfileBarStateSave(
  521. this,
  522. pApp->m_pszRegistryKey,
  523. pApp->m_pszProfileName,
  524. pApp->m_pszProfileName
  525. )
  526. );
  527. VERIFY(
  528. g_CmdManager->SerializeState(
  529. pApp->m_pszProfileName,
  530. pApp->m_pszRegistryKey,
  531. pApp->m_pszProfileName,
  532. true
  533. )
  534. );
  535. VERIFY(
  536. g_PaintManager.PaintManagerStateSave(
  537. pApp->m_pszRegistryKey,
  538. pApp->m_pszProfileName,
  539. pApp->m_pszProfileName
  540. )
  541. );
  542. g_CmdManager->ProfileWndRemove( GetSafeHwnd() );
  543. return CExtNCW < CFrameWnd > :: DestroyWindow();
  544. }
  545. //////////////////////////////////////////////////////////////////////////
  546. void CMainFrame::ActivateFrame(int nCmdShow) 
  547. {
  548. // window placement persistence
  549. if( m_dataFrameWP.showCmd != SW_HIDE )
  550. {
  551. SetWindowPlacement( &m_dataFrameWP );
  552. CExtNCW < CFrameWnd > :: ActivateFrame( m_dataFrameWP.showCmd );
  553. m_dataFrameWP.showCmd = SW_HIDE;
  554. return;
  555. }
  556. CExtNCW < CFrameWnd > :: ActivateFrame( nCmdShow );
  557. }
  558. //////////////////////////////////////////////////////////////////////////
  559. #if (!defined __EXT_MFC_NO_CUSTOMIZE)
  560. CExtBarButton * CMainFrame::OnCreateToolbarButton(
  561. CExtToolControlBar * pBar,
  562. CExtCustomizeCmdTreeNode * pNodeI,
  563. CExtCustomizeCmdTreeNode * pNodeC
  564. )
  565. {
  566. ASSERT_VALID( this );
  567. ASSERT_VALID( pBar );
  568. #ifdef _DEBUG
  569. if( pNodeI != NULL )
  570. {
  571. ASSERT_VALID( pNodeI );
  572. ASSERT( pNodeI->GetCmdID(false) != ID_SEPARATOR );
  573. }
  574. #endif // _DEBUG
  575. ASSERT_VALID( pNodeC );
  576. ASSERT( pNodeC->GetCmdID(false) != ID_SEPARATOR );
  577. if( pNodeC->GetCmdID(false) == ID_MYEXTBTN_SLIDER )
  578. {
  579. int nScrollPos = 4;
  580. int nScrollPage = 0;
  581. int nScrollTotal = 11;
  582. int nCount = int( CMainFrame::CZoomBarSliderButton::g_arrButtons.GetSize() );
  583. if( nCount > 0 )
  584. {
  585. CZoomBarSliderButton * pZoomSliderTBBExists =
  586. CMainFrame::CZoomBarSliderButton::g_arrButtons[0];
  587. ASSERT_VALID( pZoomSliderTBBExists );
  588. nScrollPos = pZoomSliderTBBExists->ScrollPosGet();
  589. nScrollPage = pZoomSliderTBBExists->ScrollPageSizeGet();
  590. nScrollTotal = pZoomSliderTBBExists->ScrollTotalRangeGet();
  591. }
  592. CZoomBarSliderButton * pSliderTBB =
  593. new CZoomBarSliderButton(
  594. /////////////////
  595. // standard CExtBarButton parms
  596. /////////////////
  597. pBar,
  598. ID_MYEXTBTN_SLIDER,
  599. 0,
  600. /////////////////
  601. // CExtBarSliderButton specific parms
  602. /////////////////
  603. //
  604. // scroll total/pos/page
  605. nScrollTotal, nScrollPos, nScrollPage,
  606. // button extent horz(left/right)/vert(up/down) in pixels
  607. // (if zeros - use slider-like layout instead of scrollbar-like)
  608. 0, 0,
  609. // total slider control extent horz/vert in pixels
  610. 100, 100
  611. );
  612. ASSERT_VALID( pSliderTBB );
  613. if( pNodeI != NULL )
  614. {
  615. pSliderTBB->SetBasicCmdNode( pNodeI );
  616. pSliderTBB->OnCustomizeUpdateProps( pNodeI );
  617. } // if( pNodeI != NULL )
  618. else
  619. pSliderTBB->OnCustomizeUpdateProps( pNodeC );
  620. pSliderTBB->SetCustomizedCmdNode( pNodeC );
  621. return pSliderTBB;
  622. } // if( pNodeC->GetCmdID(false) == ID_MYEXTBTN_SLIDER )
  623. if( pNodeC->GetCmdID(false) == ID_MYEXTBTN_SCROLLER )
  624. {
  625. int nScrollPos = 0;
  626. int nScrollPage = 0;
  627. int nScrollTotal = 0;
  628. int nCount = int( CMainFrame::CSeekBarSliderButton::g_arrButtons.GetSize() );
  629. if( nCount > 0 )
  630. {
  631. CSeekBarSliderButton *pSeekScrollerTBBExists = CMainFrame::CSeekBarSliderButton::g_arrButtons[0];
  632. ASSERT_VALID(pSeekScrollerTBBExists);
  633. nScrollPos = pSeekScrollerTBBExists->ScrollPosGet();
  634. nScrollPage = pSeekScrollerTBBExists->ScrollPageSizeGet();
  635. nScrollTotal = pSeekScrollerTBBExists->ScrollTotalRangeGet();
  636. }
  637. CSeekBarSliderButton * pScrollerTBB =
  638. new CSeekBarSliderButton(
  639. /////////////////
  640. // standard CExtBarButton parms
  641. /////////////////
  642. pBar,
  643. ID_MYEXTBTN_SCROLLER,
  644. 0,
  645. /////////////////
  646. // CExtBarScrollerButton specific parms
  647. /////////////////
  648. //
  649. // scroll total/pos/page
  650. nScrollTotal, nScrollPos, nScrollPage,
  651. // button extent horz(left/right)/vert(up/down) in pixels
  652. // (if zeros - use slider-like layout instead of scrollbar-like)
  653. 10, 10,
  654. // total slider control extent horz/vert in pixels
  655. 300, 300
  656. );
  657. ASSERT_VALID( pScrollerTBB );
  658. if( pNodeI != NULL )
  659. {
  660. pScrollerTBB->SetBasicCmdNode( pNodeI );
  661. pScrollerTBB->OnCustomizeUpdateProps( pNodeI );
  662. } // if( pNodeI != NULL )
  663. else
  664. pScrollerTBB->OnCustomizeUpdateProps( pNodeC );
  665. pScrollerTBB->SetCustomizedCmdNode( pNodeC );
  666. return pScrollerTBB;
  667. } // if( pNodeC->GetCmdID(false) == ID_MYEXTBTN_SCROLLER )
  668. return CExtCustomizeSite::OnCreateToolbarButton( pBar, pNodeI, pNodeC );
  669. }
  670. #endif // (!defined __EXT_MFC_NO_CUSTOMIZE)
  671. //////////////////////////////////////////////////////////////////////////
  672. void CMainFrame::OnSlider() 
  673. {
  674. int nCount = int( CMainFrame::CZoomBarSliderButton::g_arrButtons.GetSize() );
  675. if( nCount > 0 )
  676. {
  677. CZoomBarSliderButton * pZoomSliderTBB =
  678. CMainFrame::CZoomBarSliderButton::g_arrButtons[0];
  679. ASSERT_VALID(pZoomSliderTBB);
  680. DWORD nScrollPos = pZoomSliderTBB->ScrollPosGet();
  681. int nZoomPercent = 0;
  682. switch(nScrollPos) {
  683. case 0:
  684. nZoomPercent = 10;
  685. break;
  686. case 1:
  687. nZoomPercent = 25;
  688. break;
  689. case 2:
  690. nZoomPercent = 50;
  691. break;
  692. case 3:
  693. nZoomPercent = 75;
  694. break;
  695. case 4:
  696. nZoomPercent = 100;
  697. break;
  698. case 5:
  699. nZoomPercent = 150;
  700. break;
  701. case 6:
  702. nZoomPercent = 200;
  703. break;
  704. case 7:
  705. nZoomPercent = 250;
  706. break;
  707. case 8:
  708. nZoomPercent = 300;
  709. break;
  710. case 9:
  711. nZoomPercent = 350;
  712. break;
  713. case 10:
  714. nZoomPercent = 400;
  715. break;
  716. case 11:
  717. nZoomPercent = 450;
  718. break;
  719. }
  720. CString s;
  721. s.Format(_T("Current zoom:  %d %%"), nZoomPercent);
  722. AfxMessageBox(s);
  723. } // if( nCount > 0 )
  724. }
  725. void CMainFrame::OnScroller() 
  726. {
  727. int nCount = int( CMainFrame::CSeekBarSliderButton::g_arrButtons.GetSize() );
  728. if( nCount > 0 )
  729. {
  730. CSeekBarSliderButton *pSeekScrollerTBB = CMainFrame::CSeekBarSliderButton::g_arrButtons[0];
  731. ASSERT_VALID(pSeekScrollerTBB);
  732. DWORD nScrollPos = pSeekScrollerTBB->ScrollPosGet();
  733. CString s;
  734. s.Format(_T("Current seek position:  %d"), nScrollPos);
  735. AfxMessageBox(s);
  736. } // if( nCount > 0 )
  737. }
  738. //////////////////////////////////////////////////////////////////////////
  739. void CMainFrame::OnUpdatePlay(CCmdUI* pCmdUI) 
  740. {
  741. pCmdUI->Enable( m_pAviPlayer != NULL && m_pAviPlayer->IsOpen() && !m_pAviPlayer->IsPlaying()) ;
  742. }
  743. //////////////////////////////////////////////////////////////////////////
  744. void CMainFrame::OnUpdateStop(CCmdUI* pCmdUI) 
  745. {
  746. pCmdUI->Enable( m_pAviPlayer != NULL && m_pAviPlayer->IsOpen() );
  747. }
  748. //////////////////////////////////////////////////////////////////////////
  749. void CMainFrame::OnPause() 
  750. {
  751. if( m_pAviPlayer ){
  752. m_pAviPlayer->Pause();
  753. }
  754. }
  755. //////////////////////////////////////////////////////////////////////////
  756. void CMainFrame::OnUpdatePause(CCmdUI* pCmdUI) 
  757. {
  758. pCmdUI->Enable( m_pAviPlayer != NULL && m_pAviPlayer->IsPlaying() ) ;
  759. }
  760. //////////////////////////////////////////////////////////////////////////
  761. void CMainFrame::OnPlay() 
  762. {
  763. if( m_pAviPlayer ){
  764. m_pAviPlayer->Play();
  765. }
  766. }
  767. //////////////////////////////////////////////////////////////////////////
  768. void CMainFrame::OnStop() 
  769. {
  770. if( m_pAviPlayer ){
  771. m_pAviPlayer->Stop();
  772. m_wndStatusBar.SetPaneText(3, _T(""));
  773. m_wndStatusBar.SetPaneText(4, _T(""));
  774. }
  775. }
  776. //////////////////////////////////////////////////////////////////////////
  777. void CMainFrame::OnFileOpen() 
  778. {
  779. if( m_pWndView->GetSafeHwnd() == NULL )
  780. return;
  781. CString strPathName;
  782. #if ( ! defined __EXT_MFC_NO_SHELL_DIALOG_FILE )
  783. CExtShellDialogFile dlgShellFile(
  784. NULL,
  785. CExtShellDialogFile::__EFDT_OPEN_SINGLE
  786. );
  787. dlgShellFile.m_comboFileTypes.SetFilter( _T("Avi Files (*.avi)|*.avi|All Files (*.*)|*.*||") );
  788. dlgShellFile.m_nInitialFileTypeIndex = 0;
  789. dlgShellFile.m_bFilesMustExist = true;
  790. if( dlgShellFile.DoModal() != IDOK )
  791. return;
  792. ASSERT( dlgShellFile.m_arrRetValNames.GetSize() == 1 );
  793. strPathName = LPCTSTR(dlgShellFile.m_arrRetValNames[0]);
  794. #else // ( ! defined __EXT_MFC_NO_SHELL_DIALOG_FILE )
  795. CFileDialog dlgFile( 
  796. TRUE, 
  797. _T("avi"),
  798. _T(""),
  799. OFN_HIDEREADONLY|OFN_FILEMUSTEXIST|OFN_EXPLORER,
  800. _T("Avi Files (*.avi)|*.avi|All Files (*.*)|*.*||"), 
  801. this 
  802. );
  803. if( dlgFile.DoModal() != IDOK )
  804. return;
  805. strPathName = dlgFile.GetPathName();
  806. #endif // else from if ( ! defined __EXT_MFC_NO_SHELL_DIALOG_FILE )
  807. OnStop();
  808. m_wndStatusBar.SetPaneText(2, _T(""));
  809. m_wndStatusBar.SetPaneText(3, _T(""));
  810. m_wndStatusBar.SetPaneText(4, _T(""));
  811. if( m_pAviPlayer )
  812. {
  813. delete m_pAviPlayer;
  814. m_pAviPlayer = NULL;
  815. }
  816. int i;
  817. for( i = 0; i < CMainFrame::CZoomBarSliderButton::g_arrButtons.GetSize(); i++ )
  818. {
  819. CZoomBarSliderButton *pZoomSliderTBB = CMainFrame::CZoomBarSliderButton::g_arrButtons[i];
  820. ASSERT_VALID(pZoomSliderTBB);
  821.    pZoomSliderTBB->ScrollPosSet(4);
  822. pZoomSliderTBB->RedrawButton();
  823. }
  824. for( i =0 ; i < CMainFrame::CSeekBarSliderButton::g_arrButtons.GetSize(); i++ )
  825. {
  826. CSeekBarSliderButton *pSeekScrollerTBB = CMainFrame::CSeekBarSliderButton::g_arrButtons[i];
  827. ASSERT_VALID(pSeekScrollerTBB);
  828. pSeekScrollerTBB->ScrollPosSet(0);
  829. pSeekScrollerTBB->RedrawButton();
  830. }
  831. ASSERT( m_pWndView->GetSafeHwnd() != NULL );
  832. m_pAviPlayer = new CAviPlayer( m_pWndView );
  833. if( m_pAviPlayer->OpenFromFile( strPathName ) )
  834. {
  835. m_pWndView->OnSwUpdateScrollBars();
  836. CString sPaneText;
  837. sPaneText.Format(_T("Frames total:  %d"), m_pAviPlayer->GetFrameCount());
  838. m_wndStatusBar.SetPaneText(2, sPaneText);
  839. DWORD nFrameCount = m_pAviPlayer->GetFrameCount()-1;
  840. int nPageSize = MulDiv(nFrameCount,1,20);
  841. if( nPageSize == 0 )
  842. nPageSize = 2;
  843. for( i = 0; i < CMainFrame::CSeekBarSliderButton::g_arrButtons.GetSize(); i++ )
  844. {
  845. CSeekBarSliderButton *pSeekScrollerTBB = CMainFrame::CSeekBarSliderButton::g_arrButtons[i];
  846. ASSERT_VALID(pSeekScrollerTBB);
  847. pSeekScrollerTBB->ScrollTotalRangeSet( nFrameCount + nPageSize );
  848. pSeekScrollerTBB->ScrollPageSizeSet( nPageSize );
  849. pSeekScrollerTBB->RedrawButton();
  850. }
  851. m_wndStatusBar.SetPaneText( 1,_T("100 %") );
  852. OnPlay();
  853. }
  854. }
  855. //////////////////////////////////////////////////////////////////////////
  856. void CMainFrame::OnTimer(__EXT_MFC_UINT_PTR nIDEvent) 
  857. {
  858. if( nIDEvent == 1 )
  859. {
  860. if(m_pAviPlayer)
  861. {
  862. for(int i=0; i< CMainFrame::CSeekBarSliderButton::g_arrButtons.GetSize(); i++){
  863. CSeekBarSliderButton *pSeekScrollerTBB = CMainFrame::CSeekBarSliderButton::g_arrButtons[i];
  864. ASSERT_VALID(pSeekScrollerTBB);
  865. pSeekScrollerTBB->ScrollPosSet( 
  866. m_pAviPlayer->GetCurrentFrameNumber()
  867. );
  868. pSeekScrollerTBB->RedrawButton();
  869. }
  870. if( m_pAviPlayer->IsOpen() ){
  871. CString sPaneText;
  872. sPaneText.Format(_T("Current frame :  %d"), m_pAviPlayer->GetCurrentFrameNumber());
  873. m_wndStatusBar.SetPaneText(3, sPaneText);
  874. sPaneText.Format(_T("Frames skipped:  %d"), m_pAviPlayer->GetFrameSkipped());
  875. m_wndStatusBar.SetPaneText(4, sPaneText);
  876. }
  877. }
  878. return;
  879. }
  880. CExtNCW < CFrameWnd > :: OnTimer( nIDEvent );
  881. }