编程词典
明日图书
明日软件
用户注册
用户登录
站内
  当前位置:编程词典服务网 >> 编程词典社区论坛 >> 使用函数播放AVI文件
  · 使用函数播放AVI文件

用户:  大麦
发帖:  430 篇
作品:  0 个
回复:  108 篇
技术分:  1156 分
等级:  
注册:  2010-05-11 09:09:40



发表于:2010-07-13 14:52:16
          楼主

使用函数播放AVI文件
除了可以使用控件直接播放avi文件,用户还可以使用系统提供的MCIWndCreate函数来播放avi文件。
MCIWndCreate函数语法如下:
HWND MCIWndCreate(HWND hwndParent,HINSTANCE hInstance,DWORD dwStyle, LPSTR szFile );
参数说明:
 hwndParent:表示媒体播放窗口的父窗口。
 hInstance:表示关联MCIWnd窗口的实例句柄。
 dwStyle:表示窗口风格,其可选值如表1所示。
表1                                  窗口风格

描述

MCIWNDF_NOAUTOSIZEWINDOW

当图像大小改变时,MCI窗口不改变

MCIWNDF_NOAUTOSIZEMOVIE

MCI窗口改变时不改变目标区域的大小

MCIWNDF_NOERRORDLG

阻止显示错误对话框

MCIWNDF_NOMENU

隐藏菜单按钮

MCIWNDF_NOOPEN

隐藏菜单中的打开、关闭命令

MCIWNDF_NOPLAYBAR

隐藏工具条,阻止用户对其进行访问

MCIWNDF_NOTIFYANSI

当用ASCI字符串代替UNICODE字符串时,通知父窗口设备模式的改变

MCIWNDF_NOTIFYMODE

当设备操作模式改变时,MCI窗口以MCIWNDM_NOTIFYMODE消息通知父窗口

MCIWNDF_NOTIFYPOS

在录制或回放时,如果位置发生改变以MCIWNDM_NOTIFYPOS消息通知父窗口

MCIWNDF_NOTIFYMEDIA

当新的设备被使用或者数据文件被打开或关闭时,以MCIWNDM_NOTIFYMEDIA消息通知父窗口

MCIWNDF_NOTIFYSIZE

MCI窗口大小改变时通知父窗口

MCIWNDF_NOTIFYERROR

当一个MCI错误发生时通知父窗口

MCIWNDF_NOTIFYALL

是所有的MCI窗口通知风格被使用

MCIWNDF_RECORD

添加一个录音按钮到工具栏中,并添加一个新建文件命令到菜单中

MCIWNDF_SHOWALL

使MCIWNDF_SHOW风格应用于所有的MCI窗口中

MCIWNDF_SHOWMODE

MCI窗口标题栏中显示媒体设备的当前模式

MCIWNDF_SHOWNAME

MCI窗口标题栏中显示打开的MCI设备的名称或者数据文件的名称

MCIWNDF_SHOWPOS

MCI窗口标题栏中显示当期设备内容的位置


 szFile:表示播放的avi文件名称。
下面通过一个示例介绍如何使用MCIWndCreate函数播放avi文件。
例如,使用MCIWndCreate函数播放avi文件
(1)创建一个基于对话框的应用程序,工程名称为“PlayAvi”。
(2)引用vfw.h头文件并链接Vfw32.lib库文件。
#include "Vfw.h"       //引用头文件
#pragma comment (lib,"Vfw32.lib")   //链接库文件
(3)在对话框类中定义一个MCI窗口句柄。
HWND m_hAviWnd;      //定义窗口句柄
(4)向对话框中添加OnNotifyMode消息方法,当设备的模式发生改变时调用该方法。
LRESULT  CPlayAviDlg::OnNotifyMode(WPARAM wparam, LPARAM lparam)
{
 long code = (long)lparam;    //获取通知代码
 if (code == MCI_MODE_STOP)   //判断avi文件是否播放完毕
 {
  MCIWndClose(m_hAviWnd);  //关闭MCI窗口
 }
 return 0;
}
(5)在对话框的消息映射部分添加消息映射宏。
ON_MESSAGE(MCIWNDM_NOTIFYMODE,OnNotifyMode)
(6)处理“OK”按钮的单击事件,弹出文件打开对话框让用户选择一个avi文件,并进行播放。
void CPlayAviDlg::OnOK()
{
 CFileDialog flDlg(TRUE,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,"AVI文件|*.avi||",this);      //定义文件打开对话框
 if (flDlg.DoModal()==IDOK)    //判断用户是否单击OK按钮
 {
  MCIWndDestroy(m_hAviWnd); //先释放窗口
  m_hAviWnd = MCIWndCreate(m_hWnd,NULL,MCIWNDF_SHOWMODE|MCIWNDF_NOTI
FYMODE,flDlg.GetPathName());    //创建MCI窗口
  MCIWndPlay(m_hAviWnd);   //播放文件
 }
}
 提示:在调用MCIWndCreate函数前,如果之前已经创建了一个视频窗口,则首先需要调用MCIWndDestroy函数释放视频窗口。
(7)在对话框关闭时释放MCI窗口。
void CPlayAviDlg::OnCancel()
{
 MCIWndDestroy(m_hAviWnd);   //释放MCI窗口
 CDialog::OnCancel();
}
(8)运行程序,效果如图1所示。
 
图1  播放AVI文件

 

本帖赏分:0 分   回复数:0 篇     
修改   删除   引用   回复
该帖暂无回复!
吉林省明日科技有限公司提供技术支持. 
Copyright © 1999-2008 吉林省明日科技有限公司. 吉ICP备10002740
当前时区 GMT+8, 今天是 
刷新页面 - 关于我们 - 设为首页