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

📄 osmo4.cpp

📁 一个用于智能手机的多媒体库适合S60 WinCE的跨平台开发库
💻 CPP
📖 第 1 页 / 共 3 页
字号:
// GPAC.cpp : Defines the class behaviors for the application.//#include "stdafx.h"#include "Osmo4.h"#include <gpac/network.h>#include "MainFrm.h"#include "OpenUrl.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endif/////////////////////////////////////////////////////////////////////////////// WinGPACBEGIN_MESSAGE_MAP(WinGPAC, CWinApp)	//{{AFX_MSG_MAP(WinGPAC)	ON_COMMAND(ID_FILEOPEN, OnOpenFile)	ON_COMMAND(ID_FILE_STEP, OnFileStep)	ON_COMMAND(ID_OPEN_URL, OnOpenUrl)	ON_COMMAND(ID_FILE_RELOAD, OnFileReload)	ON_COMMAND(ID_FILE_PLAY, OnFilePlay)	ON_UPDATE_COMMAND_UI(ID_FILE_PLAY, OnUpdateFilePlay)	ON_UPDATE_COMMAND_UI(ID_FILE_STEP, OnUpdateFileStep)	ON_COMMAND(ID_FILE_STOP, OnFileStop)	ON_UPDATE_COMMAND_UI(ID_FILE_STOP, OnUpdateFileStop)	ON_COMMAND(ID_SWITCH_RENDER, OnSwitchRender)	ON_COMMAND(ID_RELOAD_TERMINAL, OnReloadTerminal)	ON_UPDATE_COMMAND_UI(ID_FILE_RELOAD, OnUpdateFileStop)	ON_COMMAND(ID_H_ABOUT, OnAbout)	//}}AFX_MSG_MAPEND_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////// WinGPAC constructionWinGPAC::WinGPAC(){}/////////////////////////////////////////////////////////////////////////////// The one and only WinGPAC objectWinGPAC theApp;class UserPassDialog : public CDialog{// Constructionpublic:	UserPassDialog(CWnd* pParent = NULL);   // standard constructor	Bool GetPassword(const char *site_url, char *user, char *password);// Dialog Data	//{{AFX_DATA(UserPassDialog)	enum { IDD = IDD_PASSWD };	CStatic	m_SiteURL;	CEdit m_User;	CEdit m_Pass;	//}}AFX_DATA	void SetSelection(u32 sel);	char cur_ext[200], cur_mime[200];// Overrides	// ClassWizard generated virtual function overrides	//{{AFX_VIRTUAL(UserPassDialog)	protected:	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support	//}}AFX_VIRTUAL// Implementationprotected:	const char *m_site_url;	char *m_user, *m_password;	// Generated message map functions	//{{AFX_MSG(UserPassDialog)	virtual BOOL OnInitDialog();	afx_msg void OnClose();	//}}AFX_MSG};UserPassDialog::UserPassDialog(CWnd* pParent /*=NULL*/)	: CDialog(UserPassDialog::IDD, pParent){	//{{AFX_DATA_INIT(COptStream)	//}}AFX_DATA_INIT}void UserPassDialog::DoDataExchange(CDataExchange* pDX){	CDialog::DoDataExchange(pDX);	//{{AFX_DATA_MAP(UserPassDialog)	DDX_Control(pDX, IDC_TXT_SITE, m_SiteURL);	DDX_Control(pDX, IDC_EDIT_USER, m_User);	DDX_Control(pDX, IDC_EDIT_PASSWORD, m_Pass);	//}}AFX_DATA_MAP}BOOL UserPassDialog::OnInitDialog() {	CDialog::OnInitDialog();	m_SiteURL.SetWindowText(m_site_url);	m_User.SetWindowText(m_user);	m_Pass.SetWindowText("");	return TRUE;}void UserPassDialog::OnClose(){	m_User.GetWindowText(m_user, 50);	m_Pass.GetWindowText(m_password, 50);}Bool UserPassDialog::GetPassword(const char *site_url, char *user, char *password){	m_site_url = site_url;	m_user = user;	if (DoModal() != IDOK) return 0;	return 1;}u32 get_sys_col(int idx){	u32 res;	DWORD val = GetSysColor(idx);	res = (val)&0xFF; res<<=8;	res |= (val>>8)&0xFF; res<<=8;	res |= (val>>16)&0xFF;	return res;}static void Osmo4_progress_cbk(void *usr, char *title, u32 done, u32 total){	if (!total) return;	CMainFrame *pFrame = (CMainFrame *) ((WinGPAC *) usr)->m_pMainWnd;	s32 prog = (s32) ( (100 * (u64)done) / total);	if (pFrame->m_last_prog < prog) {		pFrame->console_err = GF_OK;		pFrame->m_last_prog = prog;		pFrame->console_message.Format("%s %02d %%", title, prog);		pFrame->PostMessage(WM_CONSOLEMSG, 0, 0);		if (done==total) pFrame->m_last_prog = -1;	}}#define W32_MIN_WIDTH 120static log_msg(char *msg){	::MessageBox(NULL, msg, "GPAC", MB_OK);}Bool Osmo4_EventProc(void *priv, GF_Event *evt){	u32 dur;	WinGPAC *gpac = (WinGPAC *) priv;	CMainFrame *pFrame = (CMainFrame *) gpac->m_pMainWnd;	/*shutdown*/	if (!pFrame) return 0;	switch (evt->type) {	case GF_EVENT_DURATION:		dur = (u32) (1000 * evt->duration.duration);		//if (dur<1100) dur = 0;		pFrame->m_pPlayList->SetDuration((u32) evt->duration.duration );		gpac->max_duration = dur;		gpac->can_seek = evt->duration.can_seek;		if (!gpac->can_seek) {			pFrame->m_Sliders.m_PosSlider.EnableWindow(FALSE);		} else {			pFrame->m_Sliders.m_PosSlider.EnableWindow(TRUE);			pFrame->m_Sliders.m_PosSlider.SetRangeMin(0);			pFrame->m_Sliders.m_PosSlider.SetRangeMax(dur);		}		break;	case GF_EVENT_MESSAGE:		if (!evt->message.service || !strcmp(evt->message.service, (LPCSTR) pFrame->m_pPlayList->GetURL() )) {			pFrame->console_service = "main service";		} else {			pFrame->console_service = evt->message.service;		}		if (evt->message.error!=GF_OK) {			if (evt->message.error<GF_OK || !gpac->m_NoConsole) {				pFrame->console_err = evt->message.error;				pFrame->console_message = evt->message.message;				gpac->m_pMainWnd->PostMessage(WM_CONSOLEMSG, 0, 0);				/*any error before connection confirm is a service connection error*/				if (!gpac->m_isopen) pFrame->m_pPlayList->SetDead();			}			return 0;		}		if (gpac->m_NoConsole) return 0;		/*process user message*/		pFrame->console_err = GF_OK;		pFrame->console_message = evt->message.message;		gpac->m_pMainWnd->PostMessage(WM_CONSOLEMSG, 0, 0);		break;	case GF_EVENT_PROGRESS:		char *szType;		if (evt->progress.progress_type==0) szType = "Buffer ";		else if (evt->progress.progress_type==1) szType = "Download ";		else if (evt->progress.progress_type==2) szType = "Import ";		gf_set_progress(szType, evt->progress.done, evt->progress.total);		break;	case GF_EVENT_NAVIGATE_INFO:		pFrame->console_message = evt->navigate.to_url;		gpac->m_pMainWnd->PostMessage(WM_CONSOLEMSG, 1000, 0);		break;	case GF_EVENT_SCENE_SIZE:		if (evt->size.width && evt->size.height) {			gpac->orig_width = evt->size.width;			gpac->orig_height = evt->size.height;			if (gpac->m_term && !pFrame->m_bFullScreen) 				pFrame->PostMessage(WM_SETSIZE, evt->size.width, evt->size.height);		}		break;	/*don't resize on win32 msg notif*/	case GF_EVENT_SIZE:		if (gpac->m_term && !pFrame->m_bFullScreen && gpac->orig_width && (evt->size.width < W32_MIN_WIDTH) ) 			pFrame->PostMessage(WM_SETSIZE, W32_MIN_WIDTH, (W32_MIN_WIDTH*gpac->orig_height) / gpac->orig_width);		break;	case GF_EVENT_CONNECT:		if (pFrame->m_bStartupFile) return 0;		pFrame->BuildStreamList(1);		if (evt->connect.is_connected) {			pFrame->BuildChapterList(0);			gpac->m_isopen = 1;		} else {			gpac->max_duration = 0;			gpac->m_isopen = 0;			pFrame->BuildChapterList(1);		}		pFrame->m_wndToolBar.SetButtonInfo(5, ID_FILE_PLAY, TBBS_BUTTON, gpac->m_isopen ? 4 : 3);		pFrame->m_Sliders.m_PosSlider.SetPos(0);		pFrame->SetProgTimer(1);		if (!pFrame->m_bFullScreen) {			pFrame->SetFocus();			pFrame->SetForegroundWindow();		}		break;	case GF_EVENT_QUIT:		pFrame->PostMessage(WM_CLOSE, 0L, 0L);		break;	case GF_EVENT_KEYDOWN:		if (gpac->can_seek && evt->key.flags & GF_KEY_MOD_ALT) {			s32 res;			switch (evt->key.key_code) {			case GF_KEY_LEFT:				res = gf_term_get_time_in_ms(gpac->m_term) - 5*gpac->max_duration/100;				if (res<0) res=0;				gpac->PlayFromTime(res);				break;			case GF_KEY_RIGHT:				res = gf_term_get_time_in_ms(gpac->m_term) + 5*gpac->max_duration/100;				if ((u32) res>=gpac->max_duration) res = 0;				gpac->PlayFromTime(res);				break;			case GF_KEY_DOWN:				res = gf_term_get_time_in_ms(gpac->m_term) - 60000;				if (res<0) res=0;				gpac->PlayFromTime(res);				break;			case GF_KEY_UP:				res = gf_term_get_time_in_ms(gpac->m_term) + 60000;				if ((u32) res>=gpac->max_duration) res = 0;				gpac->PlayFromTime(res);				break;			}		} else if (evt->key.flags & GF_KEY_MOD_CTRL) {			switch (evt->key.key_code) {			case GF_KEY_LEFT:				pFrame->m_pPlayList->PlayPrev();				break;			case GF_KEY_RIGHT:				pFrame->m_pPlayList->PlayNext();				break;			}		} else {			switch (evt->key.key_code) {			case GF_KEY_HOME:				gf_term_set_option(gpac->m_term, GF_OPT_NAVIGATION_TYPE, 1);				break;			case GF_KEY_ESCAPE:				pFrame->PostMessage(WM_COMMAND, ID_VIEW_FULLSCREEN);				break;			}		}		break;	case GF_EVENT_NAVIGATE:		/*fixme - a proper browser would require checking mime type & co*/		/*store URL since it may be destroyed, and post message*/		gpac->m_navigate_url = evt->navigate.to_url;		pFrame->PostMessage(WM_NAVIGATE, NULL, NULL);		return 1;	case GF_EVENT_VIEWPOINTS:		pFrame->BuildViewList();		return 0;	case GF_EVENT_STREAMLIST:		pFrame->BuildStreamList(0);		return 0;	case GF_EVENT_MOUSEDOUBLECLICK:		pFrame->PostMessage(WM_COMMAND, ID_VIEW_FULLSCREEN);		return 0;	case GF_EVENT_AUTHORIZATION:	{		UserPassDialog passdlg;		return passdlg.GetPassword(evt->auth.site_url, evt->auth.user, evt->auth.password);	}	case GF_EVENT_SYS_COLORS:		evt->sys_cols.sys_colors[0] = get_sys_col(COLOR_ACTIVEBORDER);		evt->sys_cols.sys_colors[1] = get_sys_col(COLOR_ACTIVECAPTION);		evt->sys_cols.sys_colors[2] = get_sys_col(COLOR_APPWORKSPACE);		evt->sys_cols.sys_colors[3] = get_sys_col(COLOR_BACKGROUND);		evt->sys_cols.sys_colors[4] = get_sys_col(COLOR_BTNFACE);		evt->sys_cols.sys_colors[5] = get_sys_col(COLOR_BTNHIGHLIGHT);		evt->sys_cols.sys_colors[6] = get_sys_col(COLOR_BTNSHADOW);		evt->sys_cols.sys_colors[7] = get_sys_col(COLOR_BTNTEXT);		evt->sys_cols.sys_colors[8] = get_sys_col(COLOR_CAPTIONTEXT);		evt->sys_cols.sys_colors[9] = get_sys_col(COLOR_GRAYTEXT);		evt->sys_cols.sys_colors[10] = get_sys_col(COLOR_HIGHLIGHT);		evt->sys_cols.sys_colors[11] = get_sys_col(COLOR_HIGHLIGHTTEXT);		evt->sys_cols.sys_colors[12] = get_sys_col(COLOR_INACTIVEBORDER);		evt->sys_cols.sys_colors[13] = get_sys_col(COLOR_INACTIVECAPTION);		evt->sys_cols.sys_colors[14] = get_sys_col(COLOR_INACTIVECAPTIONTEXT);		evt->sys_cols.sys_colors[15] = get_sys_col(COLOR_INFOBK);		evt->sys_cols.sys_colors[16] = get_sys_col(COLOR_INFOTEXT);		evt->sys_cols.sys_colors[17] = get_sys_col(COLOR_MENU);		evt->sys_cols.sys_colors[18] = get_sys_col(COLOR_MENUTEXT);		evt->sys_cols.sys_colors[19] = get_sys_col(COLOR_SCROLLBAR);		evt->sys_cols.sys_colors[20] = get_sys_col(COLOR_3DDKSHADOW);		evt->sys_cols.sys_colors[21] = get_sys_col(COLOR_3DFACE);		evt->sys_cols.sys_colors[22] = get_sys_col(COLOR_3DHIGHLIGHT);		evt->sys_cols.sys_colors[23] = get_sys_col(COLOR_3DLIGHT);		evt->sys_cols.sys_colors[24] = get_sys_col(COLOR_3DSHADOW);		evt->sys_cols.sys_colors[25] = get_sys_col(COLOR_WINDOW);		evt->sys_cols.sys_colors[26] = get_sys_col(COLOR_WINDOWFRAME);		evt->sys_cols.sys_colors[27] = get_sys_col(COLOR_WINDOWTEXT);		return 1;	}	return 0;}

⌨️ 快捷键说明

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