win32视频播放器报告.doc_第1页
win32视频播放器报告.doc_第2页
win32视频播放器报告.doc_第3页
win32视频播放器报告.doc_第4页
win32视频播放器报告.doc_第5页
已阅读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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论