使用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_VSCROLL或WM_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);

mciSendString用法的更多相关文章

  1. EditText 基本用法

    title: EditText 基本用法 tags: EditText,编辑框,输入框 --- EditText介绍: EditText 在开发中也是经常用到的控件,也是一个比较必要的组件,可以说它是 ...

  2. jquery插件的用法之cookie 插件

    一.使用cookie 插件 插件官方网站下载地址:http://plugins.jquery.com/cookie/ cookie 插件的用法比较简单,直接粘贴下面代码示例: //生成一个cookie ...

  3. Java中的Socket的用法

                                   Java中的Socket的用法 Java中的Socket分为普通的Socket和NioSocket. 普通Socket的用法 Java中的 ...

  4. [转载]C#中MessageBox.Show用法以及VB.NET中MsgBox用法

    一.C#中MessageBox.Show用法 MessageBox.Show (String) 显示具有指定文本的消息框. 由 .NET Compact Framework 支持. MessageBo ...

  5. python enumerate 用法

    A new built-in function, enumerate() , will make certain loops a bit clearer. enumerate(thing) , whe ...

  6. [转载]Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法总结

    本文对Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法进行了详细的总结,需要的朋友可以参考下,希望对大家有所帮助. 详细解读Jquery各Ajax函数: ...

  7. 【JavaScript】innerHTML、innerText和outerHTML的用法区别

    用法: <div id="test">   <span style="color:red">test1</span> tes ...

  8. chattr用法

    [root@localhost tmp]# umask 0022 一.chattr用法 1.创建空文件attrtest,然后删除,提示无法删除,因为有隐藏文件 [root@localhost tmp] ...

  9. 萌新笔记——vim命令“=”、“d”、“y”的用法(结合光标移动命令,一些场合会非常方便)

    vim有许多命令,网上搜有一堆贴子.文章列举出各种功能的命令. 对于"="."d"."y",我在无意中发现了它们所具有的相同的一些用法,先举 ...

随机推荐

  1. Manifest merger failed : uses-sdk:minSdkVersion 9 cannot be smaller than version 10 declared in library

    Error:Execution failed for task ':app:processDebugManifest'. > Manifest merger failed : uses-sdk: ...

  2. 关于const限定符

    1.  指向非常量数据的非常量指针 具有最高的数据访问极限 .不包含const关键字. 2. 指向常量数据的非常量指针 指针可以被改写,使其指向相应类型的任何数据项, 但是它所指向的数据项的值是不能被 ...

  3. linux下实现两人、三人无序对话功能

    序:引子 对话功能实际上就是利用管道见得通信.最原始的是一方发另一方收,不能进项交互,发送方的代码如下: /*============================================ ...

  4. 【Chromium中文文档】OS X 沙箱设计

    OS X 沙箱设计 转载请注明出处:https://ahangchen.gitbooks.io/chromium_doc_zh/content/zh//General_Architecture/OSX ...

  5. Android04-UI01常用控件

    1.常见控件的使用: TextView Button EditText ImageView   1.TextView <TextView android:id="@+id/text_v ...

  6. linux arp攻击解决方法 测试很有效

    公司有台centos服务器中了arp攻击,严重影响业务,测试了很多方法都没解决,机房技术也没法处理. 通过下面方法,可以有效抵挡arp攻击.   1.环境 centos6.4   2.执行 arpin ...

  7. USB_OTG_study

    1 USB OTG的工作原理 OTG补充规范对USB 2.0的最重要的扩展,是其更具节能性的电源管理和允许设备以主机和外设两种形式工作.OTG有两种设备类型:两用OTG设备(Dualrole devi ...

  8. 使用kd-tree加速k-means

    0.目录 前置知识 思路介绍 详述 1 确定h的中心点 2 算法步骤 java实现 1.前置知识 本文内容基于<Accelerating exact k-means algorithms wit ...

  9. Spring、实例化Bean的三种方法

    1.使用类构造器进行实例化 <bean id="personIService" class="cn.server.impl.PersonServiceImpl&qu ...

  10. Android UI SurfaceView的使用-绘制单个图型或多个图形

    新建MyView类继承自SurfaceView: public class MyView extends SurfaceView implements SurfaceHolder.Callback { ...