VC:自己编写AVT播放程序
VC:自己编写AVT播放程序
王毅 (12/10/1999)
AVI文件也称为视频文件,视频是多道记录,包括波形声音和活动图像;
活动图像由一系列图像组成。AVI文件格式符合音频/视频交替存储格式(the
Audio/Video Interleaved format,简称AVI),它是Microsoft公司为其Windows
系统保存活动视频信号而设计的一种多媒体数据文件格式。
时下,不少教育软件、游戏软件具有多媒体AVI文件的播放功能,程序员在开
发多媒体应用软件时,能否在自己的程序里也能操作播放AVI文件呢?笔者根据平
时开发中积累的成功经验,发现不利用Open(打开)对话框来选择需要播放的AVI
文件进行编程,还有一种更加简洁方便的编程方法。在此,给出这种新的AVI文件
播放方法。供大家参考。
MCIWnd是用来控制多媒体设备的窗口类。与MCIWnd相关的函数、消息和宏提供
的方法可较容易地把多媒体播放或记录添加到应用程序中去。要在应用程序中播放
视频文件,只需调用MCIWndCreate函数即可。该函数可在应用程序中创建具有多媒
体控制界面(MCI)用来播放任何设备的控件。这些设备包括CD声音、波形音频、
MIDI以及视频设备。首先MCIWndCreate函数注册MCIWnd窗口类,然后为使用MCI服
务创建MCIWnd窗口。使用MCIWndCreate函数可执行自动播放、添加用户控制播放、
用窗口类型来改变MCIWnd窗口、允许用户指定设备或文件四类任务。MCIWnd通过几
个宏来控制播放,使用这些宏可完成以下功能:1、确定并改变当前位置;2、开始
和暂停及恢复播放;3、定义播放范围;4、倒放;5、循环播放。
本文程序运行后,只要选中多媒体菜单项的创建MCI子窗口命令项,即自动生
成一个具有工具栏的MCI子窗口,工具栏上具有打开、播放、暂停播放以及轨道条
等控件,可方便地实现对任一AVI文件的控制。本文程序在中文Windows中采用
Visual C++6.0编辑、编译连接通过。运行良好。值得声明的是,要实现多媒体
功能,必须在程序中包含多媒体头文件digitalv.h、mciavi.h、mmsystem.h、
mmreg.h、msacm.h、vfw.h。当然还必须在工程文件中加入多媒体库文件
MSACM.LIB、WINMM.LIB和VFW32.LIB。附源文件pavi.cpp、资源描述文件pavi.rc和
头文件pavi.h。
// Windows AVI playerpavi.cpp
#include
#include
#include
#include
#include
#include
#include
#include"pavi.h"
HINSTANCE g_hinst;
HWND g_hwndMCIWnd;
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
char*szWinName=Win95Main"; //winclass nameint WINAPI
WinMain(HINSTANCE hThisInst,HINSTANCE hPrevInst,PSTR pszCmdLine,int
nCmdShow)
HWND hwnd;
MSG uMsg;
WNDCLASS wndclass;
HACCEL hAccel;
// define windows class
wndclass.style=0;
wndclass.lpfnWndProc=WndProc;
wndclass.cbClsExtra=0;
wndclass.cbWndExtra=0;
wndclass.hInstance=hThisInst;
wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);
wndclass.hbrBackground=GetStockObject(WHITE_BRUSH);
wndclass.lpszMenuName=SampleMenu";
wndclass.lpszClassName=szWinName;
g_hinst=hThisInst;
//register windows class
RegisterClass(&wndclass);
//create window hwnd=CreateWindow(szWinName,Windows Multimedia
Player",WS_OVERLAPPEDWINDOW|WS_VSCROLL|WS_HSCROLL,
CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,
CW_USEDEFAULT,HWND_DESKTOP,NULL,hThisInst,NULL);
//加载加速键表
hAccel=LoadAccelerators(hThisInst,SampleMenu");
// display window
ShowWindow(hwnd,nCmdShow);
UpdateWindow(hwnd);
// process message looply
while(GetMessage(&
g,NULL,0,0)){
if(!TranslateAccelerator(hwnd,hAccel,&uMsg))
{
TranslateMessage(&uMsg);
DispatchMessage(&uMsg);
}
}
return uMsg.wParam;
}
//主窗口函数,处理各种消息,由WINDOW调用LRESULT CALLBACK
WndProc(HWND hwnd,UINT message, WPARAM wParam,LPARAM lParam)
{
switch(message){
case WM_COMMAND:
switch(wParam){
case IDM_CREATEMCIWND: //创建一具有工具栏的可见MCI子窗口
g_hwndMCIWnd=MCIWndCreate(hwnd,g_hinst,
WS_CHILD|WS_VISIBLE|WS_CAPTION|MCIWNDF_SHOWALL,NULL);
break;
case IDM_EXIT:
MCIWndDestroy(g_hwndMCIWnd);
MessageBox(hwnd,退出程序",退出",MB_OK);
PostQuitMessage(0);
break;
case IDM_HELP:
MessageBox(hwnd,AVI Player\n\n1999.9.2\n\nBy Mr.Wangyi\n",帮助
",MB_OK); break;
}
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd,message,wParam,lParam);
}
return 0;
}
//资源描述文件pavi.rc
#include
#includepavi.h"
SampleMenu MENU
{
POPUP多媒体(&M)"
{
MENUITEM创建MCI窗口(&R)\t CTRL+R",DM_CREATEMCIWND MENUITEM退出(&
X)",IDM_EXIT
}
MENUITEM帮助(&H)",IDM_HELP
}
SampleMenu ACCELERATORS
}
X",IDM_EXIT,ALT
R",IDM_CREATEMCIWND,ALT
VK_F1,IDM_HELP,VIRTKEY
}
//头文件pavi.h
#define IDM_CREATEMCIWND 101
#define IDM_HELP 102
#define IDM_EXIT 103
王毅 (12/10/1999)
AVI文件也称为视频文件,视频是多道记录,包括波形声音和活动图像;
活动图像由一系列图像组成。AVI文件格式符合音频/视频交替存储格式(the
Audio/Video Interleaved format,简称AVI),它是Microsoft公司为其Windows
系统保存活动视频信号而设计的一种多媒体数据文件格式。
时下,不少教育软件、游戏软件具有多媒体AVI文件的播放功能,程序员在开
发多媒体应用软件时,能否在自己的程序里也能操作播放AVI文件呢?笔者根据平
时开发中积累的成功经验,发现不利用Open(打开)对话框来选择需要播放的AVI
文件进行编程,还有一种更加简洁方便的编程方法。在此,给出这种新的AVI文件
播放方法。供大家参考。
MCIWnd是用来控制多媒体设备的窗口类。与MCIWnd相关的函数、消息和宏提供
的方法可较容易地把多媒体播放或记录添加到应用程序中去。要在应用程序中播放
视频文件,只需调用MCIWndCreate函数即可。该函数可在应用程序中创建具有多媒
体控制界面(MCI)用来播放任何设备的控件。这些设备包括CD声音、波形音频、
MIDI以及视频设备。首先MCIWndCreate函数注册MCIWnd窗口类,然后为使用MCI服
务创建MCIWnd窗口。使用MCIWndCreate函数可执行自动播放、添加用户控制播放、
用窗口类型来改变MCIWnd窗口、允许用户指定设备或文件四类任务。MCIWnd通过几
个宏来控制播放,使用这些宏可完成以下功能:1、确定并改变当前位置;2、开始
和暂停及恢复播放;3、定义播放范围;4、倒放;5、循环播放。
本文程序运行后,只要选中多媒体菜单项的创建MCI子窗口命令项,即自动生
成一个具有工具栏的MCI子窗口,工具栏上具有打开、播放、暂停播放以及轨道条
等控件,可方便地实现对任一AVI文件的控制。本文程序在中文Windows中采用
Visual C++6.0编辑、编译连接通过。运行良好。值得声明的是,要实现多媒体
功能,必须在程序中包含多媒体头文件digitalv.h、mciavi.h、mmsystem.h、
mmreg.h、msacm.h、vfw.h。当然还必须在工程文件中加入多媒体库文件
MSACM.LIB、WINMM.LIB和VFW32.LIB。附源文件pavi.cpp、资源描述文件pavi.rc和
头文件pavi.h。
// Windows AVI playerpavi.cpp
#include
#include
#include
#include
#include
#include
#include
#include"pavi.h"
HINSTANCE g_hinst;
HWND g_hwndMCIWnd;
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
char*szWinName=Win95Main"; //winclass nameint WINAPI
WinMain(HINSTANCE hThisInst,HINSTANCE hPrevInst,PSTR pszCmdLine,int
nCmdShow)
HWND hwnd;
MSG uMsg;
WNDCLASS wndclass;
HACCEL hAccel;
// define windows class
wndclass.style=0;
wndclass.lpfnWndProc=WndProc;
wndclass.cbClsExtra=0;
wndclass.cbWndExtra=0;
wndclass.hInstance=hThisInst;
wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);
wndclass.hbrBackground=GetStockObject(WHITE_BRUSH);
wndclass.lpszMenuName=SampleMenu";
wndclass.lpszClassName=szWinName;
g_hinst=hThisInst;
//register windows class
RegisterClass(&wndclass);
//create window hwnd=CreateWindow(szWinName,Windows Multimedia
Player",WS_OVERLAPPEDWINDOW|WS_VSCROLL|WS_HSCROLL,
CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,
CW_USEDEFAULT,HWND_DESKTOP,NULL,hThisInst,NULL);
//加载加速键表
hAccel=LoadAccelerators(hThisInst,SampleMenu");
// display window
ShowWindow(hwnd,nCmdShow);
UpdateWindow(hwnd);
// process message looply
while(GetMessage(&
g,NULL,0,0)){
if(!TranslateAccelerator(hwnd,hAccel,&uMsg))
{
TranslateMessage(&uMsg);
DispatchMessage(&uMsg);
}
}
return uMsg.wParam;
}
//主窗口函数,处理各种消息,由WINDOW调用LRESULT CALLBACK
WndProc(HWND hwnd,UINT message, WPARAM wParam,LPARAM lParam)
{
switch(message){
case WM_COMMAND:
switch(wParam){
case IDM_CREATEMCIWND: //创建一具有工具栏的可见MCI子窗口
g_hwndMCIWnd=MCIWndCreate(hwnd,g_hinst,
WS_CHILD|WS_VISIBLE|WS_CAPTION|MCIWNDF_SHOWALL,NULL);
break;
case IDM_EXIT:
MCIWndDestroy(g_hwndMCIWnd);
MessageBox(hwnd,退出程序",退出",MB_OK);
PostQuitMessage(0);
break;
case IDM_HELP:
MessageBox(hwnd,AVI Player\n\n1999.9.2\n\nBy Mr.Wangyi\n",帮助
",MB_OK); break;
}
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd,message,wParam,lParam);
}
return 0;
}
//资源描述文件pavi.rc
#include
#includepavi.h"
SampleMenu MENU
{
POPUP多媒体(&M)"
{
MENUITEM创建MCI窗口(&R)\t CTRL+R",DM_CREATEMCIWND MENUITEM退出(&
X)",IDM_EXIT
}
MENUITEM帮助(&H)",IDM_HELP
}
SampleMenu ACCELERATORS
}
X",IDM_EXIT,ALT
R",IDM_CREATEMCIWND,ALT
VK_F1,IDM_HELP,VIRTKEY
}
//头文件pavi.h
#define IDM_CREATEMCIWND 101
#define IDM_HELP 102
#define IDM_EXIT 103
龙丘居士亦可怜
谈空说有夜不眠
忽闻河东师子吼
拄杖落手心茫然