⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mainfrm.cpp

📁 一个用于智能手机的多媒体库适合S60 WinCE的跨平台开发库
💻 CPP
📖 第 1 页 / 共 3 页
字号:
// MainFrm.cpp : implementation of the CMainFrame class//#include "stdafx.h"#include "Osmo4.h"#include "MainFrm.h"#include "resource.h"#include <gpac/network.h>#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endif/////////////////////////////////////////////////////////////////////////////// CChildViewCChildView::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) {	cs.dwExStyle = 0;	cs.style &= ~WS_BORDER;	cs.lpszClass = AfxRegisterWndClass(CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS, 		::LoadCursor(NULL, IDC_ARROW), 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_WM_INITMENUPOPUP()	ON_WM_SIZE()	ON_WM_MOVE()	ON_MESSAGE(WM_SETSIZE,OnSetSize)	ON_MESSAGE(WM_NAVIGATE,OnNavigate)	ON_MESSAGE(WM_OPENURL, Open)	ON_MESSAGE(WM_NEWINSTANCE, NewInstanceOpened)		ON_WM_LBUTTONDOWN()	ON_WM_LBUTTONDBLCLK()	ON_WM_LBUTTONUP()	ON_WM_CHAR()	ON_WM_SYSKEYDOWN()	ON_WM_SYSKEYUP()	ON_WM_KEYDOWN()	ON_WM_KEYUP()	ON_WM_DROPFILES()	ON_MESSAGE(WM_CONSOLEMSG, OnConsoleMessage)	ON_COMMAND(ID_VIEW_ORIGINAL, OnViewOriginal)	ON_COMMAND(ID_VIEW_FULLSCREEN, OnViewFullscreen)	ON_COMMAND(ID_AR_KEEP, OnArKeep)	ON_COMMAND(ID_AR_FILL, OnArFill)	ON_COMMAND(ID_AR_43, OnAr43)	ON_COMMAND(ID_AR_169, OnAr169)	ON_UPDATE_COMMAND_UI(ID_AR_169, OnUpdateAr169)	ON_UPDATE_COMMAND_UI(ID_AR_43, OnUpdateAr43)	ON_UPDATE_COMMAND_UI(ID_AR_FILL, OnUpdateArFill)	ON_UPDATE_COMMAND_UI(ID_AR_KEEP, OnUpdateArKeep)	ON_COMMAND(ID_NAVIGATE_NONE, OnNavigateNone)	ON_COMMAND(ID_NAVIGATE_WALK, OnNavigateWalk)	ON_COMMAND(ID_NAVIGATE_FLY, OnNavigateFly)	ON_COMMAND(ID_NAVIGATE_EXAM, OnNavigateExam)	ON_COMMAND(ID_NAVIGATE_SLIDE, OnNavigateSlide)	ON_COMMAND(ID_NAVIGATE_PAN, OnNavigatePan)	ON_COMMAND(ID_NAVIGATE_ORBIT, OnNavigateOrbit)	ON_COMMAND(ID_NAVIGATE_GAME, OnNavigateGame)	ON_COMMAND(ID_NAVIGATE_VR, OnNavigateVR)	ON_COMMAND(ID_NAV_RESET, OnNavigateReset)	ON_COMMAND(ID_SHORTCUTS, OnShortcuts)	ON_COMMAND(IDD_CONFIGURE, OnConfigure)	ON_COMMAND(ID_FILE_PROP, OnFileProp)	ON_COMMAND(ID_VIEW_PL, OnViewPlaylist)	ON_UPDATE_COMMAND_UI(ID_FILE_PROP, OnUpdateFileProp)	ON_UPDATE_COMMAND_UI(ID_NAVIGATE_NONE, OnUpdateNavigate)	ON_COMMAND(ID_REC_ENABLE, OnCacheEnable)	ON_UPDATE_COMMAND_UI(ID_REC_ENABLE, OnUpdateCacheEnable)	ON_COMMAND(ID_REC_STOP, OnCacheStop)	ON_COMMAND(ID_REC_ABORT, OnCacheAbort)	ON_UPDATE_COMMAND_UI(ID_REC_STOP, OnUpdateCacheStop)	ON_COMMAND(ID_COLLIDE_DISP, OnCollideDisp)	ON_UPDATE_COMMAND_UI(ID_COLLIDE_DISP, OnUpdateCollideDisp)	ON_COMMAND(ID_COLLIDE_NONE, OnCollideNone)	ON_UPDATE_COMMAND_UI(ID_COLLIDE_NONE, OnUpdateCollideNone)	ON_COMMAND(ID_COLLIDE_REG, OnCollideReg)	ON_UPDATE_COMMAND_UI(ID_COLLIDE_REG, OnUpdateCollideReg)	ON_COMMAND(ID_HEADLIGHT, OnHeadlight)	ON_UPDATE_COMMAND_UI(ID_HEADLIGHT, OnUpdateHeadlight)	ON_COMMAND(ID_GRAVITY, OnGravity)	ON_UPDATE_COMMAND_UI(ID_GRAVITY, OnUpdateGravity)	ON_COMMAND(ID_NAV_INFO, OnNavInfo)	ON_COMMAND(ID_NAV_NEXT, OnNavNext)	ON_COMMAND(ID_NAV_PREV, OnNavPrev)	ON_UPDATE_COMMAND_UI(ID_NAV_NEXT, OnUpdateNavNext)	ON_UPDATE_COMMAND_UI(ID_NAV_PREV, OnUpdateNavPrev)	ON_COMMAND(ID_CLEAR_NAV, OnClearNav)	ON_UPDATE_COMMAND_UI(ID_VIEW_PL, OnUpdateViewPlaylist)	ON_COMMAND(ID_PLAYLIST_LOOP, OnPlaylistLoop)	ON_UPDATE_COMMAND_UI(ID_PLAYLIST_LOOP, OnUpdatePlaylistLoop)	ON_COMMAND(ID_ADD_SUBTITLE, OnAddSubtitle)	ON_UPDATE_COMMAND_UI(ID_REC_ABORT, OnUpdateCacheStop)	ON_UPDATE_COMMAND_UI(ID_NAVIGATE_WALK, OnUpdateNavigate)	ON_UPDATE_COMMAND_UI(ID_NAVIGATE_FLY, OnUpdateNavigate)	ON_UPDATE_COMMAND_UI(ID_NAVIGATE_EXAM, OnUpdateNavigate)	ON_UPDATE_COMMAND_UI(ID_NAVIGATE_PAN, OnUpdateNavigate)	ON_UPDATE_COMMAND_UI(ID_NAVIGATE_SLIDE, OnUpdateNavigate)	ON_UPDATE_COMMAND_UI(ID_NAVIGATE_ORBIT, OnUpdateNavigate)	ON_UPDATE_COMMAND_UI(ID_NAVIGATE_VR, OnUpdateNavigate)	ON_UPDATE_COMMAND_UI(ID_NAVIGATE_GAME, OnUpdateNavigate)	ON_COMMAND(ID_FILE_EXIT, OnFileExit)	ON_COMMAND(ID_VIEW_CPU, OnViewCPU)	ON_UPDATE_COMMAND_UI(ID_VIEW_CPU, OnUpdateViewCPU)		//}}AFX_MSG_MAPEND_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////// CMainFrame construction/destructionCMainFrame::CMainFrame(){	m_icoerror = AfxGetApp()->LoadIcon(IDI_ERR);	m_icomessage = AfxGetApp()->LoadIcon(IDI_MESSAGE);	m_bFullScreen = m_bRestoreFS = 0;		m_aspect_ratio = GF_ASPECT_RATIO_KEEP;	m_pProps = NULL;	m_pOpt = NULL;	m_pPlayList = NULL;	m_pWndView = new CChildView();	m_bInitShow = TRUE;	m_bStartupFile = TRUE;	m_num_chapters = 0;	m_chapters_start = NULL;	m_last_prog = -1;	m_timer_on = 0;	m_show_rti = 0;	nb_viewpoints = 0;}CMainFrame::~CMainFrame(){	if (m_chapters_start) free(m_chapters_start);	if (m_pProps != NULL) m_pProps->DestroyWindow();	if (m_pOpt != NULL) m_pOpt->DestroyWindow();	if (m_pPlayList != NULL) delete m_pPlayList;	delete m_pWndView;}#define RTI_TIMER	22#define RTI_REFRESH_MS		500void CALLBACK EXPORT RTInfoTimer(HWND , UINT , UINT nID , DWORD ){	char szMsg[100];	GF_SystemRTInfo rti;	if (nID != RTI_TIMER) return;	WinGPAC *app = GetApp();	CMainFrame *pFrame = (CMainFrame *) app->m_pMainWnd;	/*shutdown*/	if (!pFrame) return;	if (pFrame->m_show_rti && !pFrame->m_timer_on) {		if (!gf_sys_get_rti(RTI_REFRESH_MS, &rti, 0)) return;		if (!rti.gpac_memory) rti.gpac_memory = rti.process_memory ? rti.process_memory : rti.physical_memory;		if (pFrame->m_show_rti && !pFrame->m_timer_on) {			sprintf(szMsg, "FPS %02.2f - CPU %02d (%02d) - Mem %d kB", 						gf_term_get_framerate(app->m_term, 0), rti.total_cpu_usage, rti.process_cpu_usage, rti.gpac_memory/1024);			pFrame->m_wndStatusBar.SetPaneText(1, szMsg);		}	}	u32 ms = gf_term_get_time_in_ms(app->m_term);	u32 h = ms / 1000 / 3600;	u32 m = ms / 1000 / 60 - h*60;	u32 s = ms / 1000 - h*3600 - m*60;		sprintf(szMsg, "%02d:%02d.%02d", h, m, s);	pFrame->m_wndStatusBar.SetPaneText(0, szMsg);}static UINT status_indics[] ={	ID_TIMER,	ID_SEPARATOR,           // status line indicator};int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct){	UINT buttonArray[50];	TBBUTTONINFO bi;	u32 *ba;	if (CFrameWnd::OnCreate(lpCreateStruct) == -1)		return -1;	// create a view to occupy the client area of the frame	if (!m_pWndView->CreateEx(0, NULL, NULL, WS_CHILD, 0, 0, 300, 200, m_hWnd, NULL, NULL))	{		TRACE0("Failed to create view window\n");		return -1;	}	m_pPlayList = new Playlist();	m_pPlayList->Create();	m_pPlayList->ShowWindow(SW_HIDE);	if (!m_wndToolBar.CreateEx(this, WS_CHILD | CBRS_TOP | CBRS_FLYBY) ||		!m_wndToolBar.LoadBitmap(IDR_MAINTOOLS))	{		TRACE0("Failed to create toolbar\n");		return -1;      // fail to create	}	ba = &buttonArray[0];	*ba = ID_FILEOPEN; ba++;	*ba = ID_SEPARATOR; ba++;	*ba = ID_NAV_PREV; ba++;	*ba = ID_NAV_NEXT; ba++;	*ba = ID_SEPARATOR; ba++;	*ba = ID_FILE_PLAY; ba++;	*ba = ID_FILE_STEP; ba++;	*ba = ID_FILE_STOP; ba++;	*ba = ID_SEPARATOR; ba++;	*ba = ID_FILE_PROP; ba++;	*ba = ID_SEPARATOR; ba++;	*ba = ID_FILE_PROP; ba++;	*ba = ID_SWITCH_RENDER;	m_wndToolBar.SetButtons(buttonArray, 13);	m_wndToolBar.SetButtonInfo(0, ID_FILEOPEN, TBBS_BUTTON, 0);	m_wndToolBar.SetButtonInfo(1, ID_SEPARATOR, TBBS_SEPARATOR, 0);	m_wndToolBar.SetButtonInfo(2, ID_NAV_PREV, TBBS_DROPDOWN, 1);	m_wndToolBar.SetButtonInfo(3, ID_NAV_NEXT, TBBS_DROPDOWN, 2);	m_wndToolBar.SetButtonInfo(4, ID_SEPARATOR, TBBS_SEPARATOR, 0);	m_wndToolBar.SetButtonInfo(5, ID_FILE_PLAY, TBBS_BUTTON, 3);	m_wndToolBar.SetButtonInfo(6, ID_FILE_STEP, TBBS_BUTTON, 5);	m_wndToolBar.SetButtonInfo(7, ID_FILE_STOP, TBBS_BUTTON, 6);	m_wndToolBar.SetButtonInfo(8, ID_SEPARATOR, TBBS_SEPARATOR, 0);	m_wndToolBar.SetButtonInfo(9, ID_FILE_PROP, TBBS_BUTTON, 7);	m_wndToolBar.SetButtonInfo(10, ID_SEPARATOR, TBBS_SEPARATOR, 0);	m_wndToolBar.SetButtonInfo(11, IDD_CONFIGURE, TBBS_BUTTON, 8);	m_wndToolBar.SetButtonInfo(12, ID_SWITCH_RENDER, TBBS_BUTTON, 9);	CToolBarCtrl &ctrl = m_wndToolBar.GetToolBarCtrl();	ctrl.SetStyle(TBSTYLE_FLAT | TBSTYLE_DROPDOWN);	ctrl.SetExtendedStyle(TBSTYLE_EX_DRAWDDARROWS);	memset(&bi, 0, sizeof(bi));	bi.cbSize = sizeof(bi);	ctrl.GetButtonInfo(2, &bi);	bi.fsStyle |= TBSTYLE_DROPDOWN;	ctrl.SetButtonInfo(ID_NAV_PREV, &bi);	memset(&bi, 0, sizeof(bi));	bi.cbSize = sizeof(bi);	ctrl.GetButtonInfo(3, &bi);	bi.fsStyle |= TBSTYLE_DROPDOWN;	ctrl.SetButtonInfo(ID_NAV_NEXT, &bi);	if (!m_wndStatusBar.Create(this) ||		!m_wndStatusBar.SetIndicators(status_indics,		  sizeof(status_indics)/sizeof(UINT)))	{		TRACE0("Failed to create status bar\n");		return -1;      // fail to create	}	if (!m_Address.Create(this, IDD_NAVBAR, WS_CHILD | CBRS_TOP | CBRS_FLYBY | CBRS_SIZE_DYNAMIC, IDD_NAVBAR) ) {		return -1;      // fail to create	}	if (!m_Sliders.Create(IDD_SLIDERS, this) ) {		return -1;      // fail to create	}	m_wndStatusBar.SetPaneInfo(0, ID_TIMER, SBPS_NORMAL, 60);	m_wndStatusBar.SetPaneInfo(1, ID_SEPARATOR, SBPS_STRETCH, 0);	SetIcon(AfxGetApp()->LoadIcon(IDR_MAINFRAME), TRUE);	SetIcon(AfxGetApp()->LoadIcon(IDR_MAINFRAME), FALSE);	SetTimer(RTI_TIMER, RTI_REFRESH_MS, RTInfoTimer);	return 0;}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.dwExStyle &= ~WS_EX_CLIENTEDGE;	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 handlersvoid CMainFrame::OnSetFocus(CWnd* pOldWnd){	m_pWndView->SetFocus();	if (m_bRestoreFS==1) {		m_bRestoreFS=2;	}	else if (m_bRestoreFS==2) {		m_bRestoreFS = 0;		SetFullscreen();	}}BOOL CMainFrame::OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo){	// let the view have first crack at the command	if (m_pWndView->OnCmdMsg(nID, nCode, pExtra, pHandlerInfo))		return TRUE;	// otherwise, do default handling	return CFrameWnd::OnCmdMsg(nID, nCode, pExtra, pHandlerInfo);}void CMainFrame::OnSize(UINT nType, int cx, int cy) {	RECT rc2;	u32 tool_h, slide_h, add_h, stat_h;	if (m_bInitShow) {		CFrameWnd::OnSize(nType, cx, cy);		return;	}	m_wndToolBar.GetClientRect(&rc2);	tool_h = rc2.bottom - rc2.top;	m_Address.GetClientRect(&rc2);	add_h = rc2.bottom - rc2.top;	m_Sliders.GetClientRect(&rc2);	slide_h = rc2.bottom - rc2.top;	m_wndStatusBar.GetClientRect(&rc2);	stat_h = rc2.bottom - rc2.top;	if ((u32) cy <= tool_h+add_h+slide_h+stat_h) {		OnSetSize(cx, 1);		return;	}	CFrameWnd::OnSize(nType, cx, cy);	cy -= tool_h + add_h + slide_h + stat_h;	m_Address.SetWindowPos(this, 0, 0, cx, add_h, SWP_SHOWWINDOW | SWP_NOMOVE);	m_pWndView->ShowWindow(SW_SHOW);	m_pWndView->SetWindowPos(this, 0, add_h + tool_h, cx, cy, SWP_NOZORDER);	m_Sliders.SetWindowPos(this, 0, add_h + tool_h + cy, cx, slide_h, SWP_NOZORDER|SWP_SHOWWINDOW);	/*and resize term*/	gf_term_set_size(GetApp()->m_term, cx, cy);}LONG CMainFrame::OnSetSize(WPARAM wParam, LPARAM lParam){	UINT width, height;	width = wParam;	height = lParam;	if (m_bInitShow) {		m_wndToolBar.UpdateWindow();		m_wndToolBar.ShowWindow(SW_SHOW);		m_Address.UpdateWindow();		m_Address.ShowWindow(SW_SHOW);		m_Sliders.UpdateWindow();		m_Sliders.ShowWindow(SW_SHOW);		m_Sliders.m_PosSlider.EnableWindow(FALSE);		m_pWndView->ShowWindow(SW_SHOW);		ShowWindow(SW_SHOW);		m_bInitShow = FALSE;	}	RECT winRect;	winRect.left = 0;	winRect.right = width;	winRect.top = 0;	winRect.bottom = height;	AdjustWindowRectEx(&winRect, GetStyle(), TRUE, GetExStyle());	winRect.bottom -= winRect.top;	winRect.right -= winRect.left;	winRect.left = winRect.top = 0;	RECT rc2;	m_Address.GetClientRect(&rc2);	winRect.bottom += rc2.bottom;	m_wndToolBar.GetClientRect(&rc2);	winRect.bottom += rc2.bottom;	m_Sliders.GetClientRect(&rc2);	winRect.bottom += rc2.bottom;	m_wndStatusBar.GetClientRect(&rc2);	winRect.bottom += rc2.bottom;	GetWindowRect(&rc2);	rc2.bottom -= rc2.top;	rc2.right -= rc2.left;	if ((rc2.right != winRect.right) || (rc2.bottom != winRect.bottom)) {		SetWindowPos(NULL, 0, 0, winRect.right, winRect.bottom, SWP_NOZORDER | SWP_NOMOVE | SWP_SHOWWINDOW);	} else {		/*just resize term*/		gf_term_set_size(GetApp()->m_term, width, height);	}	return 0;}void CMainFrame::OnMove(int x, int y) {	CFrameWnd::OnMove(x, y);	RECT rc;		m_wndToolBar.GetClientRect(&rc);	m_wndToolBar.SetWindowPos(this, x, y, 0, 0, SWP_NOSIZE | SWP_SHOWWINDOW);	y += rc.bottom - rc.top;	m_Address.SetWindowPos(this, x, y, 0, 0, SWP_NOSIZE | SWP_SHOWWINDOW);	m_Address.GetClientRect(&rc);	y += rc.bottom - rc.top;	m_pWndView->SetWindowPos(this, x, y, 0, 0, SWP_NOSIZE);	m_pWndView->GetClientRect(&rc);	y += rc.bottom;	m_Sliders.SetWindowPos(this, x, y, 0, 0, SWP_NOSIZE | SWP_SHOWWINDOW);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -