欢迎来到装配图网! | 帮助中心 装配图网zhuangpeitu.com!
装配图网
ImageVerifierCode 换一换
首页 装配图网 > 资源分类 > DOC文档下载
 

实验8题1与题2的具体步骤

  • 资源ID:18178518       资源大小:80.91KB        全文页数:9页
  • 资源格式: DOC        下载积分:9.9积分
快捷下载 游客一键下载
会员登录下载
微信登录下载
三方登录下载: 微信开放平台登录 支付宝登录   QQ登录   微博登录  
二维码
微信扫一扫登录
下载资源需要9.9积分
邮箱/手机:
温馨提示:
用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
支付方式: 支付宝    微信支付   
验证码:   换一换

 
账号:
密码:
验证码:   换一换
  忘记密码?
    
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

实验8题1与题2的具体步骤

1、 编写代码实现制作一个音频文件播放器(1) 创建一个基于对话框的工程,工程名为ex123。在第二步的please enter a title for your dialog项中输入对话框标题:“MyWAVPlayer”。(2) 为工程添加多媒体组件。选择菜单:工程>添加到工程>Components and Controls菜单项,在弹出的Components and Controls Gallery对话框中双击Visual C+ Components 文件夹,然后选择Windows Multimedia library项,按Insert按钮:在弹出的对话框中按“确定”按钮,在继续弹出的一个消息框中按“是”按钮,则多媒体组件被加入到当前工程中。选择Components and Controls Gallery对话框中的关闭按钮,关闭该对话框。(3) 定制对话框。将IDD_EX123_DIALOG对话框(MyWAVPlayer)中的静态文本控件以及“取消”按钮控件删除。将“确定”按钮的标题改为“关机”。新添3个按钮控件,其ID和标题分别设置如下。 按钮ID值Caption播放按钮IDC_BUTTON_PLAY播放停止按钮IDC_BUTTON_STOP停止打开按钮IDC_BUTTON_OPEN打开 (4) 为对话框类添加3个成员变量,并在构造函数中对它们进行初始化。3个成员变量分别用来表示当前状态为播放、暂停状态和设备ID,如下: 变量类型变量名访问类型BOOLm_bIsPlayingprotectedBOOLm_bIsPauseprotectedMCIDEVICEIDm_MCIDeviceIDprotected 构造函数中的初始化代码:CEx123Dlg:CEx123Dlg(CWnd* pParent /*=NULL*/): CDialog(CEx123Dlg:IDD, pParent)m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);m_bIsPause=FALSE;m_bIsPlaying=FALSE;m_MCIDeviceID=0;(5) 为CEx123Dlg对话框类添加3个成员函数:1)利用类向导添加WM_DESTROY消息的处理函数,代码如下:void CEx123Dlg:OnDestroy() CDialog:OnDestroy();/退出程序前先停止声音播放,再关闭设备/这里忽略了错误处理mciSendCommand(m_MCIDeviceID,MCI_STOP,MCI_WAIT,NULL);mciSendCommand(m_MCIDeviceID,MCI_CLOSE,MCI_WAIT,NULL); 2)添加一个处理MCI错误的函数。在ClassView页面中,右键单击CEx123Dlg类,选择Add Member Function;添加成员函数类型为viod,函数描述为:ShowMCIError(DWORD dwError);访问方式为:private。函数代码内容为:void CEx123Dlg:ShowMCIError(DWORD dwError)char szErrorBufMAXERRORLENGTH;MessageBeep(MB_ICONEXCLAMATION);if(mciGetErrorString(dwError,(LPSTR)szErrorBuf,MAXERRORLENGTH)MessageBox(szErrorBuf,"MCI错误",MB_ICONEXCLAMATION);elseMessageBox("未知错误!","MCI错误",MB_ICONEXCLAMATION); 3)添加MM_MCINOTIFY消息的消息映射和处理函数。由于类向导不支持该消息,必须手工进行添加,添加时不要忘记包括三项内容:函数原型、消息映射入口项和函数体。在ex123Dlg.h文件中添加消息函数原型的声明:class CEx123Dlg : public CDialog/省略部分代码virtual BOOL OnInitDialog();afx_msg void OnSysCommand(UINT nID, LPARAM lParam);afx_msg void OnPaint();afx_msg HCURSOR OnQueryDragIcon();afx_msg void OnDestroy();afx_msg LRESULT OnMciNotify(WPARAM wParam,LPARAM lParam);afx_msg void OnButtonOpen();afx_msg void OnButtonPlay();afx_msg void OnButtonStop();/AFX_MSGDECLARE_MESSAGE_MAP()private:void ShowMCIError(DWORD dwError);在ex123Dlg.cpp文件中添加消息映射项:/省略部分代码BEGIN_MESSAGE_MAP(CEx123Dlg, CDialog)/AFX_MSG_MAP(CEx123Dlg)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_WM_DESTROY()/AFX_MSG_MAPON_MESSAGE(MM_MCINOTIFY,OnMciNotify)END_MESSAGE_MAP()添加的函数体内容如下:LRESULT CEx123Dlg:OnMciNotify(WPARAM wParam,LPARAM lParam)/如果一个文件播放完毕,则重置两个状态为FALSE/使得用户可以再次播放该文件if(wParam=MCI_NOTIFY_SUCCESSFUL)m_bIsPause=FALSE;m_bIsPlaying=FALSE;return 0;return -1;(6) 为“打开”、“播放”和“停止”3个按钮添加消息处理函数。用类向导分别为3个按钮添加BN_CLICKED消息处理函数如下:void CEx123Dlg:OnButtonOpen() CString filename;MCI_OPEN_PARMS mciOpenParms;DWORD dwError;/利用通用对话框打开一个WAV波形文件static char szFilter="波形音频文件(*.wav)|*.wav|"CFileDialog /(直接接下一行,两行合并为一行)dlg(TRUE,"wav",NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,szFilter);if(dlg.DoModal()=IDOK)filename=dlg.GetPathName();/得到用户选择的文件名if(m_bIsPlaying)/如果正在播放,则先关掉dwError=mciSendCommand(m_MCIDeviceID,MCI_CLOSE,0,NULL);if(dwError)ShowMCIError(dwError);return;mciOpenParms.lpstrDeviceType="waveaudio"mciOpenParms.lpstrElementName=filename;dwError=mciSendCommand(0,MCI_OPEN,MCI_OPEN_TYPE|MCI_OPEN_ELEMENT,(DWORD)(LPVOID)&mciOpenParms);/(以上两行合并为一行代码)/如果打不开音频设备则报告错误并返回if(dwError)ShowMCIError(dwError);return;/如果打开成功,则取得设备ID值并设置两个状态指示m_MCIDeviceID=mciOpenParms.wDeviceID;m_bIsPause=FALSE;m_bIsPlaying=FALSE;void CEx123Dlg:OnButtonPlay() MCI_PLAY_PARMS mciPlayParms;DWORD dwError;if(!m_bIsPlaying)/处理MM_MCINOTIFY消息的窗口句柄mciPlayParms.dwCallback=(long)GetSafeHwnd();/从头开始播放文件mciPlayParms.dwFrom=0;dwError=mciSendCommand(m_MCIDeviceID,MCI_PLAY,MCI_FROM|MCI_NOTIFY,(DWORD)(LPVOID)&mciPlayParms);/(两行合并为一行代码)/如果错误,则显示错误并返回if(dwError)ShowMCIError(dwError);return;if(m_bIsPlaying)if(!m_bIsPause)/若正在播放,先暂停dwError=mciSendCommand(m_MCIDeviceID,MCI_PAUSE,0,NULL);else/若现在处于暂停,则恢复放音dwError=mciSendCommand(m_MCIDeviceID,MCI_RESUME,0,NULL);if(dwError)/遇到错误返回ShowMCIError(dwError);return;m_bIsPause=!m_bIsPause;/切换放音/暂停状态m_bIsPlaying=TRUE;void CEx123Dlg:OnButtonStop() DWORD dwError;dwError=mciSendCommand(m_MCIDeviceID,MCI_STOP,MCI_WAIT,NULL);if(dwError)ShowMCIError(dwError);return;m_bIsPause=FALSE;m_bIsPlaying=FALSE;编译、链接并运行程序。当用户按下“打开”按钮时,弹出“打开”对话框,随意选定某波形文件(.wav)播放。“播放”按钮实现声音的暂停和继续播放。“停止”按钮可以停止播放。“关机”按钮则退出播放程序。2、 BMP位图显示程序(1) 新建一个MFC的SDI工程。名为ex124。(2) 在CEx124view类中添加两个public成员变量:BITMAPINFO* m_pBMI;BYTE* m_pDIBData;在构造函数中对两个变量进行初始化:CEx124View:CEx124View()m_pDIBData=NULL;m_pBMI=NULL; (3) 在工作区ClassView页面中,右键单击CEx124View类,在弹出的菜单中选择Add Member Funcion项,依次添加两个函数BOOL LoadFromFile(LPCTSTR lpszFileName);Viod ShowDIB(CDC* pDC, int nLeft, int nTop, int nWidth, int nHeight);其中,函数LoadFromFile()完成从BMP文件中读入位图,ShowDIB则完成位图的显示。相应的成员函数代码如下:BOOL CEx124View:LoadFromFile(LPCTSTR lpszFileName)CFile file;if(!file.Open(lpszFileName,CFile:modeRead|CFile:typeBinary)AfxMessageBox("打不开文件!");return FALSE;/读入BMP文件头信息BITMAPFILEHEADER bfh;if(file.Read(&bfh,sizeof(bfh)!=sizeof(bfh)AfxMessageBox("读文件出错!");return FALSE;/若不是BMP,则不处理if(bfh.bfType!=0x4d42)/BMAfxMessageBox("不是BMP文件!");return FALSE;/读入位图信息头BITMAPINFOHEADER bih;if(file.Read(&bih,sizeof(bih)!=sizeof(bih)AfxMessageBox("读文件出错!");return FALSE;/不是24位真彩色图像,则不予处理if(bih.biBitCount!=24)AfxMessageBox("不是24位真彩色图像!");return FALSE;/为BITMAPINFO结构指针申请内存,由于真彩色位图没有颜色表,/所以其BITMAPINFO = BITMAPINFOHEADERm_pBMI=(BITMAPINFO*)new charsizeof(BITMAPINFOHEADER);if(!m_pBMI)AfxMessageBox("分配内存出错!");return FALSE;/由于前面已将BITMAPINFOHEADER读入了内存,这里只需拷贝一下memcpy(m_pBMI,&bih,sizeof(BITMAPINFOHEADER);/为DIB图像数据指针申请内存DWORD dataBytes=bfh.bfSize-bfh.bfOffBits;/图像数据的字节数m_pDIBData=(BYTE*)new chardataBytes;if(!m_pDIBData)AfxMessageBox("分配内存出错!");delete m_pBMI;return FALSE;/读入位图的图像数据if(file.ReadHuge(m_pDIBData,dataBytes)!=dataBytes)AfxMessageBox("读文件出错!");delete m_pDIBData;delete m_pBMI;return FALSE;file.Close();return TRUE; void CEx124View:ShowDIB(CDC *pDC, int nLeft, int nTop, int nWidth, int nHeight)pDC->SetStretchBltMode(COLORONCOLOR);/设置伸缩拷贝模式StretchDIBits(pDC->GetSafeHdc(),nLeft,/目标矩形左上角X坐标nTop,/目标矩形左上角Y坐标nWidth,/目标矩形的宽度nHeight,/目标矩形的高度0,0,/源矩形左上角X、Y坐标m_pBMI->bmiHeader.biWidth,/源矩形宽度m_pBMI->bmiHeader.biHeight,/源矩形高度m_pDIBData,/位图图像数据的地址m_pBMI,/位图信息结构地址DIB_RGB_COLORS,/标志选项SRCCOPY);/光栅操作码(4) 利用类向导在CEx124View中位ID_FILE_OPEN项添加WM_COMMAND消息映射及响应函数(重载“打开”菜单项)操作如下:void CEx124View:OnFileOpen() CString filename;/利用通用对话框打开一个BMP文件static char szFilter="BMP文件(*.bmp)|*.bmp|"CFileDialog dlg(TRUE,"bmp",NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,szFilter);if(dlg.DoModal()=IDOK)filename=dlg.GetPathName();/得到选择的文件名if(!LoadFromFile(filename)/读入DIB文件内容return;Invalidate(FALSE); /刷新窗口显示内容(5) 修改CEx124View:OnDraw()函数,添加显示DIB位图的代码。void CEx124View:OnDraw(CDC* pDC)CEx124Doc* pDoc = GetDocument();ASSERT_VALID(pDoc);/如果还没有DIB数据,则返回if(m_pBMI=NULL|m_pDIBData=NULL)return;CRect rect;GetClientRect(rect);/在整个客户区显示DIB图像ShowDIB(pDC,0,0,rect.Width(),rect.Height();编译、链接并运行程序,单击“文件”->“打开”,选择一个.bmp文件,如果不是真正的BMP文件,或者不是真彩色的BMP文件,程序都将报告有关信息。如果用户选择的是真彩色的BMP文件,则程序会在客户区显示整个图像。

注意事项

本文(实验8题1与题2的具体步骤)为本站会员(jun****875)主动上传,装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知装配图网(点击联系客服),我们立即给予删除!

温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!