2 函数的实现
MyDigtal::MyDigtal() { m_Open = m_Pause = m_Playing = FALSE; m_DeviceID = 0; // 初始化成员变量 } MyDigtal::~MyDigtal() { Close (); } |
由于篇幅所限,下面只是列出了一些主要程序。
mciSendCommand (m_DeviceID, MCI_STOP, NULL, NULL); mciSendCommand (m_DeviceID, MCI_CLOSE, NULL, NULL); // 停止播放并关闭设备 MCI_DGV_OPEN_PARMS MCIOpen; // 打开设备 MCIOpen.lpstrDeviceType = "avivideo";//设置播放设备为视频播放设备 MCIOpen.lpstrElementName = (LPSTR) Filename.GetBuffer (0);//文件名 MCIOpen.hWndParent = pWnd->m_hWnd;//可播放视频文件窗口指针 MCIOpen.dwStyle = WS_CHILD | WS_VISIBLE; MCI_DGV_SET_PARMS MCISet; // 将文件长度设置为帧 MCISet.dwTimeFormat = MCI_FORMAT_FRAMES; mciSendCommand (m_DeviceID, MCI_SEEK, MCI_SEEK_TO_START, NULL); // 找到视频文件//的开始位置 MCI_DGV_PLAY_PARMS MCIPlay;//在当前位置开始播放 MCIPlay.dwFrom = GetFrame ();//得到当前的视频位置 MCI_DGV_PAUSE_PARMS MCIPause;//暂停播放 mciSendCommand (m_DeviceID, MCI_PAUSE, 0, (DWORD)(LPVOID) &MCIPause)) MCI_DGV_STATUS_PARMS MCIStatus;//获的视频的总帧数 MCIStatus.dwItem = MCI_STATUS_LENGTH; return (int) MCIStatus.dwReturn;//总帧数 MCI_DGV_STATUS_PARMS MCIStatus;//得到视频当前的播放位置 MCIStatus.dwItem = MCI_STATUS_POSITION; return (int) MCIStatus.dwReturn;
MCI_DGV_STATUS_PARMS MCIStatus;//查询视频是否处于播放状态 MCIStatus.dwItem = MCI_STATUS_MODE; MCI_SEEK_PARMS MCISeek;//跳转播放 MCISeek.dwTo = nFrame; MCI_DGV_STEP_PARMS MCIStep;//前进和后退 MCIStep.dwFrames = nFrames; |
3 界面及应用功能程序的设计
我们创建一个基于对话框的应用程序。最后生成的程序界面如图1所示。
 图1 播放器主界面 |
在应用程序中,首先要在工程中添加winmm.lib库文件。winmm.lib库中输出了MCI的各类函数。其次要把MyDigtal类加入对话框主程序中,这样在后面用到九个按钮程序中就可以直接调用类中的功能函数。这里,我们特别要注意在函数中必须添加OnTime()函数。对于一个视频,如果开始了播放,它会按照既定的速度进行显示。但在打开一个视频后还需要对其进行进一步的操作,视频在播放时不会发送消息的,只有通过OnTime()函数每隔一定的时间检查一次视频播放状态,然后才可以针对视频的状态,对滑块显示当前帧的窗口进行更新,并确定此时每个按钮的状态。我们一般可以选用100毫秒更新一次。
4 结束语
我们使用VC++(www.cppentry.com)6.0这个微软强大的可视化应用程序开发工具,在VC++(www.cppentry.com)环境下,利用MFC库和MCI标准,我们可以轻松开发用于播放AVI格式的视频文件。
参考文献 [1] Davis Chapman著 骆长乐译 学用Visual C++(www.cppentry.com) 6.0 清华大学出版社 1999.9
[2] David J.Kruglinski 等 Programming Visual C++(www.cppentry.com)(Fifth Edition) Micrsoft Press 2001.6
[3] 周长发 著 多媒体计算机技术开发与应用 电子工业出版社 1995.7
[4] 本书编写组 著 Visual C++(www.cppentry.com) 6.0 MFC类库参考手册 人民邮电出版社 2002.11
|