📄 mainfrm.cpp
字号:
// MainFrm.cpp : implementation of the CMainFrame class//#include "stdafx.h"#include "Osmo4.h"#include <gpac/options.h>#include <gpac/network.h>#include "MainFrm.h"#include <gx.h>#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endifCChildView::CChildView(){}CChildView::~CChildView(){ /*since the wndproc is overwritten by the terminal, we detach the handle otherwise we get a nice assertion failure from windows*/ HWND hWnd = Detach(); ::PostMessage(hWnd, WM_QUIT, 0, 0);}BEGIN_MESSAGE_MAP(CChildView,CWnd ) //{{AFX_MSG_MAP(CChildView) //}}AFX_MSG_MAPEND_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////// CChildView message handlersBOOL CChildView::PreCreateWindow(CREATESTRUCT& cs) { if (!CWnd::PreCreateWindow(cs)) return FALSE; cs.style &= ~WS_BORDER; cs.lpszClass = AfxRegisterWndClass(CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS, NULL, HBRUSH(COLOR_WINDOW+1), NULL); return TRUE;}/////////////////////////////////////////////////////////////////////////////// CMainFrameIMPLEMENT_DYNAMIC(CMainFrame, CFrameWnd)BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd) //{{AFX_MSG_MAP(CMainFrame) ON_WM_CREATE() ON_WM_SETFOCUS() ON_COMMAND(ID_APP_EXIT, OnAppExit) ON_MESSAGE(WM_OPENURL, Open) ON_MESSAGE(WM_SETTINGCHANGE, OnSIPChange) ON_MESSAGE(WM_SETSIZE,OnSetSize) ON_MESSAGE(WM_NAVIGATE,OnNavigate) ON_WM_SIZE() ON_COMMAND(ID_FILE_STEP, OnFileStep) ON_UPDATE_COMMAND_UI(ID_FILE_STEP, OnUpdateFileStep) ON_COMMAND(ID_FILE_PAUSE, OnFilePause) ON_UPDATE_COMMAND_UI(ID_FILE_PAUSE, OnUpdateFilePause) ON_COMMAND(ID_FILE_STOP, OnFileStop) ON_UPDATE_COMMAND_UI(ID_FILE_STOP, OnUpdateFileStop) ON_COMMAND(ID_VIEW_FULLSCREEN, OnViewFullscreen) ON_UPDATE_COMMAND_UI(ID_VIEW_FULLSCREEN, OnUpdateViewFullscreen) ON_WM_CLOSE() ON_COMMAND(ID_VIEW_FIT, OnViewFit) ON_UPDATE_COMMAND_UI(ID_VIEW_FIT, OnUpdateViewFit) ON_COMMAND(ID_VIEW_AR_ORIG, OnViewArOrig) ON_COMMAND(ID_VIEW_AR_FILL, OnViewArFill) ON_COMMAND(ID_VIEW_AR_43, OnViewAr43) ON_COMMAND(ID_VIEW_AR_169, OnViewAr169) ON_COMMAND(ID_NAV_NONE, OnNavNone) ON_COMMAND(ID_NAV_SLIDE, OnNavSlide) ON_COMMAND(ID_NAV_RESET, OnNaveReset) ON_COMMAND_RANGE(ID_NAV_NONE, ID_NAV_EXAMINE, OnSetNavigation) ON_WM_KEYDOWN() ON_WM_KEYUP() ON_COMMAND(ID_VIEW_TIMING, OnViewTiming) ON_UPDATE_COMMAND_UI(ID_VIEW_TIMING, OnUpdateViewTiming) ON_WM_INITMENUPOPUP() //}}AFX_MSG_MAPEND_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////// CMainFrame construction/destructionCMainFrame::CMainFrame(){ GXOpenInput(); m_view_timing = 0; m_restore_fs = 0;}CMainFrame::~CMainFrame(){ GXCloseInput();}void CMainFrame::OnSetFocus(CWnd* pOldWnd){ if (m_restore_fs) { m_restore_fs = 0; GetApp()->ShowTaskBar(0); OnViewFullscreen(); }}int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct){ COsmo4 *app = GetApp(); if (CFrameWnd::OnCreate(lpCreateStruct) == -1) return -1; // create a view to occupy the client area of the frame if (!m_wndView.Create(NULL, NULL, AFX_WS_DEFAULT_VIEW | WS_BORDER, CRect(0, 0, 0, 0), this, AFX_IDW_PANE_FIRST, NULL)) { TRACE0("Failed to create view window\n"); return -1; } m_wndView.ShowWindow(SW_HIDE); if (!m_dumbWnd.Create(NULL, NULL, AFX_WS_DEFAULT_VIEW | WS_BORDER, CRect(0, 0, 0, 0), this, AFX_IDW_PANE_FIRST, NULL)) { TRACE0("Failed to create dumb window\n"); return -1; } m_dumbWnd.SetWindowPos(this, 0, 0, app->m_screen_width, app->m_screen_height-app->m_menu_height, 0L); m_dumbWnd.ShowWindow(SW_HIDE); if (!m_progBar.Create(IDD_CONTROL , this) ) { TRACE0("Failed to create status bar\n"); return -1; // fail to create } m_progBar.UpdateWindow(); m_progBar.SetWindowPos(this, 0, 0, app->m_screen_width, app->m_menu_height, 0L); m_progBar.ShowWindow(SW_SHOWNORMAL); m_wndCommandBar.m_bShowSharedNewButton = FALSE; if (!m_wndCommandBar.Create(this) || !m_wndCommandBar.InsertMenuBar(IDR_MENU) || !m_wndCommandBar.AddAdornments() || !m_wndCommandBar.LoadBitmap(IDR_MAINFRAME) ) { TRACE0("Failed to create CommandBar\n"); return -1; // fail to create } CToolBarCtrl & toolBar = m_wndCommandBar.GetToolBarCtrl(); TBBUTTON tb; memset(&tb, 0, sizeof(tb)); tb.idCommand = ID_OPEN_FILE; tb.iBitmap = 0; tb.fsStyle = TBSTYLE_BUTTON; toolBar.AddButtons(1, &tb); tb.idCommand = 0; tb.iBitmap = 0; tb.fsStyle = TBSTYLE_SEP; toolBar.AddButtons(1, &tb); tb.idCommand = ID_FILE_PAUSE; tb.iBitmap = 1; tb.fsStyle = TBSTYLE_BUTTON; toolBar.AddButtons(1, &tb); tb.idCommand = ID_FILE_STEP; tb.iBitmap = 2; tb.fsStyle = TBSTYLE_BUTTON; toolBar.AddButtons(1, &tb); tb.idCommand = ID_FILE_STOP; tb.iBitmap = 3; tb.fsStyle = TBSTYLE_BUTTON; toolBar.AddButtons(1, &tb); tb.idCommand = 0; tb.iBitmap = 0; tb.fsStyle = TBSTYLE_SEP; toolBar.AddButtons(1, &tb); SetIcon(AfxGetApp()->LoadIcon(IDR_MAINFRAME), TRUE); SetIcon(AfxGetApp()->LoadIcon(IDR_MAINFRAME), FALSE); SetWindowPos(NULL, 0, 0, app->m_screen_width, app->m_screen_height, 0L); SetWindowText(_T("Osmo4")); return 0;}void CMainFrame::SetPauseButton(Bool force_play_button){ CToolBarCtrl & toolBar = m_wndCommandBar.GetToolBarCtrl(); TBBUTTON tb; memset(&tb, 0, sizeof(tb)); tb.idCommand = ID_FILE_PAUSE; tb.fsStyle = TBSTYLE_BUTTON; if (force_play_button || GetApp()->m_stoped || gf_term_get_option(GetApp()->m_term, GF_OPT_PLAY_STATE)==GF_STATE_PAUSED) { tb.iBitmap = 4; } else { tb.iBitmap = 1; } toolBar.DeleteButton(5); toolBar.InsertButton(5, &tb);}BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs){ if( !CFrameWnd::PreCreateWindow(cs) ) return FALSE; // TODO: Modify the Window class or styles here by modifying // the CREATESTRUCT cs cs.lpszClass = AfxRegisterWndClass(0); return TRUE;} /////////////////////////////////////////////////////////////////////////////// CMainFrame diagnostics#ifdef _DEBUGvoid CMainFrame::AssertValid() const{ CFrameWnd::AssertValid();}void CMainFrame::Dump(CDumpContext& dc) const{ CFrameWnd::Dump(dc);}#endif //_DEBUG/////////////////////////////////////////////////////////////////////////////// CMainFrame message handlersBOOL CMainFrame::OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo){ // let the view have first crack at the command if (m_wndView.OnCmdMsg(nID, nCode, pExtra, pHandlerInfo)) return TRUE; // otherwise, do default handling return CFrameWnd::OnCmdMsg(nID, nCode, pExtra, pHandlerInfo);}#define PROGRESS_TIMER 20#define PROGRESS_REFRESH_MS 500void CALLBACK EXPORT ProgressTimer(HWND , UINT , UINT nID , DWORD ){ if (nID != PROGRESS_TIMER) return; ((CMainFrame *) GetApp()->m_pMainWnd)->UpdateTime();}void CMainFrame::UpdateTime(){ u32 now; COsmo4 *app = GetApp(); if (!app->m_open || app->m_stoped) return; now = gf_term_get_time_in_ms(app->m_term); if (!now) return; if (app->m_can_seek && (now>=app->m_duration + 100)) { if (gf_term_get_option(app->m_term, GF_OPT_IS_FINISHED)) { if (app->m_Loop && m_full_screen) { gf_term_play_from_time(app->m_term, 0, 0); } else { OnFileStop(); if (app->m_Loop) OnFilePause(); } return; } } if (!m_full_screen) m_progBar.SetPosition(now);}void CMainFrame::CloseURL(){ COsmo4 *app = GetApp(); if (!app->m_open) return; if (m_view_timing) KillTimer(PROGRESS_TIMER); gf_term_disconnect(app->m_term); app->m_open = 0; app->m_can_seek = 0; app->m_duration = (u32) -1; m_progBar.m_prev_time = 0; m_progBar.SetPosition(0);}void CMainFrame::OnAppExit() { CloseURL(); PostMessage(WM_QUIT);}void CMainFrame::OnSize(UINT nType, int cx, int cy) { COsmo4 *app = GetApp(); u32 disp_w, disp_h, c_w, c_h, x, y; if (m_full_screen) return; disp_w = app->m_screen_width; disp_h = app->m_screen_height; CFrameWnd::OnSize(nType, disp_w, disp_h); x = y = 0; disp_h -= app->m_menu_height; if (m_view_timing) { disp_h -= app->m_menu_height; y = app->m_menu_height; m_progBar.SetWindowPos(this, 0, 0, app->m_screen_width, app->m_menu_height, 0L); m_progBar.ShowWindow(SW_SHOWNORMAL); } else { m_progBar.ShowWindow(SW_HIDE); } m_dumbWnd.SetWindowPos(this, 0, y, disp_w, disp_h, 0L);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -