




已阅读5页,还剩7页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
视频播放器一、 题目要求实现播放AVI格式视频的基本功能。二、 功能需求能够播放AVI格式的视频,实现打开、播放、暂停、停止、关闭视频的功能,播放视频过程中可以调节视频播放的音量和播放进度,可以设置全屏播放视频和重复播放。三、 总体设计1、 系统模块打开视频播放暂停停止重复全屏音量进度关闭视频2、 详细设计及功能实现代码(1) 首先设计视频播放器的总体框架(创建基本窗口和功能的要求WinMain.cpp)。LRESULT CALLBACK WndProc(HWND hWnd, UINT message,WPARAM wParam,LPARAM lParam)switch (message)case WM_CREATE:msgCreate( hWnd, message, wParam,lParam);break;case WM_PAINT:msgPaint(hWnd,message,wParam,lParam);break; case WM_DESTROY:msgDestroy(hWnd,message,wParam,lParam);break;case WM_SIZE:msgSize(hWnd,message,wParam,lParam);break;case WM_GETMINMAXINFO:msgGetMinMaxInfo(hWnd,message,wParam,lParam);break;case WM_SYSCOMMAND:msgSysCommand(hWnd,message,wParam,lParam);break;case WM_NOTIFY:msgNotify(hWnd,message,wParam,lParam);break;case WM_KEYDOWN:msgKeyDown(hWnd,message,wParam,lParam);break;case WM_TIMER:msgTimer(hWnd,message,wParam,lParam);break;case WM_CLOSE:SendMessage(hWnd,WM_DESTROY,wParam,lParam);break;case WM_COMMAND:switch (LOWORD(wParam)/opencase IDM_OPEN:cmdOpenFile(hWnd);break;case IDM_EXIT:cmdExit(hWnd);break;/viewcase IDM_TOOLBAR:cmdToolbar(hWnd);break;case IDM_TOP_MOST:cmdTopMost(hWnd);break;case IDM_FULL_SCREEN:cmdFullScreen(hWnd);break;/playcase IDM_PLAY:cmdPlay(hWnd);break;case IDM_PAUSE:cmdPause(hWnd);break;case IDM_STOP:cmdStop(hWnd);break;case IDM_REWIND:cmdRewind(hWnd);break;case IDM_FORWARD:cmdForward(hWnd);break;case IDM_REPEAT:cmdRepeat(hWnd);break;/voicecase IDM_VOICEDOWN:VoiceDown(hWnd,message,wParam,lParam);break;case IDM_VOICEUP:VoiceUp(hWnd,message,wParam,lParam);break;/aboutcase IDM_ABOUT:cmdAbout(hWnd);break;default:return (DefWindowProc(hWnd,message,wParam,lParam);break;default:return (DefWindowProc(hWnd,message,wParam,lParam);return 0;(2) 创建Global.h头文件,并声明所有的功能函数及定义全局变量。 #define IDM_TIMER30000/#define TIMER_TIMEOUT100/messageLRESULT msgCreate(HWND, UINT, WPARAM, LPARAM);/WM_CREATE:LRESULT msgDestroy(HWND, UINT, WPARAM, LPARAM);/WM_DESTROY:LRESULT msgSize(HWND, UINT, WPARAM, LPARAM);/WM_SIZE:LRESULT msgKeyDown(HWND, UINT, WPARAM, LPARAM);/WM_KEYDOWN:LRESULT msgTimer(HWND, UINT, WPARAM, LPARAM);/WM_TIMER:LRESULT msgPaint(HWND, UINT, WPARAM, LPARAM);/WM_PAINT:LRESULT msgGetMinMaxInfo(HWND, UINT, WPARAM, LPARAM);/WM_GETMINMAXINFO:LRESULT msgSysCommand(HWND, UINT, WPARAM, LPARAM);/WM_SYSCOMMAND:LRESULT msgNotify(HWND, UINT, WPARAM, LPARAM);/WM_NOTIFY:/commandLRESULT cmdExit(HWND);/IDM_EXIT:LRESULT cmdAbout(HWND);/IDM_ABOUT:LRESULT cmdOpenFile(HWND);/IDM_OPEN:LRESULT cmdPlay(HWND);/IDM_PLAY:LRESULT cmdPause(HWND);/IDM_PAUSE:LRESULT cmdStop(HWND);/IDM_STOP:LRESULT cmdRewind(HWND);/IDM_REWIND:LRESULT cmdForward(HWND);/IDM_FORWARD:LRESULT cmdRepeat(HWND);/IDM_REPEAT:LRESULT cmdToolbar(HWND);/IDM_TOOLBAR:LRESULT cmdTopMost(HWND);/IDM_TOPMOST:LRESULT cmdFullScreen(HWND);/IDM_FULLSCREEN:LRESULT VoiceUp(HWND hwnd, UINT uMessage, WPARAM wparam, LPARAM lparam);LRESULT VoiceDown(HWND hwnd, UINT uMessage, WPARAM wparam, LPARAM lparam);/* * Global function prototypes. * TO DO: Add global function prototypes here. */BOOL createToolbar(HWND);/void updateStatusBar(LPCTSTR, double);/void openVideoFile(HWND, LPSTR);/BOOL centerWindow(HWND, HWND);/BOOL initApplication(HINSTANCE, int);/LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);/UINT CALLBACK ofnHookProc(HWND, UINT, WPARAM, LPARAM);/ -/ Global Variable declarations/extern HINSTANCE g_hinstance;/ 实例句柄,当前句柄extern char szAppName;extern char szTitle;/文件名extern char szOpenPath;/打开文件路径extern HWNDhwndRebar;/进度条句柄extern HWND hwndToolbar;/工具栏句柄extern HWNDhwndTrack;/进度条的追踪句柄extern BOOL g_bFullScreen;/判断是否为全屏(3) 设计视频播放器的具体功能。首先是打开视频文件的功能,使其能正常打开AVI格式的视频文件。OPENFILENAME ofn;static TCHAR szFileListBuffer8192;/ String buffer especially for OFN_ALLOWMULTISELECTstrcpy(szFileListBuffer, szOpenPath);static char szFile256 = ;static char szFileTitle256;ZeroMemory(&ofn, sizeof(OPENFILENAME);ofn.lStructSize=sizeof(ofn);ofn.hwndOwner=hwnd;ofn.lpstrFilter=Media Files (All Supported Types)0*.avi;*.mpg;*.mpeg;*.asf;*.wmv;*.mp2;*.mp30 Movie File (*.avi;*.mpg;*.mpeg)0*.avi;*.mpg;*.mpeg0 Windows Media File (*.asf;*.wmv)0*.asf;*.wmv0 Audio File (*.mp2;*.mp3)0*.mp2;*.mp30 All Files(*.*)0*.*0;ofn.nFilterIndex=0;ofn.lpstrFile=szFileListBuffer;ofn.nMaxFile=sizeof(szFileListBuffer);ofn.lpstrFileTitle=szFileTitle;ofn.nMaxFileTitle=sizeof(szFileTitle);ofn.lpfnHook = ofnHookProc;ofn.Flags = OFN_FILEMUSTEXIST | OFN_ALLOWMULTISELECT |OFN_HIDEREADONLY | OFN_ENABLEHOOK |OFN_ENABLESIZING | OFN_EXPLORER;(4) 播放、暂停、停止功能的实现。此程序设计采用Mcisendstring()函数实现视频播放器的播放功能。LRESULT cmdPlay(HWND hwnd)if(g_bAVI) mciSendString(play thevideo window, 0, 0, 0);else mciSendString(play thevideo, 0, 0, 0);InvalidateRect(hwndTrack, NULL, false);g_bPaused=FALSE;return 0;LRESULT cmdPause(HWND hwnd)if(!g_bPaused) mciSendString(pause thevideo, 0, 0, 0);g_bPaused=TRUE;/else /mciSendString(resume thevideo, 0, 0, 0);/g_bPaused=FALSE;/return 0;LRESULT cmdStop(HWND hwnd)/, WORD wCommand, WORD wNotify, HWND hwndCtrl)mciSendString(stop thevideo, 0, 0, 0);mciSendString(seek thevideo to start, 0, 0, 0); return 0;(5) 设计视频播放器的全屏和重复播放功能。LRESULT cmdRepeat(HWND hwnd)if (g_bRepeat) g_bRepeat = false;CheckMenuItem(GetMenu(hwnd), IDM_REPEAT, MF_UNCHECKED);else g_bRepeat = true;CheckMenuItem(GetMenu(hwnd), IDM_REPEAT, MF_CHECKED);return 0;LRESULT cmdFullScreen(HWND hwnd)/ Screen width and screenx = GetSystemMetrics (SM_CXSCREEN);int screeny = GetSystemMetrics (SM_CYSCREEN);if (g_bFullScreen) g_bFullScreen = false;CheckMenuItem(GetMenu(hwnd), IDM_FULL_SCREEN, MF_UNCHECKED);SendMessage(hwndToolbar, TB_SETSTATE, IDM_FULL_SCREEN, MAKELONG(TBSTATE_ENABLED, 0);/ Restore the window.if (!g_bWindowMax)ShowWindow(hwnd, SW_RESTORE);else SetWindowPos(hwnd, NULL, -2, -2, screenx+4, screeny+4, SWP_NOZORDER | SWP_FRAMECHANGED);else g_bFullScreen = true;CheckMenuItem(GetMenu(hwnd), IDM_FULL_SCREEN, MF_CHECKED);SendMessage(hwndToolbar, TB_SETSTATE, IDM_FULL_SCREEN, MAKELONG(TBSTATE_CHECKED | TBSTATE_ENABLED, 0);/ Maximize?g_bWindowMax = GetWindowLong (hwnd, GWL_STYLE) & WS_MAXIMIZE ? true : false;/ Set the windows new position.if (!g_bWindowMax)GetWindowRect(hwnd, &g_rcWindow);ShowWindow (hwnd, SW_SHOWMAXIMIZED);SetWindowPos (hwnd, NULL, -4-1, -42-1, screenx+8+2, screeny+46+2, SWP_NOZORDER | SWP_FRAMECHANGED);/ Faint: bring databrowser to front.SetForegroundWindow(FindWindow(_T(Shell_TrayWnd),);SetForegroundWindow(hwnd);return 0;(6) 设计视频播放时的音量调节功能。用cmd命令获取当前音量,是字符串类型的,存放在volum中。mciSendString(cmd,volume, sizeof(volume), 0 )。得到当前音量后,把当前音量加一常数200实现加大音量,减一常数实现减小音量功能。wsprintf(cmd,setaudio %s volume to %i,thevideo,v0+200);/修改音量mciSendString(cmd,0,NULL);wsprintf(cmd,setaudio %s volume to %i,thevideo,v0-200);/修改音量mciSendString(cmd,0,NULL);(7) 设计视频播放器的进度调节功能。先用mcisendstring()得到视频的总长度length,再用mcisendstring(status thevideo position)得到当前播放的长度。设计每快进、快退一次视频进度加、减总播放长度的一定百分量。sprintf(buffer, seek thevideo to %d, position - step);/把格式化的数据写入某个字符串mciSendString(buffer, buffer, 19, hwnd);(8) 设计视频播放器的美化。通过在窗口下方创建一排按钮来作为播放、暂停、停止、打开文件、快进、快退、加大音量、减小音量、全屏的功能按钮。再创建一进度条来观察视频的播放进度。TBBUTTON tbButton =/定义工具栏的按钮,使得toolbar中的按钮与ID对应0,IDM_PLAY,TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0, 1,IDM_PAUSE,TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0, 2,IDM_STOP,TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0, 3,IDM_REWIND,TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0,4,IDM_FORWARD,TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0, 5,IDM_OPEN,TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0,6, IDM_VOICEDOWN,TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0,7, IDM_VOICEUP,TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0,8, IDM_FULL_SCREEN,TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0,;TBADDBITMAP tbBitamps;tbBitamps.hInst = g_hinstance; / current instancetbBitamps.nID = IDB_TOOLBAR;/添加图片到工具栏按钮上hwndToolbar=CreateWindowEx(0L, / no extended styles TOOLBARCLASSNAME, / status barNULL, / no text WS_VISIBLE| WS_CHILD | TBSTYLE_FLAT | TBSTYLE_TOOLTIPS | WS_CLIPCHILDREN | WS_CLIPSIBLINGS | CC
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025广东官洲街道环监所招聘模拟试卷及答案详解(网校专用)
- 2025黑龙江齐齐哈尔市红十字中心血站人员招聘1人模拟试卷及答案详解1套
- 2025安徽蚌埠市怀远县教育局所属事业单位紧缺专业人才引进(校园招聘)15人模拟试卷及答案详解(名师系列)
- 2025内蒙古呼和浩特市新城区中医蒙医医院(新城区保合少镇卫生院)招聘1人考前自测高频考点模拟试题完整答案详解
- 2025春季中国东航北京分公司校园招聘考前自测高频考点模拟试题含答案详解
- 2025年山东出版集团有限公司山东出版传媒股份有限公司招聘(192名)考前自测高频考点模拟试题及答案详解1套
- 2025年返聘人员重新签订的劳动合同
- 2025股权分配合同协议书范本
- 2025广东广州市中山大学孙逸仙纪念医院超声科医教研岗位招聘考前自测高频考点模拟试题及1套完整答案详解
- 2025江苏南京大学医院事业编制和校聘岗位招聘考前自测高频考点模拟试题及完整答案详解1套
- 2025影视演出经纪居间合同正规范本
- 对外投资管理知识培训
- 《早读是需要激情的!》主题班会课件
- 道闸操作安全培训课件
- 普惠金融赋能乡村振兴的实践探索和政策建议-福建省安溪县为例
- 2025年质量月知识竞赛题库(附答案)
- 酒店电气使用安全培训课件
- 生猪订购合同书范本3篇
- 耕地占用税培训课件
- 110kV变电站及110kV输电线路运维投标技术方案
- 防错验证报告
评论
0/150
提交评论