实验六 媒体播放器实现
- 格式:doc
- 大小:451.50 KB
- 文档页数:10
多媒体应用实验实验目的:通过设计和开发一个多媒体应用程序,学习多媒体技术的应用和实现,提升对多媒体编程的理解和掌握程度。
实验内容:设计和开发一个音乐播放器应用程序,该应用程序能够实现音乐的播放、暂停、停止等基本功能,并具备简单的用户界面。
实验步骤:1. 确定开发平台和语言:根据实验要求和个人喜好,选择适合的开发平台和编程语言,如Android平台与Java语言。
2. 音乐文件准备:准备多个音乐文件,用于测试音乐播放器的功能。
可以选择mp3或者其他常见的音频格式。
3. 创建项目:在开发平台中创建一个新的项目,命名为"MusicPlayer"。
4. 设计用户界面:根据个人喜好和实验要求,设计一个简单的用户界面,包括播放、暂停、停止按钮等。
可以使用开发平台提供的图形界面设计工具来快速搭建界面。
5. 实现音乐播放器功能:根据实验目标,编写程序代码,实现音乐的播放、暂停、停止等基本功能。
可以使用平台提供的音乐播放器相关的API或者库来简化开发过程。
6. 测试并改进:在开发过程中,及时进行测试和调试,确保功能的正确实现。
根据测试结果和使用体验,进行必要的改进和优化。
7. 完善用户界面:根据实验要求和个人喜好,对用户界面进行美化和改进,提升用户体验。
8. 文档撰写:完成实验后,撰写实验报告,详细描述实验过程、实现功能、遇到的问题、解决方案以及实验结果等,展示完成的多媒体应用程序。
实验要点:1. 了解多媒体技术的基本原理和应用。
2. 熟悉开发平台的使用和开发环境的设置。
3. 学会使用开发平台提供的API或库,实现音乐播放等功能。
4. 注意代码的规范性和可读性,使用恰当的命名、注释等编写清晰易懂的代码。
5. 创新设计用户界面,提供友好的操作和良好的用户体验。
6. 注重测试和调试,保证应用程序的功能和性能。
7. 充分记录实验过程,思考和总结实验中所遇到的问题和解决方案,形成完整的实验报告。
实验总结:通过本次实验,我成功设计和开发了一个多媒体应用程序,实现了音乐的播放、暂停和停止等基本功能,并对多媒体技术的应用和实现有了更深入的理解。
实验课题:简易乐曲播放器学院:班级:姓名:学号:班内序号:一、设计课题要求 (2)二、设计思路和总体框图 (2)三、分块电路设计 (4)四、仿真波形 (6)五、源程序 (7)六、功能说明 (20)七、所用元器件情况 (20)八、故障及问题分析 (21)九、总结和结论 (22)十、参考文献 (22)一设计课题的任务要求设计制作一个简易乐曲播放器:1. 播放器内预存3 首乐曲;2. 播放模式:顺序播放、随机播放,并用数码管或LED 显示当前播放模式;顺序播放:按内部给定的顺序依次播放3 首乐曲;随机播放:随机产生一个顺序播放3 首乐曲;3. 用数码管显示当前播放乐曲的顺序号;4. 设置开始/暂停键,乐曲播放过程中按该键则暂停播放,再按则继续播放;5. 设置Next 和Previous 键,按Next 键可以听下一首,按Previous 键回到本首开始;6. 选做:用户可以自行设定播放顺序,设置完成后,播放器按该顺序依次播放乐曲;7. 选做:自拟其它功能。
二设计思路和总体框图设计思路:组成乐曲的每个音符的发音频率值及其持续的时间是乐曲能连续演奏所需的2个基本要素。
乐曲的12平均律规定:每2个八度音之间的频率相差1倍。
在2个八度音之间,又可分为12个半音,每两个半音的频率比为2开12次方。
另外,音符A (简谱中的低音6)的频率为440Hz,音符B到C之间、E到F之间为半音,其余为全音。
由此可以计算出简谱中从低音1至高音1之间每个音符的频率,如下表所示。
产生各音符所需的频率可用分频器实现。
本次实验使用的是MAXⅡ实验板,时钟频率为50MHz,计算出各个音符对应的分频系数,进行50%占空比的分频,即可得到各音符对应的频率。
对于节拍,如果将一拍的长度定为1秒,则1/4拍的时间为1/4秒,为其提供一个4Hz的时钟频率即可产生出1/4拍的效果了。
若需要半拍,只需将该音符记录两次就可以了。
产生节拍时钟也用分频器实现,本次实验中时钟频率为5Hz。
计算机科学系实验报告
实验六:流媒体组建与管理
一、实验目的
1 了解Helix Server的工作原理
2 掌握流媒体的管理
二、实验仪器设备与实验环境条件
1 windows xp
2 Helix Server
三、实验内容
1 安装Helix Server并启动Helix Server服务
2 设置连接控制
3 配置加载点
4 对访问设置进行安全设置
5 设置完后要测试
四、实验结果
1、设置IP
2、IP绑定
3、配置加载点
4、访问控制
5、加载播放视频
6、加载播放MP3
五、实验心得
本实验比较简单,就是会有时加载不到视频,后来发现是视频的格式不对。
不过,这个
实验很重要的一点就是要细心,因为有些设置一定要立即重启服务器才生效。
Java程序设计题目:媒体播放器姓名:学号:2014年5月10日目录实验报告一、实验目的二、实验原理三、实验环境四、功能需求五、实验总结系统方案书一、引言1、编写目的2、参考资料二、系统的结构(程序流程图)三、模块设计说明1、模块描述2、总体功能3、关于帮助媒体播放器使用说明书一、使用方法:1、打开媒体播放器2、打开文件3、播放,暂停,停止,快进,快退4、退出程序5、帮助(关于)二、分析摘要1、能力2、缺陷和限制技术报告一、实现的类二、部分功能的实现三、具体代码实验报告一、实验目的通过了解和运用Java编程工具编写制作视频媒体播放器,提高Swing和jmf技术结合的综合运用能力。
二、实验原理本实验要求在理解Java文件操作原理基础和GUI编写的基础上,实现视频文件的打开、播放、暂停、后退和前进等功能,实现媒体播放器基本功能。
三、实验环境软件环境Windows操作系统J2SDK1.6Eclipse等硬件环境计算机四、功能需求实现媒体播放器的功能如下:(1)可以打开视频文件夹;(2)双击文件或者选中后打开可播放该视频。
(3)播放时可以开始、暂停、停止、快进、快退进行控制;(4)可以退出和关闭播放器。
五、实验总结通过这次自主实验,让我了解到了编写一个Java应用程序的过程:一开始我先分析这个“媒体播放器”要实现的功能,并归纳出来,然后我开始确定相关的Java和JMF 的知识点,寻找相关的参考书和上网搜索知识点。
我分析出的知识包括:swing和JMF 及相关组件的使用,根据这些做出程序的界面、播放器组件的设置和使用文件的处理。
几个星期的学习使我们提高自己的编程能力。
系统方案书一、引言1、编写目的为了能够使在编写媒体播放器的过程能够高效的进行,少走弯路。
2、参考资料《Java程序设计教程》机械工业出版社《Java多媒体技术》清华大学出版社二、系统的结构(程序流程图)三、模块设计说明随着社会文明的发展,人们不再仅仅满足于物质享受,更加追求精神上的享受。
多媒体播放器的设计与实现设计和实现一个多媒体播放器涉及到以下几个方面的内容:1. 用户界面设计:包括主界面、播放界面、设置界面等。
主界面应包含歌曲列表、专辑封面等基本信息,并提供搜索、排序、添加歌曲等功能。
播放界面应提供播放、暂停、快进、快退、进度条等基本操作按钮。
设置界面应包含音效、循环模式、背景主题等设置选项。
2. 数据库设计:存储歌曲信息、播放列表等数据信息。
数据库应包括歌曲的标题、歌手、专辑、时长、路径等字段。
可以使用关系型数据库或者本地文件形式存储。
3. 音频解码与播放:支持常见音频格式(如mp3、wav等)的解码和播放。
可以使用开源的音频解码库(如FFmpeg)进行解码,并使用音频播放器(如OpenAL、SDL等)进行播放。
需要实现基本的音频控制功能,如播放、暂停、快进、快退等。
4. 集成音效和均衡器:可以加入均衡器、音效调整等功能,提升音频质量和用户体验。
可以使用开源的均衡器库(如EqualizerAPO)进行实现。
5. 添加播放列表功能:用户可以创建多个播放列表,并将歌曲添加到不同的播放列表中。
可以实现添加、删除、重命名播放列表等功能。
6. 实现歌曲搜索和排序功能:用户可以通过关键词搜索歌曲,也可以根据歌曲的标题、歌手、专辑等属性进行排序。
7. 支持在线音乐播放:可以通过集成第三方音乐API(如网易云音乐API)来实现在线音乐搜索和播放功能。
,设计与实现一个多媒体播放器需要综合考虑用户界面设计、数据库设计、音频解码与播放、音效与均衡器、播放列表管理、歌曲搜索与排序、在线音乐播放等多个方面的内容。
可以根据具体需求和技术背景选择相应的技术和开发工具进行实现。
第1篇一、实验目的1. 熟悉播放器的基本原理和功能模块。
2. 掌握音频、视频文件的解码与播放技术。
3. 提高编程能力和项目实践能力。
二、实验环境1. 操作系统:Windows 102. 开发工具:Visual Studio 20193. 编程语言:C++4. 常用库:FFmpeg三、实验内容1. 播放器界面设计2. 音频、视频文件解码3. 音频、视频同步播放4. 控制功能实现四、实验步骤1. 播放器界面设计(1)创建项目,添加所需控件(2)设置控件属性,包括大小、位置、颜色等(3)添加播放按钮、暂停按钮、停止按钮等控制按钮2. 音频、视频文件解码(1)引入FFmpeg库(2)加载音频、视频文件(3)解码音频、视频数据3. 音频、视频同步播放(1)创建音频、视频播放线程(2)实现音频、视频数据同步(3)调整播放进度4. 控制功能实现(1)添加播放按钮、暂停按钮、停止按钮等事件处理函数(2)实现播放、暂停、停止等功能五、实验结果与分析1. 播放器界面设计本实验成功实现了播放器界面设计,包括播放区域、控制按钮、进度条等。
界面简洁美观,用户操作方便。
2. 音频、视频文件解码通过引入FFmpeg库,成功实现了音频、视频文件的解码。
在解码过程中,我们提取了音频、视频的采样率、码率、帧率等关键信息,为后续同步播放提供了依据。
3. 音频、视频同步播放在实现音频、视频同步播放时,我们采用了线程同步技术。
通过创建音频、视频播放线程,分别处理音频、视频数据的播放,确保了音频、视频播放的同步性。
同时,我们还实现了播放进度调整功能,方便用户实时查看和调整播放进度。
4. 控制功能实现本实验成功实现了播放、暂停、停止等功能。
用户可以通过控制按钮,轻松实现播放器的控制操作。
六、实验总结通过本次实验,我们掌握了播放器的基本原理和功能模块,熟悉了音频、视频文件的解码与播放技术。
同时,我们还提高了编程能力和项目实践能力。
以下为实验过程中总结的一些心得体会:1. 熟练掌握FFmpeg库的使用,能够实现音频、视频文件的解码与播放。
利用VB实现多媒体播放器(PPT 50页)利用VB实现多媒体播放器实验计划学时:6学时实验性质:验证性一、实验目的1.通过实验学习多媒体技术有关知识,增进对多媒体技术的认识和体会。
2.掌握VB处理中经常用到的基本概念和名词。
3.学习使用VB编写多媒体播放器。
二、实验内容和要求1.掌握VB中需要经常接触的基本概念。
2.练习使用VB,尝试它的各项功能。
要求掌握基本处理功能,学会使用控件制作播放器。
三、实验环境(硬件环境和软件环境)1.带有声卡、麦克风、音箱或耳机的多媒体计算机。
2.Windows XP以上操作系统。
23.工具软件VB。
四、实验报告要求实验报告应包括实验名称、实验目的、实验内容、实验环境、操作方法和实验步骤、实验数据记录和处理、实验结果分析、体会质疑建议。
具体请参阅实验报告模板。
五、操作方法与实验步骤参阅下面实验指导进行实验,请学员各自写下操作方法与实验步骤。
(注意不要全抄下来,以各自理解的写,如何出现一样的报告,将给予0分处理)六、实验讲义实验1 API_ 音频播放器本节主要介绍了利用 API 函数制作 WAV 音频播放器,首先来介绍一下3PlaySound() 函数。
它的声明形式如下所示:Private Declare Function PlaySound Lib "winmm.dll" Alias "PlaySoundA"( ByVal lpszName As String , ByVal hModule As Integer , ByVal dwFlags As Integer ) As Integer字符串 lpszName 为声音文件的全名。
长整型 hModule 为程序模块的句柄,通常设置为 0 。
长整型 dwFlags 标志设置,在使用文件名时设置为 &20000 。
•添加控件4新建一个项目,在项目里添加 windows 窗体“ form1 ”,把它的“ Text ”属性改为“ API_ 音频播放”。
实验六媒体播放器实现1. 上机实验报告六课程名称:多媒体技术班级:数媒**班实验日期:2014.5.25-6.2 小组成员:指导教师:实验序号:06 实验成绩:一、简单媒体播放器实现二、实验目的及要求目的:使用VC++2005进行编程,基于控制台应用程序,使用DirectShow SDK 实现流媒体播放器。
要求:1、掌握使用DirectSound 中常用接口完成音视频媒体回放、显示及控制等动作的方法;2、利用接口中的控制函数完成控制操作;3、学会面向对象的设计方法;3、开发一个简单的基于控制台应用程序的媒体播放程序。
三、实验环境本次上机实践所使用的平台和相关软件VS2012MFC\win7四、实验内容1.平台搭建DirectX是一个多媒体API,提供了与显卡、声卡、输入设备等进行交互的标准接口。
如果没有这个标准API,则将必须为每个显卡和声卡组合以及每种类型的键盘、鼠标和手柄编写不同的代码。
而DirectShow是微软为简化或降低音频/视频开发的难度而为音视频应用开发人员定制的一套API函数。
是DirectX的一个组件,提供对多媒体数据流的高质量捕获和回放。
不必关注视频硬件如显卡、视频捕捉设备、视频编码算法、解码算法,音/视频数据同步等复杂细节。
此次在VS下媒体播放器的实现即需要DirectShow的有关静态库的配置和开发环境的配置。
由于VS2012无需配置DirectX,用户可直接编译DirectShow里的baseclasses,选择成批编译,生成四个版本的静态库Debug、Debug_Unicode、Release、Release_Unicode。
为了能让VS c++自动搜索到SDK库和头文件,需对媒体播放工程进行环境配置。
(1)在include路径下添加DirectShow中的BaseClasses\、include、Common。
(2)在lib路基下添加DirectShow中的Debug 、Debug_Unicode、Release、Release_Unicode。
2.实现的基本功能:打开/关闭媒体文件播放/暂停/停止媒体全屏显示音量控制抓图静音控制播放时总位于顶层增加的功能:屏幕缩放比例退出播放时长的显示未来扩展功能:希望实现前一个、下一个视频的播放3.功能介绍:1、点击“打开”,添加播放资源*.mpg;*.mpeg;*.avi;*.rmvb;*.rm; *.mp3;*.mid;*.wav;*.mov;*.qt;*.wmv;*.wma;*.asf2、单击“播放”,开始播放或重新播放3、点击“暂停”,暂停播放视频(只在视频播放时才可以生效);4、单击“终止”,视频播放停止(只在视频播放时才可以生效);5、滑动音量滑块调节音量大小(有左声道和右声道)6、可以选择menu的各个功能,如抓图,缩放,全屏,退出,帮助里的关于等。
五、调试过程及实验结果实验效果图:六、总结通过这次实验,体会到了DirectShow的强大功能,为用户开发节省了很多时间。
例如DirectShow的视频窗口接口有专门的方法支持全屏显示功能,因此我们只需bool CDXGraph::SetFullScreen(BOOL inEnabled){if (pVideoWindow){HRESULT hr = pVideoWindow->put_FullScreenMode(inEnabled ? OATRUE : OAFALSE);return SUCCEEDED(hr);}return false;}即可实现全屏显示的功能。
但是不足的是我未能使用GraphEdit管理滤波器的插入、连接和运行,快速构建一个使用DitectShow的滤波器链表。
在链接滤波器引脚时,无法链接。
主要原因是对GraphEdit不是很熟悉,时间来不及。
七、附录核心代码:void CDSPlayerDlg::OnFileOpenQuick(){CString strFilter;strFilter = "媒体文件(所有类型)|*.mpg;*.mpeg;*.avi;*.rmvb;*.rm;*.mp3;*.mid;*.wav;*.mov;*.qt;*.wmv;*.wma;*.asf|";strFilter += "All Files(*.*)|*.*|";CFileDialog dlgOpen(TRUE, NULL, NULL, OFN_PATHMUSTEXIST | OFN_HIDEREADONLY, strFilter, this);if (IDOK == dlgOpen.DoModal()){PlayFile(dlgOpen.m_ofn.lpstrFile);}}void CDSPlayerDlg::OnSize(UINT nType, int cx, int cy){ CDialog::OnSize(nType, cx, cy);CRect rc;GetClientRect(&rc);rc.top = rc.bottom - m_Bar.GetHeight();m_Bar.MoveWindow(&rc);GetClientRect(&rc);rc.bottom -= m_Bar.GetHeight();m_videowindow.MoveWindow(&rc);if(m_pGraph){ CRect rc;GetClientRect(&rc);rc.bottom -= m_Bar.GetHeight();m_videowindow.MoveWindow(&rc);m_pGraph->SetWindowPos(&rc);}DrawLogo();}void CDSPlayerDlg::OnFileClose(){ DestroyGraph();m_Bar.EnableToolButton(false);m_Bar.EnableSlider(false);SetTimer(TIMER_DRAWLOGO, 10, NULL);m_Bar.DrawStatusBar();SetWindowText("Media Player Classic");}void CDSPlayerDlg::OnFileShot(){ CTime t = CTime::GetCurrentTime();CString s = t.Format("D:\\%y_%m_%d_%H_%M_%S.BMP");if(m_pGraph->SnapshotBitmap(s))MessageBox(CString("截图成功,保存为")+s);}void CDSPlayerDlg::OnMenuSelect(UINT nItemID, UINT nFlags, HMENU hSysMenu){ CDialog::OnMenuSelect(nItemID, nFlags, hSysMenu);CCmdUI cmdUI;CMenu* pMainMenu = GetMenu();CMenu* pSubMenu = pMainMenu-> GetSubMenu(nItemID);if(IsMenu(pSubMenu->GetSafeHmenu())){ cmdUI.m_nIndexMax = pSubMenu->GetMenuItemCount();for (UINT i = 0; i < cmdUI.m_nIndexMax; ++i){ cmdUI.m_nIndex = i;cmdUI.m_nID = pSubMenu->GetMenuItemID(i);cmdUI.m_pMenu = pSubMenu;cmdUI.DoUpdate(this, FALSE);}}}void CDSPlayerDlg::OnClose(){ DestroyGraph();CDialog::OnClose();}void CDSPlayerDlg::OnPlay(){ if(m_pGraph){m_pGraph->Play();SetTimer(TIMER_POSITION, 100, NULL);m_Bar.m_ToolBar.GetToolBarCtrl().SetState(ID_PLAY, TBSTATE_CHECKED| TBSTATE_ENABLED);m_Bar.m_ToolBar.GetToolBarCtrl().SetState(ID_PAUSE, TBSTATE_ENABLED);m_Bar.m_ToolBar.GetToolBarCtrl().SetState(ID_STOP, TBSTATE_ENABLED);m_Bar.EnableSlider(true);SetVolumeAndBalance();m_Bar.DrawStatusBar();}}void CDSPlayerDlg::OnPause(){ if(m_pGraph){m_pGraph->Pause();m_Bar.m_ToolBar.GetToolBarCtrl().SetState(ID_PLAY, TBSTATE_ENABLED);m_Bar.m_ToolBar.GetToolBarCtrl().SetState(ID_PAUSE, TBSTATE_CHECKED|TBSTATE_ENABLED);m_Bar.m_ToolBar.GetToolBarCtrl().SetState(ID_STOP, TBSTATE_ENABLED);m_Bar.DrawStatusBar();}}void CDSPlayerDlg::OnStop(){ if(m_pGraph){ KillTimer(TIMER_POSITION);m_pGraph->SetPosition(0);m_pGraph->Stop();m_Bar.SetSliderPos(0);m_Bar.m_ToolBar.GetToolBarCtrl().SetState(ID_PLAY, TBSTATE_ENABLED);m_Bar.m_ToolBar.GetToolBarCtrl().SetState(ID_PAUSE, TBSTATE_ENABLED);m_Bar.m_ToolBar.GetToolBarCtrl().SetState(ID_STOP, TBSTATE_CHECKED| TBSTATE_ENABLED);m_Bar.EnableSlider(false);m_Bar.DrawStatusBar(); }}void CDSPlayerDlg::OnTimer(UINT nIDEvent){ switch(nIDEvent){ case TIMER_POSITION:{if(m_pGraph){ __int64 pos = m_pGraph->GetPosition();__int64 len = m_pGraph->GetLength();m_Bar.SetSliderPos(int(pos * 10000 / len));m_Bar.DrawStatusBar(); }break; }case TIMER_DRAWLOGO:{DrawLogo();KillTimer(TIMER_DRAWLOGO);break; } }CDialog::OnTimer(nIDEvent);}void CDSPlayerDlg::OnPlayFullScreen(){ if(m_pGraph){ m_videowindow.m_bDrawCursor = m_pGraph->GetFullScreen();m_pGraph->SetFullScreen(!m_pGraph->GetFullScreen()); }}void CDSPlayerDlg::OnUpdateFileShot(CCmdUI* pCmdUI){ if(m_pGraph)pCmdUI->Enable(m_pGraph->IsHaveVideo());elsepCmdUI->Enable(false);}void CDSPlayerDlg::OnUpdateFileClose(CCmdUI* pCmdUI){if(m_pGraph)pCmdUI->Enable(m_pGraph->IsPaused() || m_pGraph->IsRunning() || m_pGraph->IsStopped());elsepCmdUI->Enable(false);}void CDSPlayerDlg::OnUpdateFileFullScreen(CCmdUI* pCmdUI){ if(m_pGraph)pCmdUI->Enable(m_pGraph->IsHaveVideo());elsepCmdUI->Enable(false);}void CDSPlayerDlg::OnUpdatePause(CCmdUI* pCmdUI){if(m_pGraph == NULL){ pCmdUI->Enable(false);return; }pCmdUI->Enable();pCmdUI->SetCheck(m_pGraph->IsPaused());}void CDSPlayerDlg::OnUpdatePlay(CCmdUI* pCmdUI){if(m_pGraph == NULL){pCmdUI->Enable(false);return;}pCmdUI->Enable();pCmdUI->SetCheck(m_pGraph->IsRunning());}void CDSPlayerDlg::OnUpdateStop(CCmdUI* pCmdUI){if(m_pGraph == NULL){ pCmdUI->Enable(false);return; }pCmdUI->Enable();pCmdUI->SetCheck(m_pGraph->IsStopped());}void CDSPlayerDlg::OnHelpAbout(){ CAboutDlg dlg;dlg.DoModal();}void CDSPlayerDlg::SetVolumeAndBalance(){ if(m_pGraph){m_pGraph->SetAudioBalance(m_Bar.GetBalanceValue());m_pGraph->SetAudioVolume(m_Bar.GetVolumeValue()); }}void CDSPlayerDlg::DrawLogo(){ CRect rc;m_videowindow.GetClientRect(&rc);CDC memDC;CClientDC ClientDlgDC(m_videowindow.FromHandle(m_videowindow.m_hWnd));CBrush brush;brush.CreateSolidBrush(RGB(0,0,0));ClientDlgDC.FillRect(&rc,&brush);CBitmap Bitmap, *oldBitmap;BITMAP bmpInfo;int nWidth, nHeight;memDC.CreateCompatibleDC(&ClientDlgDC);Bitmap.LoadBitmap(IDB_LOGO);Bitmap.GetBitmap(&bmpInfo);nWidth = bmpInfo.bmWidth;nHeight = bmpInfo.bmHeight;oldBitmap = memDC.SelectObject(&Bitmap);ClientDlgDC.BitBlt((rc.right-nWidth)/2, (rc.bottom-nHeight)/2, nWidth, nHeight,&memDC, 0, 0, SRCCOPY);memDC.SelectObject(oldBitmap);}void CDSPlayerDlg::ChangeVideoSize(int rate){int CaptionHeight = GetSystemMetrics(SM_CYCAPTION);int MenuHeight = GetSystemMetrics(SM_CYMENU);m_videowindow.MoveWindow(0, 0, m_pGraph->GetSourceWidth(), m_pGraph->GetSourceHeight());int width;int height;width = m_pGraph->GetSourceWidth() * rate / 100;height = m_pGraph->GetSourceHeight() * rate/ 100 + CaptionHeight + MenuHeight + m_Bar.GetHeight();CRect rc;GetWindowRect(&rc);MoveWindow(rc.left, rc.top, width, height);CenterWindow();}。