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

📄 main.cpp

📁 一个用于智能手机的多媒体库适合S60 WinCE的跨平台开发库
💻 CPP
📖 第 1 页 / 共 2 页
字号:
		use_3D_renderer = (str && strstr(str, "3D")) ? 1 : 0;	}	SetCursor(hcur);}void pause_file(){	if (!is_connected) return;	TBBUTTONINFO tbbi; 	tbbi.cbSize = sizeof(tbbi); 	tbbi.dwMask = TBIF_TEXT; 	if (gf_term_get_option(term, GF_OPT_PLAY_STATE)==GF_STATE_PLAYING) {		gf_term_set_option(term, GF_OPT_PLAY_STATE, GF_STATE_PAUSED);		tbbi.pszText = _T("Resume"); 	} else {		gf_term_set_option(term, GF_OPT_PLAY_STATE, GF_STATE_PLAYING);		tbbi.pszText = _T("Pause"); 	}	SendMessage(g_hwnd_menu1, TB_SETBUTTONINFO, IDM_FILE_PAUSE, (LPARAM)&tbbi); }void set_svg_progressive(){	use_svg_prog = !use_svg_prog;	if (use_svg_prog) {		gf_cfg_set_key(user.config, "SAXLoader", "Progressive", "yes");		gf_cfg_set_key(user.config, "SAXLoader", "MaxDuration", "30");	} else {		gf_cfg_set_key(user.config, "SAXLoader", "MaxDuration", "0");		gf_cfg_set_key(user.config, "SAXLoader", "Progressive", "no");	}}BOOL HandleCommand(HWND hwnd, WPARAM wParam, LPARAM lParam){	switch (LOWORD(wParam)) {	case IDM_FILE_OPEN:		open_file(hwnd);		break;	case IDM_FILE_RELOAD:		/*doesn't work with SVG files yet...*/		//gf_term_play_from_time(term, 0);		gf_term_disconnect(term);		gf_term_connect(term, the_url);		break;	case IDM_FILE_PAUSE:		pause_file();		break;	case IDM_VIEW_ABOUT:		view_about(hwnd);		break;	case IDM_VIEW_FS:		set_full_screen();		break;	case IDM_VIEW_STATUS:		show_status = !show_status;		do_layout(1);		break;	case IDM_VIEW_CPU:		view_cpu = !view_cpu;		break;	case IDM_VIEW_3DREND:		use_3D_renderer = !use_3D_renderer;		gf_cfg_set_key(user.config, "Rendering", "RendererName", use_3D_renderer ? "GPAC 3D Renderer" : "GPAC 2D Renderer");		reload_terminal();		break;	case IDM_NAV_RESET:		gf_term_set_option(term, GF_OPT_NAVIGATION_TYPE, 0);		break;	case IDM_NAV_NONE:		gf_term_set_option(term, GF_OPT_NAVIGATION, GF_NAVIGATE_NONE);		break;	case IDM_NAV_SLIDE:		gf_term_set_option(term, GF_OPT_NAVIGATION, GF_NAVIGATE_SLIDE);		break;	case IDM_NAV_WALK:		gf_term_set_option(term, GF_OPT_NAVIGATION, GF_NAVIGATE_WALK);		break;	case IDM_NAV_FLY:		gf_term_set_option(term, GF_OPT_NAVIGATION, GF_NAVIGATE_FLY);		break;	case IDM_NAV_EXAMINE:		gf_term_set_option(term, GF_OPT_NAVIGATION, GF_NAVIGATE_EXAMINE);		break;	case IDM_NAV_HEADLIGHT:		gf_term_set_option(term, GF_OPT_HEADLIGHT, !gf_term_get_option(term, GF_OPT_HEADLIGHT) );		break;	case IDM_NAV_COL_NONE:		gf_term_set_option(term, GF_OPT_COLLISION, GF_COLLISION_NONE);		break;	case IDM_NAV_COL_REG:		gf_term_set_option(term, GF_OPT_COLLISION, GF_COLLISION_NORMAL);		break;	case IDM_NAV_COL_DISP:		gf_term_set_option(term, GF_OPT_COLLISION, GF_COLLISION_DISPLACEMENT);		break;	case IDM_NAV_GRAVITY:		gf_term_set_option(term, GF_OPT_GRAVITY, !gf_term_get_option(term, GF_OPT_GRAVITY));		break;	case IDM_VIEW_AR_NONE:		gf_term_set_option(term, GF_OPT_ASPECT_RATIO, GF_ASPECT_RATIO_KEEP);		break;	case IDM_VIEW_AR_FILL:		gf_term_set_option(term, GF_OPT_ASPECT_RATIO, GF_ASPECT_RATIO_FILL_SCREEN);		break;	case IDM_VIEW_AR_4_3:		gf_term_set_option(term, GF_OPT_ASPECT_RATIO, GF_ASPECT_RATIO_4_3);		break;	case IDM_VIEW_AR_16_9:		gf_term_set_option(term, GF_OPT_ASPECT_RATIO, GF_ASPECT_RATIO_16_9);		break;	case IDM_VIEW_LOW_RATE:		use_low_fps = !use_low_fps;		gf_term_set_simulation_frame_rate(term, use_low_fps ? 15.0 : 30.0);		break;	case IDM_VIEW_DIRECT:	{		Bool drend = gf_term_get_option(term, GF_OPT_DIRECT_RENDER) ? 0 : 1;		gf_term_set_option(term, GF_OPT_DIRECT_RENDER, drend);		gf_cfg_set_key(user.config, "Render2D", "DirectRender", drend ? "yes" : "no");	}		break;	case IDM_MENU_SWITCH:		menu_switched = !menu_switched;		do_layout(0);		break;	case IDM_OPEN_FILE1: 	case IDM_OPEN_FILE2: 	case IDM_OPEN_FILE3: 	case IDM_OPEN_FILE4: 	case IDM_OPEN_FILE5: 	case IDM_OPEN_FILE6: 	case IDM_OPEN_FILE7: 	case IDM_OPEN_FILE8: 	case IDM_OPEN_FILE9: 	case IDM_OPEN_FILE10: 		load_recent_file(LOWORD(wParam) - IDM_OPEN_FILE1); 		break;	case IDS_CAP_DISABLE_PLAYLIST:		playlist_navigation_on = !playlist_navigation_on;		break;	case IDM_VIEW_SVG_LOAD:		set_svg_progressive();		break;	case IDM_ITEM_QUIT:		DestroyWindow(hwnd);		return FALSE;	}	return TRUE;}static BOOL OnMenuPopup(const HWND hWnd, const WPARAM wParam){	if (menu_switched) {		CheckMenuItem((HMENU)wParam, IDM_VIEW_STATUS, MF_BYCOMMAND| (show_status ? MF_CHECKED : MF_UNCHECKED) );		CheckMenuItem((HMENU)wParam, IDM_VIEW_3DREND, MF_BYCOMMAND| (use_3D_renderer ? MF_CHECKED : MF_UNCHECKED) );		EnableMenuItem((HMENU)wParam, IDM_VIEW_CPU, MF_BYCOMMAND| (show_status ? MF_ENABLED : MF_GRAYED) );		if (show_status) CheckMenuItem((HMENU)wParam, IDM_VIEW_CPU, MF_BYCOMMAND| (view_cpu ? MF_CHECKED : MF_UNCHECKED) );		CheckMenuItem((HMENU)wParam, IDM_VIEW_LOW_RATE, MF_BYCOMMAND| (use_low_fps ? MF_CHECKED : MF_UNCHECKED) );		EnableMenuItem((HMENU)wParam, IDM_VIEW_DIRECT, MF_BYCOMMAND| (!use_3D_renderer ? MF_ENABLED : MF_GRAYED) );		CheckMenuItem((HMENU)wParam, IDM_VIEW_DIRECT, MF_BYCOMMAND| (!use_3D_renderer && gf_term_get_option(term, GF_OPT_DIRECT_RENDER) ? MF_CHECKED : MF_UNCHECKED) );		CheckMenuItem((HMENU)wParam, IDM_VIEW_SVG_LOAD, MF_BYCOMMAND| (use_svg_prog ? MF_CHECKED : MF_UNCHECKED) );		return TRUE;	}	u32 opt = gf_term_get_option(term, GF_OPT_ASPECT_RATIO);		CheckMenuItem((HMENU)wParam, IDS_CAP_DISABLE_PLAYLIST, MF_BYCOMMAND| (!playlist_navigation_on ? MF_CHECKED : MF_UNCHECKED) );	CheckMenuItem((HMENU)wParam, IDM_VIEW_AR_NONE, MF_BYCOMMAND| (opt==GF_ASPECT_RATIO_KEEP) ? MF_CHECKED : MF_UNCHECKED);	CheckMenuItem((HMENU)wParam, IDM_VIEW_AR_FILL, MF_BYCOMMAND| (opt==GF_ASPECT_RATIO_FILL_SCREEN) ? MF_CHECKED : MF_UNCHECKED);	CheckMenuItem((HMENU)wParam, IDM_VIEW_AR_4_3, MF_BYCOMMAND| (opt==GF_ASPECT_RATIO_4_3) ? MF_CHECKED : MF_UNCHECKED);	CheckMenuItem((HMENU)wParam, IDM_VIEW_AR_16_9, MF_BYCOMMAND| (opt==GF_ASPECT_RATIO_16_9) ? MF_CHECKED : MF_UNCHECKED);	EnableMenuItem((HMENU)wParam, IDM_FILE_RELOAD, MF_BYCOMMAND| (is_connected ? MF_ENABLED : MF_GRAYED) );	EnableMenuItem((HMENU)wParam, IDM_FILE_PAUSE, MF_BYCOMMAND| (is_connected ? MF_ENABLED : MF_GRAYED) );	u32 type;	if (!is_connected) type = 0;	else type = gf_term_get_option(term, GF_OPT_NAVIGATION_TYPE);	navigation_on = type ? 1 : 0;	EnableMenuItem((HMENU)wParam, IDM_NAV_NONE, MF_BYCOMMAND | (!type ? MF_GRAYED : MF_ENABLED) );	EnableMenuItem((HMENU)wParam, IDM_NAV_SLIDE, MF_BYCOMMAND | (!type ? MF_GRAYED : MF_ENABLED) );	EnableMenuItem((HMENU)wParam, IDM_NAV_RESET, MF_BYCOMMAND | (!type ? MF_GRAYED : MF_ENABLED) );	EnableMenuItem((HMENU)wParam, IDM_NAV_WALK, MF_BYCOMMAND | ( (type!=GF_NAVIGATE_TYPE_3D) ? MF_GRAYED : MF_ENABLED) );	EnableMenuItem((HMENU)wParam, IDM_NAV_FLY, MF_BYCOMMAND | ((type!=GF_NAVIGATE_TYPE_3D) ? MF_GRAYED : MF_ENABLED) );	EnableMenuItem((HMENU)wParam, IDM_NAV_EXAMINE, MF_BYCOMMAND | ((type!=GF_NAVIGATE_TYPE_3D) ? MF_GRAYED : MF_ENABLED) );	EnableMenuItem((HMENU)wParam, IDM_NAV_COL_NONE, MF_BYCOMMAND | ((type!=GF_NAVIGATE_TYPE_3D) ? MF_GRAYED : MF_ENABLED) );	EnableMenuItem((HMENU)wParam, IDM_NAV_COL_REG, MF_BYCOMMAND | ((type!=GF_NAVIGATE_TYPE_3D) ? MF_GRAYED : MF_ENABLED) );	EnableMenuItem((HMENU)wParam, IDM_NAV_COL_DISP, MF_BYCOMMAND | ((type!=GF_NAVIGATE_TYPE_3D) ? MF_GRAYED : MF_ENABLED) );	EnableMenuItem((HMENU)wParam, IDM_NAV_GRAVITY, MF_BYCOMMAND | ((type!=GF_NAVIGATE_TYPE_3D) ? MF_GRAYED : MF_ENABLED) );	EnableMenuItem((HMENU)wParam, IDM_NAV_HEADLIGHT, MF_BYCOMMAND | ( (type!=GF_NAVIGATE_TYPE_3D) ? MF_GRAYED : MF_ENABLED) );	if (type) {		u32 mode = gf_term_get_option(term, GF_OPT_NAVIGATION);		navigation_on = (mode==GF_NAVIGATE_NONE) ? 0 : 1;		CheckMenuItem((HMENU)wParam, IDM_NAV_NONE, MF_BYCOMMAND | ( (mode==GF_NAVIGATE_NONE) ? MF_CHECKED : MF_UNCHECKED) );		CheckMenuItem((HMENU)wParam, IDM_NAV_SLIDE, MF_BYCOMMAND | ( (mode==GF_NAVIGATE_SLIDE) ? MF_CHECKED : MF_UNCHECKED) );		CheckMenuItem((HMENU)wParam, IDM_NAV_WALK, MF_BYCOMMAND | ( (mode==GF_NAVIGATE_WALK) ? MF_CHECKED : MF_UNCHECKED) );		CheckMenuItem((HMENU)wParam, IDM_NAV_FLY, MF_BYCOMMAND | ((mode==GF_NAVIGATE_FLY) ? MF_CHECKED : MF_UNCHECKED) );		CheckMenuItem((HMENU)wParam, IDM_NAV_EXAMINE, MF_BYCOMMAND | ((mode==GF_NAVIGATE_EXAMINE) ? MF_CHECKED : MF_UNCHECKED) );		if (type==GF_NAVIGATE_TYPE_3D) {			CheckMenuItem((HMENU)wParam, IDM_NAV_HEADLIGHT, MF_BYCOMMAND | ( gf_term_get_option(term, GF_OPT_HEADLIGHT) ? MF_CHECKED : MF_UNCHECKED) );			CheckMenuItem((HMENU)wParam, IDM_NAV_GRAVITY, MF_BYCOMMAND | ( gf_term_get_option(term, GF_OPT_GRAVITY) ? MF_CHECKED : MF_UNCHECKED) );			type = gf_term_get_option(term, GF_OPT_COLLISION);			CheckMenuItem((HMENU)wParam, IDM_NAV_COL_NONE, MF_BYCOMMAND | ( (type==GF_COLLISION_NONE) ? MF_CHECKED : MF_UNCHECKED) );			CheckMenuItem((HMENU)wParam, IDM_NAV_COL_REG, MF_BYCOMMAND | ( (type==GF_COLLISION_NORMAL) ? MF_CHECKED : MF_UNCHECKED) );			CheckMenuItem((HMENU)wParam, IDM_NAV_COL_DISP, MF_BYCOMMAND | ( (type==GF_COLLISION_DISPLACEMENT) ? MF_CHECKED : MF_UNCHECKED) );		}	}    return TRUE;}BOOL CALLBACK MainWndProc (HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam){	switch (msg) {	case WM_CREATE:	{		SHMENUBARINFO mbi;		memset(&mbi, 0, sizeof(SHMENUBARINFO));		mbi.cbSize = sizeof(SHMENUBARINFO);		mbi.hwndParent = hwnd;		mbi.hInstRes = g_hinst;		mbi.nBmpId = 0;		mbi.cBmpImages = 0;					mbi.nToolBarId = IDM_MAIN_MENU1;		SHCreateMenuBar(&mbi);		g_hwnd_menu1 = mbi.hwndMB;		mbi.nToolBarId = IDM_MAIN_MENU2;		SHCreateMenuBar(&mbi);		g_hwnd_menu2 = mbi.hwndMB;		g_hwnd_status = CreateWindow(TEXT("STATIC"), TEXT("Status"), WS_CHILD|WS_VISIBLE|SS_LEFT, 0, 0, disp_w, caption_h-1, hwnd, NULL, g_hinst, NULL);		do_layout(1);	}		break;			case WM_COMMAND:		if (HandleCommand(hwnd, wParam, lParam))			return DefWindowProc(hwnd, msg, wParam, lParam);		break;	case WM_TIMER:		update_state_info();		break;	case WM_HOTKEY:		break;	case WM_KEYDOWN:		if (playlist_navigation_on && !navigation_on) {			if (wParam==VK_LEFT) { switch_playlist(1); break; }			else if (wParam==VK_RIGHT) { switch_playlist(0); break; }		}		/*fall through*/	case WM_SYSKEYDOWN:	case WM_SYSKEYUP:	case WM_KEYUP:	case WM_CHAR:	case WM_MOUSEMOVE:	case WM_LBUTTONDOWN:	case WM_LBUTTONDBLCLK:	case WM_LBUTTONUP:		::SendMessage(g_hwnd_disp, msg, wParam, lParam);		return 0;    case WM_INITMENUPOPUP:        OnMenuPopup(hwnd, wParam);        break;	case WM_CLOSE:		DestroyWindow(hwnd);		break;    case WM_SETFOCUS:		freeze_display(0);		break;    case WM_KILLFOCUS:		freeze_display(1);		break;    case WM_ACTIVATE:        if (WA_INACTIVE != LOWORD(wParam)) {			freeze_display(0);			SetFocus(hwnd);		} else {			freeze_display(1);		}        break;	case WM_LOADTERM:		if (!LoadTerminal()) {			MessageBox(hwnd, L"Cannot load GPAC", L"Error", MB_OK);			PostQuitMessage(0);		}		break;	case WM_DESTROY:		PostQuitMessage(0);		break;	default:		return DefWindowProc(hwnd, msg, wParam, lParam);	}		return 0;}BOOL InitInstance (int CmdShow){	WNDCLASS wc;    wc.style			= 0;    wc.lpfnWndProc		= (WNDPROC) MainWndProc;    wc.cbClsExtra		= 0;    wc.cbWndExtra		= 0;    wc.hInstance		= g_hinst;    wc.hIcon			= LoadIcon(g_hinst, MAKEINTRESOURCE(IDI_ICON));    wc.hCursor			= 0;    wc.hbrBackground	= (HBRUSH) GetStockObject(WHITE_BRUSH);    wc.lpszMenuName		= 0;    wc.lpszClassName	= _T("Osmophone");	RegisterClass(&wc);	g_hwnd = CreateWindow(_T("Osmophone"), _T("Osmophone"), 						  WS_VISIBLE,						  0, caption_h, disp_w, disp_h, 						  NULL, NULL, g_hinst, NULL);		if (!g_hwnd) return FALSE;	ShowWindow(g_hwnd, CmdShow);	::SetTimer(g_hwnd, STATE_TIMER_ID, STATE_TIMER_DUR, NULL);	refresh_recent_files();	set_status("Loading Terminal");	do_layout(1);	PostMessage(g_hwnd, WM_LOADTERM, 0, 0);	set_status("Ready");	return TRUE;}Bool initial_setup(const char *szExePath){	char szPath[GF_MAX_PATH];	TCHAR wzPath[GF_MAX_PATH];	strcpy(szPath, szExePath);	strcat(szPath, "GPAC.cfg");	FILE *f = fopen(szPath, "wt");	if (!f) return 0;	fclose(f);	user.config = gf_cfg_new(szExePath, "GPAC.cfg");		gf_cfg_set_key(user.config, "General", "ModulesDirectory", szExePath);	strcpy(szPath, szExePath);	strcat(szPath, "cache");	CE_CharToWide(szPath, wzPath);	CreateDirectory(wzPath, NULL);	gf_cfg_set_key(user.config, "General", "CacheDirectory", szPath);	/*base rendering options*/	gf_cfg_set_key(user.config, "Rendering", "RendererName", "GPAC 2D Renderer");	gf_cfg_set_key(user.config, "Rendering", "Raster2D", "GPAC 2D Raster");	/*enable UDP traffic autodetect*/	gf_cfg_set_key(user.config, "Network", "AutoReconfigUDP", "yes");	gf_cfg_set_key(user.config, "Network", "UDPTimeout", "10000");	gf_cfg_set_key(user.config, "Network", "BufferLength", "3000");	gf_cfg_set_key(user.config, "Audio", "ForceConfig", "yes");	gf_cfg_set_key(user.config, "Audio", "NumBuffers", "2");	gf_cfg_set_key(user.config, "Audio", "TotalDuration", "200");	gf_cfg_set_key(user.config, "Video", "DriverName", "GAPI Video Output");	/*FIXME - is this true on all WinCE systems??*/	gf_cfg_set_key(user.config, "FontEngine", "FontDirectory", "\\Windows");	sprintf((char *) szPath, "%sgpac.mp4", szExePath);	gf_cfg_set_key(user.config, "General", "StartupFile", (const char *) szPath);	/*save*/	gf_cfg_del(user.config);	user.config = gf_cfg_new(szExePath, "GPAC.cfg");	if (!user.config) return 0;	MessageBox(NULL, _T("Thank you for installing GPAC"), _T("Initial setup done"), MB_OK);	return 1;}int WINAPI WinMain(HINSTANCE hInstance, 				   HINSTANCE hPrevInstance, 				   LPWSTR lpCmdLine, 				   int nShowCmd ) {	MSG 	msg;	TCHAR wzExePath[GF_MAX_PATH];	char szExePath[GF_MAX_PATH];	HWND 	hwndOld = NULL;		const char *str;	Bool initial_launch = 0;		memset(&user, 0, sizeof(GF_User));	term = NULL;	GetModuleFileName(NULL, wzExePath, GF_MAX_PATH);	CE_WideToChar(wzExePath, szExePath);	char *sep = strrchr(szExePath, '\\');	sep[1] = 0;	g_hinst = hInstance;		menu_h = GetSystemMetrics(SM_CYMENU) - 6;	caption_h = GetSystemMetrics(SM_CYCAPTION) - 3;	screen_w = GetSystemMetrics(SM_CXSCREEN);	screen_h = GetSystemMetrics(SM_CYSCREEN);	disp_w = screen_w;	disp_h = screen_h - menu_h - caption_h;		if (hwndOld = FindWindow(_T("Osmophone"), NULL))	{		SetForegroundWindow(hwndOld);    		return 0;	}	user.config = gf_cfg_new(szExePath, "GPAC.cfg");	if (!user.config) {		initial_setup(szExePath);		initial_launch = 1;	}	if (!user.config) {		MessageBox(NULL, _T("Couldn't locate GPAC config file"), _T("Fatal Error"), MB_OK);		return 0;	}	str = gf_cfg_get_key(user.config, "General", "ModulesDirectory");	if (!str) {		gf_cfg_del(user.config);		MessageBox(NULL, _T("Couldn't locate GPAC plugins"), _T("Fatal Error"), MB_OK);		return 0;	}	gf_sys_init();	user.modules = gf_modules_new(str, user.config);	if (!gf_modules_get_count(user.modules)) {		MessageBox(GetForegroundWindow(), _T("No modules found"), _T("GPAC Init Error"), MB_OK);		gf_modules_del(user.modules);		gf_cfg_del(user.config);		memset(&user, 0, sizeof(GF_User));		gf_sys_close();		return 0;	}	/*first launch, register all files ext*/	if (initial_launch) {		u32 i;		for (i=0; i<gf_modules_get_count(user.modules); i++) {			GF_InputService *ifce = (GF_InputService *) gf_modules_load_interface(user.modules, i, GF_NET_CLIENT_INTERFACE);			if (!ifce) continue;			if (ifce) {				ifce->CanHandleURL(ifce, "test.test");				gf_modules_close_interface((GF_BaseInterface *)ifce);			}		}	}	str = gf_cfg_get_key(user.config, "General", "Loop");	loop = (str && !stricmp(str, "yes")) ? 1 : 0;	str = gf_cfg_get_key(user.config, "Rendering", "RendererName");	use_3D_renderer = (str && strstr(str, "3D")) ? 1 : 0;	str = gf_cfg_get_key(user.config, "SAXLoader", "Progressive");	use_svg_prog = (str && !strcmp(str, "yes")) ? 1 : 0;	if (InitInstance(nShowCmd)) {		SetForegroundWindow(g_hwnd);		while (GetMessage(&msg, NULL, 0,0) == TRUE) {			TranslateMessage (&msg);			DispatchMessage (&msg);		}	}	/*and destroy*/	if (term) gf_term_del(term);	if (user.modules) gf_modules_del(user.modules);	if (user.config) gf_cfg_del(user.config);	if (backlight_off) set_backlight_state(0);	gf_sys_close();	return 0;}

⌨️ 快捷键说明

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