zoukankan      html  css  js  c++  java
  • mciSendString用法

    欢迎来我的个人网站:http://www.rxwcv.cn

         

    使用MCI API,源文件中需要包含头文件 Mmsystem.h,在Project->Settings->Link->Object/libray module中加入库 Winmm.lib。 VS2008在源文件加上#include "mmsystem.h"      #pragma comment(lib,"winmm.lib")

         mciSendString是用来播放多媒体文件的API指令,可以播放MPEG,AVI,WAV,MP3,等等,下面介绍一下它的使用方法:

      该函数有四个参数:
    第一个参数:要发送的命令字符串。字符串结构是:[命令][设备别名][命令参数].
    第二个参数:返回信息的缓冲区,为一指定了大小的字符串变量.
    第三个参数:缓冲区的大小,就是字符变量的长度.
    第四个参数:回调方式,一般设为零
    返回值:函数执行成功返回零,否则返回错误代码
    MCIERROR mciSendString(

          LPCTSTR lpszCommand,    //MCI命令字符串

          LPTSTR lpszReturnString, //存放反馈信息的缓冲区

          UINT  cchReturn,     //缓冲区的长度

          HANDLE hwndCallback    //回调窗口的句柄,一般为NULL

        ); //若成功则返回0,否则返回错误码。

      该函数返回的错误码可以用mciGetErrorString函数进行分析,该函数的声明为:

        BOOL mciGetErrorString(

          DWORD fdwError,   //函数mciSendString返回的错误码

          LPTSTR lpszErrorText, //接收描述错误的字符串的缓冲区

          UINT  cchErrorText  //缓冲区的长度

        );

      一,打开多媒体文件。
        首先在Dialog上面放一个Picture控件,MCISendString就在这个Picture控件的平面上播放多媒体文件,
    设Picture控件的ID为IDC_STATIC1:
    CStatic *pStatic=(CStatic*)GetDlgItem(IDC_STATIC1);HWND h=pStatic->GetSafeHwnd();
    CString open1;
    char buf[256];
    open1.Format("open f:""mpeg""mpeg1.avi type MPEGVideo Alias movie parent %u Style %u notify",              h,WS_CHILD);
    mciSendString(open1.GetBuffer(open1.GetLength()),buf,sizeof(buf),NULL);
    这样F盘下面的mpeg目录下的mpeg1.avi就打开了,其中的type MPEGVideo是指打开MPEG,AVI等类型,如果不加
    type MPEGVideo这一句,就是打开WAV,MP3等,Alias movie定义了mpeg1.avi的别名为movie,以后可以通过操
    做movie就可以操作mpeg1.avi。
        二,播放多媒体文件。
        上面我们已经打开了f:"mpeg"mpeg1.avi,现在我们来播放它:
    mciSendString("play movie",buf,sizeof(buf),NULL);
        如果想全屏播放:
    mciSendString("play movie fullscreen",buf,sizeof(buf),NULL);


    三,暂停播放。
    mciSendString("pause movie",buf,sizeof(buf),NULL);
        四,停止播放。
    mciSendString("close movie",buf,sizeof(buf),NULL);
        五,得到所播放文件的长度。
    char sPosition[256];long lLength;
    ciSendString("Status movie length", sPosition, 255,0);lLength=strtol(sPosition, NULL, 10);
    其中lLength就是所播放文件的长度。
        六,得到所播放文件的声音大小。
    char chVolume[256];long lVolume;mciSendString("status movie volume",chVolume,255,0);lVolume=strtol(chVolume,NULL,10);其中lVolume就是所播放文件的声音大小。
        七,到你指定的位置播放。
    CString step1;long lPosition;
    lPosition=100;
    step1.Format("seek movie to %ld",lPosition);
    mciSendString(step1.GetBuffer(step1.GetLength()),buf,sizeof(buf),0);
    其中lPosition就是要到的播放位置,可以由你指定。

    首先在初始化中,设定滑块的一些参数

     


    SendMessage(GetDlgItem(hwnd,IDC_SOUND_SLIDER),TBM_SETRANGEMIN,(WPARAM)TRUE,0);//
    设定最小值


    SendMessage(GetDlgItem(hwnd,IDC_SOUND_SLIDER),TBM_SETRANGEMAX,(WPARAM)TRUE,1000);//
    设定最大值


    SendMessage(GetDlgItem(hwnd,IDC_SOUND_SLIDER),TBM_SETPOS,(WPARAM)TRUE,0);//
    设定当前的滚动值


    SendMessage(GetDlgItem(hwnd,IDC_SOUND_SLIDER), TBM_SETPAGESIZE, 0, (LPARAM)100);//
    设置 PAGE UP or PAGE DOWN key的进度


    SendMessage(GetDlgItem(hwnd,IDC_SOUND_SLIDER), TBM_SETLINESIZE, 0, (LPARAM)100); //
    设置RIGHT ARROW or DOWN ARROW key的进度

     


    然后响应WM_VSCROLLWM_HSCROLL消息


    添加如下代码:


    if(LOWORD(wParam)==TB_THUMBPOSITION||LOWORD(wParam)==TB_LINEUP||LOWORD(wParam)==TB_LINEDOWN||


    LOWORD(wParam)==TB_PAGEDOWN||LOWORD(wParam)==TB_PAGEUP)


    {


    SetAudioVoice(hWnd);//
    写个设置声音的函数


    }//
    当然你可以逐个控制这些数值

     

     

    SetAudioVoice中:


    int volume=1000-(SendMessage(GetDlgItem(hWnd,IDC_SOUND_SLIDER),TBM_GETPOS,0,0));//
    由于我用的是垂直滑块,向上滚动

    滚动数值是减小的,所以我要想实现向上滚动增加音量,向下滚动减小音量,必须用滑块的最大值1000减去当前的滚动值


    最后是设置声音


    wsprintf(szVolume,"setaudio %s volume to %d",shortPath,volume);


    mciSendString(szVolume,"",0,NULL);

    欢迎来我的个人网站:http://www.rxwcv.cn
  • 相关阅读:
    虚拟化技术
    软件产业的知识经济 (蔡学墉)
    关于内存对齐
    Reverse Engineering
    [转]今天的操作系统 
    BasicBIOS & CMOS
    [bbk5355]第18集 Chapter 08 Handling Exceptions(01)
    [bbk1452]第1集 在Apache中使用SSL
    Linux>User Manager
    如何更新linux系统时间
  • 原文地址:https://www.cnblogs.com/Hewie/p/3434920.html
Copyright © 2011-2022 走看看