计算机论文小型媒体播放器和运行程序.docx
《计算机论文小型媒体播放器和运行程序.docx》由会员分享,可在线阅读,更多相关《计算机论文小型媒体播放器和运行程序.docx(29页珍藏版)》请在冰豆网上搜索。
![计算机论文小型媒体播放器和运行程序.docx](https://file1.bdocx.com/fileroot1/2023-1/6/8cc1050e-29c3-4298-ada1-f743ed3c3e89/8cc1050e-29c3-4298-ada1-f743ed3c3e891.gif)
计算机论文小型媒体播放器和运行程序
小型媒体播放器
一、问题定义:
1、项目:
小型媒体播放器
2、背景:
目前多数计算机的媒体播放程序过于庞大,初学计算机的人员不易接受,尤其对于没有光盘支持的计算机无法安装。
该播放程序所占磁盘空间只有90K,不足一张软盘的16分之一,运行时所占系统资源极少,可以利用软盘存放和使用,可以在Windows95及以上所有操作系统中运行,不需其它程序支持,方便携带和使用。
3、项目目标:
建立一个界面直观,操作简单,携带方便的小型Windows媒体播放器。
4、项目要求:
硬件:
最低配置:
PentiumII266/VGA/32M内存。
软件:
Windows95//98/Me/Nt/2000。
5、可行性研究:
1天时间。
二:
可行性研究:
1、要求
⑴了解情况:
了解目前大多数计算机的操作系统和媒体播放程序的类型,同时了解仍在使用的老型号计算机中的媒体播放程序。
⑵使用范围:
该程序主要适用于初学计算机的用户,可用作培训用的低配置计算机,高档计算机同样可以使用此程序。
2、目标:
设计一个界面直观,操作方便,容易携带的小型Windows媒体播放器。
3、开发环境:
PIII计算机,Windows98操作系统,VisualC++5.0。
4、技术可行性分析:
利用VisualC++5.0开发环境完全可以实现上述要求。
三、项目开发计划:
1、工作内容:
本项目的工作主要分为三个阶段。
第一阶段:
可行性研究;需求分析;概要设计;开发计划;测试计划。
第二阶段:
编码。
第三阶段:
测试。
2、实施计划:
可行性研究、需求分析:
1天
概要设计:
1天
编码:
5天
测试修改:
3天
文档:
2天
四、需求规格说明:
1、对于程序的具体要求:
⑴能够运行在Windows95及以上任何操作系统中。
⑵界面直观,操作简便。
⑶可以播放wav、mid、mp3、avi、flc、dat、mpg等多种常见的媒体文件。
⑷可实现快进、后退等基本功能,可实现全屏播放、循环播放等辅助功能,可调节音量,可更改播放界面等。
⑸新增了系统信息项,可查看计算机系统及资源的简要信息。
⑹
⑺
2、数据描述及数据结构:
⑴注册Windows窗口类结构1,初始化程序主面板
wcl.hInstance=hThisInst;
wcl.lpszClassName=szClassName1;
wcl.lpfnWndProc=WindowFunc;
wcl.style=CS_DBLCLKS;
wcl.cbSize=sizeof(WNDCLASSEX);
wcl.hIconSm=LoadIcon(hThisInst,MAKEINTRESOURCE(PLAY));
wcl.hIcon=LoadIcon(hThisInst,MAKEINTRESOURCE(PLAY));
wcl.hCursor=LoadCursor(hThisInst,MAKEINTRESOURCE(MYTU));
wcl.lpszMenuName=(char*)MYMENU1;
wcl.cbClsExtra=0;
wcl.cbWndExtra=0;
wcl.hbrBackground=(HBRUSH)GetStockObject(LTGRAY_BRUSH);
⑵注册Windows窗口类结构2,初始化播放器窗口
wc2.hInstance=hThisInst;
wc2.lpszClassName=szClassName2;
wc2.lpfnWndProc=WindowFunc2;
wc2.style=CS_DBLCLKS|CS_HREDRAW|CS_VREDRAW;
wc2.cbSize=sizeof(WNDCLASSEX);
wc2.hIcon=LoadIcon(hThisInst,MAKEINTRESOURCE(PLAY));
wc2.hIconSm=NULL;//LoadIcon(hThisInst,MAKEINTRESOURCE(PLAY));
wc2.hCursor=LoadCursor(hThisInst,MAKEINTRESOURCE(MYTU));
wc2.lpszMenuName=NULL;
wc2.cbClsExtra=0;
wc2.cbWndExtra=0;
wc2.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH);
3、数据字典:
全局变量:
LONGlength,step=5,style;
BOOLplaying=FALSE,open=FALSE,circulate=FALSE,fullscreen=FALSE;
五、功能及划分:
1、功能划分:
⑴文件管理;⑵播放控制;⑶界面设置;⑷帮助功能。
2、功能描述
⑴文件管理:
此项功能包括文件的打开与关闭、弹出或关闭光盘驱动器及退出系统。
⑵播放控制:
此项功能包括文件的播放和暂停、快进和后退、跳到文件开头和结尾、全屏播放、循环播放和音量控制几项功能。
⑶界面设置:
可将播放界面在有无工具条和有无轨迹条间切换。
⑷帮助功能:
包含了该程序的来源、所能播放的媒体类型、制作时间及制作人的信息,以及计算机系统及资源的简要信息。
六、运行要求:
1、用户界面:
本程序界面直观(见上图),常用功能以工具按钮形式排列在主面板上,其它功能以菜单形式打开;为方便用户使用,为每项功能设置了快捷键,极大地方便了用户,并且用户可以更改界面设置。
2、运行设计:
程序运行后,用户所有的操作都可以利用鼠标实现。
七、总体设计
系统主要功能模块
文件管理播放控制界面设置帮助功能
打开一个媒体文件暂停隐藏工具条关于
关闭一个媒体文件快进显示工具条信息
弹出所有光驱后退隐藏轨迹条
关上所有光驱跳到文件头显示轨迹条
退出跳到文件尾
全屏/窗口
播放循环播放
音量控制
八、程序测试
测试主要是为了发现系统开发中出现的不完善或是错误之处,并加以改正。
采用自顶向下的方法进行测试。
在系统测试时采用人工测试法。
经测试、修改后的系统可以完成所需的功能,但由于测试数据不够全面,某些媒体有被忽略的可能。
九、使用说明
1、安装:
该程序编译后不依赖其它程序,无需安装,可直接在软盘或光盘中运行,也可以将MiniMediaPlayer.exe文件复制到其它计算机中运行。
2、运行:
启动Windows系统,执行MiniMediaPlayer.exe文件。
十、主要程序代码:
#include
#include
#include
#include"resource.h"
#include
#include
#include
#include
#defineUPDATEWM_USER+1
#defineNB11
TBBUTTONtbbutton[NB];
HWNDhwnd,hwndMovie,htrackwnd,htbwnd;
HMENUmainmenu,submenu,submenu2;
HICONhicon[4];
LRESULTCALLBACKWindowFunc(HWND,UINT,WPARAM,LPARAM);
LRESULTCALLBACKWindowFunc2(HWND,UINT,WPARAM,LPARAM);
charszClassName1[]="classname1";
charszClassName2[]="classname2";
charstr[500]="";
HINSTANCEhThisInstance;
MCI_DGV_OPEN_PARMSmciOpen;
MCI_DGV_RECT_PARMSmciRect;
MCI_DGV_WINDOW_PARMSmciWindow;
MCI_DGV_PUT_PARMSmci_Put;
MCI_STATUS_PARMSmciStatus;
MCI_SEEK_PARMSmciSeek;
MCI_DGV_UPDATE_PARMSmciUpdate;
LONGlength,step=5,style;
BOOLplaying=FALSE,open=FALSE,circulate=FALSE,fullscreen=FALSE;
intWindowWidth,WindowHeight,WindowTopX,WindowTopY;
charfn[256];
charfilename[256];
MEMORYSTATUSfreemem;
DWORDvolume=1000;
WORDwDeviceID;
voidGetAudioCDDevID();
voidCDEject();
BOOLCloseCDDevice();
voidCDBack();
voidInitToolBar(void);
DWORDPlayMovie(WORDwDevID,DWORDdwFrom,DWORDdwTo);
BOOLinitavi(DWORD);
voidSetFilename(char*);
BOOLSetStep(DWORD);
intWINAPIWinMain(HINSTANCEhThisInst,HINSTANCEhPrevInst,
LPSTRlpszArgs,intnWinMode)
{
MSGmsg;
WNDCLASSEXwcl,wc2;
HACCELhAccel;
hThisInstance=hThisInst;
//Defineawindowclass
wcl.hInstance=hThisInst;
wcl.lpszClassName=szClassName1;
wcl.lpfnWndProc=WindowFunc;
wcl.style=CS_DBLCLKS;
wcl.cbSize=sizeof(WNDCLASSEX);
wcl.hIconSm=LoadIcon(hThisInst,MAKEINTRESOURCE(PLAY));
wcl.hIcon=LoadIcon(hThisInst,MAKEINTRESOURCE(PLAY));
wcl.hCursor=LoadCursor(hThisInst,MAKEINTRESOURCE(MYTU));
wcl.lpszMenuName=(char*)MYMENU1;
wcl.cbClsExtra=0;
wcl.cbWndExtra=0;
wcl.hbrBackground=(HBRUSH)GetStockObject(LTGRAY_BRUSH);
if(!
RegisterClassEx(&wcl))
{
MessageBox(NULL,"NOREGISTERWC1!
","警告",MB_OK);
return0;
}
wc2.hInstance=hThisInst;
wc2.lpszClassName=szClassName2;
wc2.lpfnWndProc=WindowFunc2;
wc2.style=CS_DBLCLKS|CS_HREDRAW|CS_VREDRAW;
wc2.cbSize=sizeof(WNDCLASSEX);
wc2.hIcon=LoadIcon(hThisInst,MAKEINTRESOURCE(PLAY));
wc2.hIconSm=NULL;//LoadIcon(hThisInst,MAKEINTRESOURCE(PLAY));
wc2.hCursor=LoadCursor(hThisInst,MAKEINTRESOURCE(MYTU));
wc2.lpszMenuName=NULL;
wc2.cbClsExtra=0;
wc2.cbWndExtra=0;
wc2.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH);
if(!
RegisterClassEx(&wc2))
{
MessageBox(NULL,"NOREGISTERWC2!
","警告",MB_OK);
return0;
}
hwnd=CreateWindow(
szClassName1,
"MiniMediaPlayer",
WS_CAPTION|WS_MINIMIZEBOX|WS_SYSMENU,//WS_OVERLAPPEDWINDOW,
150,300,373,124,
NULL,
NULL,
hThisInst,
NULL
);
if(hwnd==NULL)
{
MessageBox(NULL,"窗口句柄为空!
(hwndisNull!
)","警告",MB_OK);
return0;
}
DragAcceptFiles(hwnd,1);
//MessageBox(NULL,"此程序仅用C语言和WindowsAPI编制而成。
","关于:
",MB_OK|MB_ICONINFORMATION);
hAccel=LoadAccelerators(hThisInst,(char*)ACCELERATOR1);
ShowWindow(hwnd,SW_SHOW);
UpdateWindow(hwnd);
mainmenu=GetMenu(hwnd);
submenu=GetSubMenu(mainmenu,0);
submenu2=GetSubMenu(mainmenu,1);
InitToolBar();
InitCommonControls();
htbwnd=CreateToolbarEx(
hwnd,
WS_VISIBLE|WS_CHILD|
TBSTYLE_TOOLTIPS|TBSTYLE_WRAPABLE,
MYTOOLBAR,
NB,
hThisInstance,
MYTOOLBAR,
tbbutton,
NB,
0,0,
32,32,
sizeof(TBBUTTON));
SendMessage(htbwnd,TB_ENABLEBUTTON,FILE_CLOSE,0);
SendMessage(htbwnd,TB_ENABLEBUTTON,CTRL_PLAY,0);
hicon[0]=LoadIcon(hThisInst,MAKEINTRESOURCE(IDI_ICON0));
hicon[1]=LoadIcon(hThisInst,MAKEINTRESOURCE(IDI_ICON1));
hicon[2]=LoadIcon(hThisInst,MAKEINTRESOURCE(IDI_ICON2));
hicon[3]=LoadIcon(hThisInst,MAKEINTRESOURCE(IDI_ICON3));
if(strlen(lpszArgs))
{
strcpy(filename,lpszArgs);
SetFilename(lpszArgs);
if(!
initavi(WS_OVERLAPPEDWINDOW))
{
SendMessage(hwnd,WM_COMMAND,FILE_CLOSE,0);
}
else
{
SendMessage(hwnd,WM_COMMAND,CTRL_PLAY,0);
EnableMenuItem(submenu,FILE_OPEN,MF_BYCOMMAND|MF_GRAYED);
EnableMenuItem(submenu,FILE_CLOSE,MF_BYCOMMAND|MF_ENABLED);
//EnableMenuItem(submenu2,CTRL_PLAY,MF_BYCOMMAND|MF_ENABLED);
SendMessage(htbwnd,TB_CHECKBUTTON,FILE_OPEN,1);
SendMessage(htbwnd,TB_ENABLEBUTTON,FILE_CLOSE,1);
SendMessage(htbwnd,TB_ENABLEBUTTON,CTRL_PLAY,1);
}
}
while(GetMessage(&msg,NULL,0,0))
{
if(!
TranslateAccelerator(hwnd,hAccel,&msg))
TranslateMessage(&msg);
DispatchMessage(&msg);
}
returnmsg.wParam;
}
LRESULTCALLBACKWindowFunc(HWNDhwndfunc,UINTmessage,
WPARAMwParam,LPARAMlParam)
{
HDChdc;
HANDLEhDrop;
PAINTSTRUCTpaintstruct;
OPENFILENAMEopenfile;
staticBOOLplaying=0;
charfilefiler[]={'*','.','w','a','v','\0','*','.','W','A','V','\0',
'*','.','m','i','d','\0','*','.','M','I','D','\0',
'*','.','r','m','i','\0','*','.','R','M','I','\0',
'*','.','a','v','i','\0','*','.','A','V','I','\0',
'*','.','d','a','t','\0','*','.','D','A','T','\0',
'*','.','*','\0','*','.','*','\0','\0'};
floathdj,vdj;
LONGposition;
LPTOOLTIPTEXTttext;
staticinti=0;
STARTUPINFOstartupinfo;
PROCESS_INFORMATIONprocessinfo;
charcomline[]="sndvol32.exe",dir[50];
switch(message)
{
caseWM_KEYDOWN:
SendMessage(hwndMovie,WM_KEYDOWN,wParam,lParam);
break;
caseWM_NOTIFY:
ttext=(LPTOOLTIPTEXT)lParam;
if(ttext->hdr.code==TTN_NEEDTEXT)
switch(ttext->hdr.idFrom)
{
caseFILE_OPEN:
ttext->lpszText="打开一个媒体文件";
break;
caseFILE_CLOSE:
ttext->lpszText="关闭一个媒体文件";
break;
caseCTRL_PLAY:
ttext->lpszText="播放";
break;
caseCTRL_PAUSE:
ttext->lpszText="暂停";
break;
caseCTRL_FORWARD:
ttext->lpszText="快进";
break;
caseCTRL_BACK:
ttext->lpszText="后退";
break;
caseCTRL_START:
ttext->lpszText="跳到文件开始";
break;
caseCTRL_END:
ttext->lpszText="跳到文件结尾";
break;
caseCTRL_VOLUME:
ttext->lpszText="音量控制";
break;
}
break;
caseWM_COMMAND:
switch(LOWORD(wParam))
{
caseSET_HIDE:
ShowWindow(htbwnd,SW_HIDE);
break;
caseSET_SHOW:
ShowWindow(htbwnd,SW_SHOW);
break;
caseSET_HIDETRACK:
ShowWindow(htrackwnd,SW_HIDE);
break;
caseSET_SHOWTRACK:
ShowWindow(htrackwnd,SW_SHOW);
break;
caseCTRL_FULLSCREEN:
SendMessage(hwndMovie,WM_KEYDOWN,13,0);
break;
caseCTRL_VOLUME:
memset(&startupinfo,0,sizeof(STARTUPINFO));
startupinfo.cb=sizeof(STARTUPINFO);
GetWindowsDirectory(dir,50);
if(CreateProcess(NULL,
comline,
NULL,
NULL,
0,
0,
NULL,
dir,
&startupinfo,
&processinfo
)==0)
MessageBox(N