《媒体控制接口》PPT课件.ppt_第1页
《媒体控制接口》PPT课件.ppt_第2页
《媒体控制接口》PPT课件.ppt_第3页
《媒体控制接口》PPT课件.ppt_第4页
《媒体控制接口》PPT课件.ppt_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

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

文档简介

第10章媒体控制接口,10.1 MCI设备类型 10.2 MCI编程步骤 10.3使用MCIWnd窗口类,10.1 MCI设备类型,媒体控制接口允许控制两类设备:第一类为简单设备,是指那些不需要文件的设备,如CD音频播放设备;第二类为复合设备,是那些需要文件的设备,如数字视频及波形音频设备等。表列出了目前已定义的设备的标识符。,10.2 MCI编程步骤,打开设备 MCI为不同的多媒体设备打开提供相应的数据结构类型。若不想使用设备中特定的参数数据,则可使用统一的MCI_OPEN_PARMS结构,原型: typedef struct DWORD dwCallback; / 低字节用于MCI_NOTIFY的窗口句柄 MCIDEVICEID wDeviceID; / 返回的设备标识符 LPCSTR lpstrDeviceType; / MCI设备的类型 LPCSTR lpstrElementName; / 设备元素 LPCSTR lpstrAlias; / 可选的设备别名 MCI_OPEN_PARMS; 打开多媒体设备的过程:定义一个MCI_OPEN_PARMS结构类型变量,给结构变量中的相应参数赋值,调用mciSendCommand向设备发送MCI_OPEN命令消息,成功调用时,可获得相应的设备标识符。例如,下面的代码是打开波形音频设备: WORD wDeviceID; / MCI设备ID CString fileName; / 波形文件名 . MCI_OPEN_PARMS openParms; / MCI设备打开参数 openParms.lpstrDeviceType = “waveaudio“; / 波形音频设备 openParms.lpstrElementName = fileName; if (mciSendCommand (NULL, MCI_OPEN, MCI_OPEN_ELEMENT | MCI_OPEN_TYPE, (DWORD)(LPVOID) .,10.2 MCI编程步骤,设置或获取设备信息 使用MCI_SET和MCI_STATUS命令可以用来设置和获取设备信息,在用函数mciSendCommand发送命令时,使用相应的MCI_SET_PARMS和MCI_STATUS_PARMS结构。原型: typedef struct DWORD dwCallback; / 低字节用于MCI_NOTIFY的窗口句柄 DWORD dwTimeFormat; / 时间格式 DWORD dwAudio; / 输出声道 MCI_SET_PARMS; typedef struct DWORD dwCallback; / 低字节用于MCI_NOTIFY的窗口句柄 DWORD dwReturn; / 要获取的设备信息 DWORD dwItem; / 需要获取的信息项 DWORD dwTrack; / 曲目的长度或曲目号 MCI_STATUS_PARMS; 例如,下面的代码是将波形音频设备的时间格式设成毫秒: MCI_SET_PARMS setParms; setParms.dwTimeFormat=MCI_FORMAT_MILLISECONDS; if (mciSendCommand(wDeviceID, MCI_SET, MCI_SET_TIME_FORMAT, (DWORD)(LPVOID) ,10.2 MCI编程步骤,播放设备 使用MCI_PLAY命令可以使设备播放多媒体文件,并在用函数mciSendCommand发送命令时,使用相应的MCI_PLAY_PARMS结构,其原型如下: typedef struct DWORD dwCallback; / 低字节用于MCI_NOTIFY的窗口句柄 DWORD dwFrom; / 播放的起点位置 DWORD dwTo; / 播放的终点位置 MCI_PLAY_PARMS; 例如,下面的代码是播放波形音频设备: MCI_PLAY_PARMS playParms; / 定位到开始位置 mciSendCommand (wDeviceID, MCI_SEEK, MCI_SEEK_TO_START, NULL); / 播放设备 if (mciSendCommand (wDeviceID, MCI_PLAY, NULL, (DWORD)(LPVOID) ,10.2 MCI编程步骤,例如,若接收MM_MCINOTIFY消息的窗口是一个对话框CMyDlg,则添加消息处理的过程如下: (1)切换到项目工作区窗口的ClassView页面,右击CMyDlg类,选择快捷菜单中的“Add Member Function.”命令。为CMyDlg类添加保护型的成员函数,原型: protected: LRESULT OnMCINotify(WPARAM wParam,LPARAM lParam); (2)在类CMyDlg的消息入口处,添加下列消息宏指令: BEGIN_MESSAGE_MAP(CMyDlg, CDialog) /AFX_MSG_MAP(CMyDlg) . /AFX_MSG_MAP ON_MESSAGE(MM_MCINOTIFY,OnMCINotify) END_MESSAGE_MAP() (3)编写CMyDlg:OnMCINotify函数代码: LRESULT CMyDlg:OnMCINotify(WPARAM wParam, LPARAM lParam) . return FALSE; (4)关闭设备 使用MCI_STOP和MCI_CLOSE命令可以分别用来停止播放和关闭设备。不需要设置或返回附加的信息,因此不必考虑相应的MCI_GENERIC_PARMS结构。,10.3使用MCIWnd窗口类,MCIWnd是一个控制多媒体设备的窗口类。若在应用程序中使用MCIWnd窗口类,必须在调用MCIWnd函数所在的源文件的前面添加vfw.h的头文件,以及编译时加入vfw32.lib库或在程序中加入下列语句: #pragma comment (lib,“vfw32.lib“) 在MCIWnd窗口类中,虽然它所提供的函数并不多,但是它所提供的宏却非常多,并且基本上与MCI的底层功能相对应。 在应用程序中使用MCIWnd窗口类的一般步骤是: (1)在程序中调用MCIWndRegisterClass函数注册MCI窗口类,以便以后用CreateWindow或CreateWindowEx函数创建窗口,或者直接调用函数MCIWndCreate创建窗口。 (2)获得相应的窗口句柄后,就可调用MCIWndOpen宏来打开设备。 (3)由于MCIWnd窗口提供了相应的媒体控制按钮,因而不需要用户编写额外的代码。 (4)但作为技巧,用户还应该跟踪MCIWnd窗口的一些消息(如MCIWNDM_ NOTIFYSIZE)来调整MCIWnd窗口。,10.3使用MCIWnd窗口类,例Ex_MCI 利用MCIWnd窗口类在多文档应用程序中添加一个多媒体播放器。 (1)用MFC AppWizard(exe)创建一个多文档项目Ex_MCI,单击Finish。 (2)在StdAfx.h中放入包含文件使得应用程序能使用所有的多媒体代码。由于项目中的每一个文件已经包含了StdAfx.h,所以在其他地方就不必再包含这些多媒体文件。 . #endif / _AFX_NO_AFXCMN_SUPPORT #include #pragma comment (lib,“vfw32.lib“) . (3)在CEx_MCIApp:InitInstance函数,使用MCIWndRegisterClass函数注册MCI窗口类。虽然,后面的创建窗口是直接调用函数MCIWndCreate来进行的,但还应该保证应用程序的运行系统拥有并支持MCIWnd窗口类。 BOOL CEx_MCIApp:InitInstance() if (!MCIWndRegisterClass() return FALSE; AfxEnableControlContainer(); . (4)在Ex_MCIView类中添加一个公共成员变量用来标识嵌入的MCIWnd窗口句柄。 public: CEx_MCIDoc* GetDocument(); HWND m_hMyMCIWnd; .,10.3使用MCIWnd窗口类,(5)用ClassWizard为Ex_MCIView类中添加OnInitialUpdate消息处理函数,增加代码: void CEx_MCIView:OnInitialUpdate() CView:OnInitialUpdate(); m_hMyMCIWnd=MCIWndCreate(m_hWnd,AfxGetInstanceHandle(), MCIWNDF_NOTIFYSIZE |MCIWNDF_NOERRORDLG | WS_CHILD|WS_VISIBLE,NULL); if (m_hMyMCIWnd=NULL) return; const CString ,10.3使用MCIWnd窗口类,(7) 要添加处理该消息的代码来调整窗口的大小以便能及时更新显示。需要手动进行。在Ex_MCIView.h文件中的消息声明处添加下列代码: / Generated message map functions protected: /AFX_MSG(CEx_MCIView) . /AFX_MSG afx_msg LONG OnNotifySize(UINT wParam, LONG lParam); DECLARE_MESSAGE_MAP() (8)在Ex_MCIView.cpp的消息入口处添加下列代码: BEGIN_MESSAGE_MAP(CEx_MCIView, CView) /AFX_MSG_MAP(CEx_MCIView) . ON_MESSAGE(MCIWNDM_NOTIFYSIZE,OnNotifySize) /AFX_MSG_MAP / Standard printing commands ON_COMMAND(ID_FILE_PRINT, CView:OnFilePrint) ON_COMMAND(ID_FILE_PRINT_DIRECT, CView:OnFilePrint) ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView:OnFilePrintPreview) END_MESSAGE_MAP(),10.3使用MCIWnd窗口类,(9)为CEx_MCIView类添加该消息的处理函数OnNotifySize,代码: LONG CEx_MCIView:OnNotifySize(UINT wParam, LONG lParam) CRect rc; CFrameWnd* pParent=GetP

温馨提示

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

评论

0/150

提交评论