DVD仿真程序设计面向对象程序课程设计说明书_第1页
DVD仿真程序设计面向对象程序课程设计说明书_第2页
DVD仿真程序设计面向对象程序课程设计说明书_第3页
DVD仿真程序设计面向对象程序课程设计说明书_第4页
DVD仿真程序设计面向对象程序课程设计说明书_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、河南科技大学课 程 设 计 说 明 书课程名称 面向对象程序课程设计 题 目 dvd仿真程序设计 院 系 电子信息工程学院 课程设计任务书课程设计题目dvd仿真程序设计姓名学号专业班级计科101组别组长同组成员 指导教师课程设计目的通过本课程设计,使学生巩固面向对象程序设计的基本概念、原理和技术,学会使用c+语言进行简单程序的开发,将理论与实际相结合,完成一个小型程序的设计与实现,并在此基础上强化学生的实践意识,提高其实际动手能力和创新能力。课程设计环境硬件:装有windows操作系统的计算机软件:visual c+6.0课程设计任务和要求任务要求:1根据实际dvd的运行状况进行需求分析;2抽

2、象dvd运行算法;3设计dvd运行程序及人机交互界面;4模块功能满足要求、界面友好、具有一定的健壮性;5撰写出符合要求的课程设计报告。参考文献1郑秋生、吴庆涛,c/c+程序设计,北京:电子工业出版社2谭浩强c+程序设计,北京:清华大学出版社时 间 进 度 安 排序号起止日期工 作 内 容13.4-3.5学生熟悉题目背景,查阅资料23.6-3.13学生进行功能模块设计、编码、测试33.14-3.15程序验收43.16根据设计内容形成课程设计文档,撰写课程设计报告53.17上交课程设计报告任课教师:刘中华、张晓玲、李艳霞 时间:2013.3.3课程设计报告文档题目: dvd仿真程序设计 一引言1编

3、写目的:实现模拟dvd的功能 需要包含数据显示区域(相当于显示类的产品),dvd模拟区域,实现模拟dvd的快进,快退,播放,暂停,菜单,上一首,下一首,音量的加,音量减的功能。此外模拟了一个接口按钮,用于dvd向显示设备的数据输入。还模拟了一个dvd的电源开关。至此,实现此次dvd仿真模拟的设计目的。 2. 定义: mfc (microsoft foundation classes):是一个微软公司提供的类库(class libraries),以c+类的形式封装了windows的api,并且包含一个应用程序框架,以减少应用程序开 发人员的工作量。其中包含的类包含大量windows句柄封装类和很

4、多windows的内建控件和组件的封装类3参考资料:1 郑秋生. c/c+程序设计教程面向对象分册. 北京:电子工业出版社,2012 2 邱勇、肖春宝、白秀玲. 可视化程序设计. 北京:清华大学出版社3 黄维通. visual c+面向对象与可视化程序设计. 北京:清华大学出版社 二任务的描述1目标: 通过本课程设计,使学生巩固面向对象程序设计的基本概念、原理和技术,学会使用c+语言进行简单程序的开发,将理论与实际相结合,完成一个小型程序的设计与实现,并在此基础上强化学生的实践意识,提高其实际动手能力和创新能力。2. 功能描述: dvd的仿真模拟分为数据显示区域(相当于显示类的产品),dvd模

5、拟区域,模拟dvd的快进,快退,播放,暂停,菜单,上一首,下一首,音量的加,音量减的功能。此外模拟了一个接口按钮,用于dvd向显示设备的数据输入。模拟了一个dvd的电源开关。光碟数据的存储区域模拟。点击按钮可以打开数据中心仓库,区域1:可以点击此按钮打开光碟数据存储仓库,打开后的界面如下图所示。区域2:点击鼠标的右键可以打开右键菜单:1.添加文件到列表 2.删除列表中文件区域3:实现dvd的模拟功能:点击快进按钮实现快进功能;点击快退按钮实现快退功能;点击播放按钮实现播放功能;点击暂停按钮实现暂停功能;点击+按钮实现音量的加功能;点击-按钮实现音量减的功能;点击菜单按钮可以实现dvd光碟返回到

6、菜单的功能;模拟了一个接口按钮,相当于dvd像显示接口插入的一条数据线,用于dvd向显示设备的数据输入;电源开关实现dvd机关闭的功能。区域1:可以点击此按钮打开光碟数据然后直接打开播放器小窗口播放,播放器的小窗口如下图。鼠标右键点击此按钮的可以弹出右键菜单,右键菜单响应的事件功能有,播放和查看文件的大小属性。区域2:点击鼠标的右键可以打开右键菜单:1.添加文件到列表 2.删除列表中文件区域3:显示当前播放文件的路径区域4:点击可以打开文件选择对话框,实现让用户选择非dvd格式的文件。这是在dvd基础上对于播放的扩展。功能的增强。区域5:点击此按钮可以查看播放器支持的文件格式。区域1:可以点击

7、对应的菜单实现对应的音影的播放功能。区域2:点击全屏按钮实现全屏播放上图播放dvd时候的小窗口播放界面。上面为dvd文件的播放菜单,dvd文件是用转换工具转换的dvd整个光碟,由于转换的速度较慢,且转换后文件较大,一个大约6g,一个大约2g,转换时间周期较长,用晚上转换的。转换后的dvd文件没法加入电子档。总计8g。在此说明一下。3性能描述 (1)数据精确度:播放的时间在毫秒级(2)时间特性:响应时间,更新处理时间,运行时间等都较短。4 运行环境:硬件:windows7操作系统平台 软件:visual c+6.05条件与限制:条件是由于播放dvd的文件解码较苛刻,系统必须安装有dvd格式的解码

8、器。三任务设计1类的划分: (1)类1:class caadlg : public cdialogpublic:caadlg(cwnd* pparent = null);/ standard constructorenum idd = idd_aa_dialog ;clistboxm_list;cbuttonm_open;cbuttonm_play;cbuttonm_up;cbuttonm_stop;cbuttonm_down1;int t;bool t1;cbuttonm_slow;cbuttonm_volsmall;cbuttonm_volbig;cbuttonm_menu;cbutton

9、m_jiekou;cbuttonm_forhead;cbuttonm_close;cwmpplayer4m_wmplayer;cwmpcontrols m_control;cwmpdvd m_wmpdvd;cwmpsettings m_set;cwmpplaylist m_playlist; cwmpmedia m_media;cwmpplayer4m_wmp;cstring str1;dlg1 dlg1;int k;public:virtual bool pretranslatemessage(msg* pmsg);protected:virtual void dodataexchange(

10、cdataexchange* pdx);/ ddx/ddv supportvirtual bool oncommand(wparam wparam, lparam lparam);protected:hicon m_hicon;virtual bool oninitdialog();afx_msg void onsyscommand(uint nid, lparam lparam);afx_msg void onpaint();afx_msg hcursor onquerydragicon();afx_msg void onbuttoclose();afx_msg void onbuttonf

11、orhead();afx_msg void onbuttoslow();afx_msg void onbuttonvolbig();afx_msg void onbuttonvolsmall();afx_msg void onbuttonjiekou();afx_msg void onbuttondown();afx_msg void onbuttoplay();afx_msg void onbuttonstop();afx_msg void onbuttonup();afx_msg void onbuttonmenu();afx_msg void onopen();afx_msg void

12、ondblclklist1();declare_message_map();caadlg 类实现了模拟dvd的主界面的功能实现。成员函数onbuttoclose()实现dvd电源的关闭功能,成员函数onbuttoplay()实现播放功能;成员函数onbuttonstop()实现音视频的暂停功能;成员函数onbuttonforhead()实现快进功能;成员函数onbuttoslow()实现快退功能;成员函数onbuttonvolbig()实现音量增加功能;成员函数onbuttonvolsmall()实现音量减小功能等;(2)类2:class dlg1 : public cdialogpublic

13、:dlg1(cwnd* pparent = null); enum idd = idd_dialog1 ;clistboxm_list;cbuttonm_btn5;cbuttonm_btn4;cbuttonm_btn3;cbuttonm_btn2;cbuttonm_btn1;smallplayer smallplayer;int p;cstringm_edit;public:virtual bool pretranslatemessage(msg* pmsg);protected:virtual void dodataexchange(cdataexchange* pdx); / ddx/dd

14、v supportvirtual bool oncommand(wparam wparam, lparam lparam);protected:afx_msg void onbutton1();virtual bool oninitdialog();afx_msg void onbutton3();afx_msg void onbutton2();afx_msg void onbutton5();afx_msg void onbutton4();afx_msg void onselchangelist1();afx_msg void ondblclklist1();declare_messag

15、e_map();类dlg1实现把dvd光碟存放区域的显示,光碟在此区域存放。(3) 类3:class smallplayer : public cdialogpublic:smallplayer(cwnd* pparent = null); / standard constructorenum idd = idd_dialog2 ;cbuttonm_btn1;cbuttonm_btn2;cwmpplayer4m_ocx1;cwmpcontrols m_control;cwmpdvd m_dvd;cwmpplaylist m_playlist;cwmpsettings m_set;protect

16、ed:virtual void dodataexchange(cdataexchange* pdx); / ddx/ddv supportprotected:afx_msg void onbutton1();afx_msg void onbutton2();virtual bool oninitdialog();declare_message_map();类smallplayer 实现把dvd光碟的小窗口播放。2类的接口设计:(1)类1:public:virtual bool pretranslatemessage(msg* pmsg);protected:virtual void dodat

17、aexchange(cdataexchange* pdx);/ ddx/ddv supportvirtual bool oncommand(wparam wparam, lparam lparam);(2) 类2:public:virtual bool pretranslatemessage(msg* pmsg);protected:virtual void dodataexchange(cdataexchange* pdx); / ddx/ddv supportvirtual bool oncommand(wparam wparam, lparam lparam);protected:afx

18、_msg void onbutton1();virtual bool oninitdialog();afx_msg void onbutton3();afx_msg void onbutton2();afx_msg void onbutton5();afx_msg void onbutton4();afx_msg void onselchangelist1();afx_msg void ondblclklist1();declare_message_map()(3)类3:protected:afx_msg void onbutton1();afx_msg void onbutton2();vi

19、rtual bool oninitdialog();declare_message_map()说明 protected是windows机制的消息函数。windows消息机制windows系统是一个消息驱动的os,一个消息由一个消息名称(uint),和两个参数(wparam,lparam)。当用户进行了输入或是窗口的状态发生改变时系统都会发送消息到某一个窗口。例如当菜单转中之后会有wm_command消息发送,wparam的高字中(hiword(wparam))是命令的id号,对菜单来讲就是菜单id。当然用户也可以定义自己的消息名称,也可以利用自定义消息来发送通知和传送数据。一个消息必须由一个窗

20、口接收。在窗口的过程(wndproc)中可以对消息进行分析,对自己感兴趣的消息进行处理。例如你希望对菜单选择进行处理那么你可以定义对wm_command进行处理的代码,如果希望在窗口中进行图形输出就必须对wm_paint进行处理。也相当于与用户交互的接口。3. 类之间的关系:类caboutdlg、类smallplayer 、类dlg1、类caadlg ,都是继承自cdialog类。类caadlg 和类dlg1是包含关系,类dlg1和类smallplayer 也是包含关系cdialog类smallplayer 类caadlg 类dlg1类四编写代码1问题1 (1)问题描述:点击按钮新的窗体无法弹

21、出。 (2)解决办法:新的窗体类没有加到父窗体的头文件中。且关于模态对话框与非模态对话框的显示机制不同。模态可以使用domal()函数实现。非模态对话框的建立需要dlg1.create(idd_dialog1,this);即类创建显示的窗体ui;dlg1.showwindow(sw_show);然后显示窗体。这样才完成一个非模态对话框的建立。问题得以解决。2问题2 (1)问题描述:播放文件时,列表中选中的文件播放的是列表中其他的文件 (2)解决办法:使用m_list.setcursel()设置列表索引号,这样索引顺序正确,问题得到解决。 五运行结果与分析 1程序运行的过程:程序先执行主对话框,

22、当用户点击代开dvd数据按钮程序响应windows消息映射,通过windows机制在内存中建立新的类dlg1,此类是主窗体中包含的成员函数。2 类的构造顺序:先构造类caadlg ,然后构造类dlg13 错误描述及其解决办法(1)问题1:问题描述:点击音量增加按钮音量无法增加,代码已经添加。 解决办法:没有把wmpcontrol类的头文件包含,加入头文件即可。(2)问题2 问题描述:点击list区域鼠标点击的位置和右键菜单出现的位置有距离差;解决办法:在clienttoscreen(&pt)这一句不需要把坐标转换成客户区域坐标。 6、 感想认识 这次课程设计对于面向对象的思想有深刻的体会。这次

23、课程设计无论是我需找dvd格式文件的创建刻录,等等功能,自己没有接触过刚开始一头雾水自己的想法不好实现。通过网络的搜索需找,得到解决的途径。,这样不仅培养了遇到问题的思考方法,而且更培养了我编程中分析问题,解决问题的方法途径等等。更使得我对于对面向对象的封装,继承以及多态性等特点以及优点理解,也让自己对微软mfc编程有了一定的认识,通过封装类我们把想要现的功能封装起来,通过继承我们可以对已有类进行扩充,通过多态性我可以让不同对象面对同一消息有各自的响应。这次设计使我进步很大,收获颇丰。七程序代码文件aadlg.h#include wmpplayer4.h#include wmpcontrols

24、.h#include wmpdvd.h#include wmpplayer4.h#include wmpmedia.h#include wmpplaylist.h#include wmpsettings.h#include dlg1.h/afx_includes#if !defined(afx_aadlg_h_c8019617_e9eb_4714_b667_009bb531de6e_included_)#define afx_aadlg_h_c8019617_e9eb_4714_b667_009bb531de6e_included_#if _msc_ver 1000#pragma once#e

25、ndif / _msc_ver 1000/ caadlg dialogclass caadlg : public cdialog/ constructionpublic:caadlg(cwnd* pparent = null);/ standard constructor/ dialog data/afx_data(caadlg)enum idd = idd_aa_dialog ;clistboxm_list;cbuttonm_open;cbuttonm_play;cbuttonm_up;cbuttonm_stop;cbuttonm_down1;int t;bool t1;cbuttonm_s

26、low;cbuttonm_volsmall;cbuttonm_volbig;cbuttonm_menu;cbuttonm_jiekou;cbuttonm_forhead;cbuttonm_close;cwmpplayer4m_wmplayer;cwmpcontrols m_control;cwmpdvd m_wmpdvd;cwmpsettings m_set;cwmpplaylist m_playlist; cwmpmedia m_media;cwmpplayer4m_wmp;cstring str1;dlg1 dlg1;int k;/afx_data/ classwizard generat

27、ed virtual function overrides/afx_virtual(caadlg)public:virtual bool pretranslatemessage(msg* pmsg);protected:virtual void dodataexchange(cdataexchange* pdx);/ ddx/ddv supportvirtual bool oncommand(wparam wparam, lparam lparam);/afx_virtual/ implementationprotected:hicon m_hicon;/ generated message

28、map functions/afx_msg(caadlg)virtual bool oninitdialog();afx_msg void onsyscommand(uint nid, lparam lparam);afx_msg void onpaint();afx_msg hcursor onquerydragicon();afx_msg void onbuttoclose();afx_msg void onbuttonforhead();afx_msg void onbuttoslow();afx_msg void onbuttonvolbig();afx_msg void onbutt

29、onvolsmall();afx_msg void onbuttonjiekou();afx_msg void onbuttondown();afx_msg void onbuttoplay();afx_msg void onbuttonstop();afx_msg void onbuttonup();afx_msg void onbuttonmenu();afx_msg void onopen();afx_msg void ondblclklist1();/afx_msgdeclare_message_map();文件aadlg.cpp#include stdafx.h#include aa

30、.h#include aadlg.h#ifdef _debug#define new debug_new#undef this_filestatic char this_file = _file_;#endif/ caboutdlg dialog used for app aboutclass caboutdlg : public cdialogpublic:caboutdlg();/ dialog data/afx_data(caboutdlg)enum idd = idd_aboutbox ;/afx_data/ classwizard generated virtual function

31、 overrides/afx_virtual(caboutdlg)protected:virtual void dodataexchange(cdataexchange* pdx); / ddx/ddv support/afx_virtual/ implementationprotected:/afx_msg(caboutdlg)/afx_msgdeclare_message_map();caboutdlg:caboutdlg() : cdialog(caboutdlg:idd)/afx_data_init(caboutdlg)/afx_data_initvoid caboutdlg:doda

32、taexchange(cdataexchange* pdx)cdialog:dodataexchange(pdx);/afx_data_map(caboutdlg)/afx_data_mapbegin_message_map(caboutdlg, cdialog)/afx_msg_map(caboutdlg)/ no message handlers/afx_msg_mapend_message_map()/ caadlg dialogcaadlg:caadlg(cwnd* pparent /*=null*/): cdialog(caadlg:idd, pparent)/afx_data_in

33、it(caadlg)/afx_data_init/ note that loadicon does not require a subsequent destroyicon in win32t=1;t1=true;m_hicon = afxgetapp()-loadicon(idr_mainframe); void caadlg:dodataexchange(cdataexchange* pdx)cdialog:dodataexchange(pdx);/afx_data_map(caadlg)ddx_control(pdx, idc_list1, m_list);ddx_control(pdx

34、, idc_button2, m_open);ddx_control(pdx, idc_buttoplay, m_play);ddx_control(pdx, idc_buttonup, m_up);ddx_control(pdx, idc_buttonstop, m_stop);ddx_control(pdx, idc_buttondown, m_down1);ddx_control(pdx, idc_buttoslow, m_slow);ddx_control(pdx, idc_buttonvolsmall, m_volsmall);ddx_control(pdx, idc_buttonv

35、olbig, m_volbig);ddx_control(pdx, idc_buttonmenu, m_menu);ddx_control(pdx, idc_buttonjiekou, m_jiekou);ddx_control(pdx, idc_buttonforhead, m_forhead);ddx_control(pdx, idc_buttoclose, m_close);ddx_control(pdx, idc_ocx1, m_wmp);/afx_data_mapbegin_message_map(caadlg, cdialog)/afx_msg_map(caadlg)on_wm_s

36、yscommand()on_wm_paint()on_wm_querydragicon()on_bn_clicked(idc_buttoclose, onbuttoclose)on_bn_clicked(idc_buttonforhead, onbuttonforhead)on_bn_clicked(idc_buttoslow, onbuttoslow)on_bn_clicked(idc_buttonvolbig, onbuttonvolbig)on_bn_clicked(idc_buttonvolsmall, onbuttonvolsmall)on_bn_clicked(idc_button

37、jiekou, onbuttonjiekou)on_bn_clicked(idc_buttondown, onbuttondown)on_bn_clicked(idc_buttoplay, onbuttoplay)on_bn_clicked(idc_buttonstop, onbuttonstop)on_bn_clicked(idc_buttonup, onbuttonup)on_bn_clicked(idc_buttonmenu, onbuttonmenu)on_bn_clicked(idc_button2, onopen)on_lbn_dblclk(idc_list1, ondblclkl

38、ist1)/afx_msg_mapend_message_map()/ caadlg message handlersbool caadlg:oninitdialog()hicon dvdicon,boxicon;cdialog:oninitdialog();k=0;dvdicon=afxgetapp()-loadicon(idi_icon1);boxicon=afxgetapp()-loadicon(idi_icon2);seticon(dvdicon,true);m_open.seticon(boxicon);dlg1.create(idd_dialog1,this);/ add abou

39、t. menu item to system menu./ idm_aboutbox must be in the system command range.assert(idm_aboutbox & 0xfff0) = idm_aboutbox);assert(idm_aboutbox appendmenu(mf_separator);psysmenu-appendmenu(mf_string, idm_aboutbox, straboutmenu);/ set the icon for this dialog. the framework does this automatically/

40、when the applications main window is not a dialogseticon(m_hicon, true);/ set big iconseticon(m_hicon, false);/ set small icon/ todo: add extra initialization herereturn true; / return true unless you set the focus to a controlvoid caadlg:onsyscommand(uint nid, lparam lparam)if (nid & 0xfff0) = idm_

41、aboutbox)caboutdlg dlgabout;dlgabout.domodal();elsecdialog:onsyscommand(nid, lparam);/ if you add a minimize button to your dialog, you will need the code below/ to draw the icon. for mfc applications using the document/view model,/ this is automatically done for you by the framework.void caadlg:onp

42、aint() if (isiconic()cpaintdc dc(this); / device context for paintingsendmessage(wm_iconerasebkgnd, (wparam) dc.getsafehdc(), 0);/ center icon in client rectangleint cxicon = getsystemmetrics(sm_cxicon);int cyicon = getsystemmetrics(sm_cyicon);crect rect;getclientrect(&rect);int x = (rect.width() -

43、cxicon + 1) / 2;int y = (rect.height() - cyicon + 1) / 2;/ draw the icondc.drawicon(x, y, m_hicon);elsecdialog:onpaint();/ the system calls this to obtain the cursor to display while the user drags/ the minimized window.hcursor caadlg:onquerydragicon()return (hcursor) m_hicon;void caadlg:onbuttoclos

44、e() / todo: add your control notification handler code here/m_wmp.if(t1)t1=false;getdlgitem(idc_buttoclose)-setwindowtext(电源开);m_control.stop();m_wmp.seturl(null);elset1=true;getdlgitem(idc_buttoclose)-setwindowtext(电源关);m_control.play();/ char szfilefilter=/vob file(*.vob)|*.vob|/ mp3 file(*.mp3)|*

45、.mp3|/ mpeg file(*.mpeg)|*.mpeg|/ media file(*.asf)|*.asf|/ video file(*.dat)|*.dat|/ mpga file(*.mpga)|*.mpga|/ wave file(*.wav)|*.wav|/ avi file(*.avi)|*.avi|/ movie file(*.mov)|*.mov|/ mid file(*.mid;*,rmi)|*.mid;*.rmi|/ wma file(*.wma)|*.wma|/ all file(*.*)|*.*|;/ cfiledialog filedialog( true,nu

46、ll,null,null,szfilefilter,this);/ if (filedialog.domodal() = idok)/ / cstring filename=filedialog.getpathname();/ m_avplayer.put_url(filename);/ void caadlg:onbuttonforhead() / todo: add your control notification handler code here/ if (a1)/ m_control.fastforward();/ a1=false;/ / elsevoid caadlg:onbu

47、ttoslow() / todo: add your control notification handler code herem_control.fastreverse();/*m_control.*/void caadlg:onbuttonvolbig() / todo: add your control notification handler code hereint i=m_set.getvolume();i+;m_set.setvolume(i);void caadlg:onbuttonvolsmall() / todo: add your control notificatio

48、n handler code hereint i=m_set.getvolume();i-;m_set.setvolume(i);void caadlg:onbuttonjiekou() / todo: add your control notification handler code hereif(t)t=0;getdlgitem(idc_buttonjiekou)-setwindowtext(接口开);m_control.stop();elset=1;getdlgitem(idc_buttonjiekou)-setwindowtext(接口关);m_control.play();bool

49、 caadlg:pretranslatemessage(msg* pmsg) / todo: add your specialized code here and/or call the base classcrect rt1;point pt;cmenu cmenu;if (pmsg-message=wm_rbuttondown):getwindowrect(getdlgitem(idc_list1)-getsafehwnd(),&rt1);:getcursorpos(&pt);if (ptinrect(&rt1,pt)cmenu.loadmenu(idr_menu1);cmenu *ppopup=cmenu.getsubmenu(0);ppopup-trackpo

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论