您的位置
 
 

自己编写AVT播放程序

  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 player——pavi.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(&uMsg,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

  #include“pavi.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

作者:王毅