mciSendString用法
使用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用法的更多相关文章
- EditText 基本用法
title: EditText 基本用法 tags: EditText,编辑框,输入框 --- EditText介绍: EditText 在开发中也是经常用到的控件,也是一个比较必要的组件,可以说它是 ...
- jquery插件的用法之cookie 插件
一.使用cookie 插件 插件官方网站下载地址:http://plugins.jquery.com/cookie/ cookie 插件的用法比较简单,直接粘贴下面代码示例: //生成一个cookie ...
- Java中的Socket的用法
Java中的Socket的用法 Java中的Socket分为普通的Socket和NioSocket. 普通Socket的用法 Java中的 ...
- [转载]C#中MessageBox.Show用法以及VB.NET中MsgBox用法
一.C#中MessageBox.Show用法 MessageBox.Show (String) 显示具有指定文本的消息框. 由 .NET Compact Framework 支持. MessageBo ...
- python enumerate 用法
A new built-in function, enumerate() , will make certain loops a bit clearer. enumerate(thing) , whe ...
- [转载]Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法总结
本文对Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法进行了详细的总结,需要的朋友可以参考下,希望对大家有所帮助. 详细解读Jquery各Ajax函数: ...
- 【JavaScript】innerHTML、innerText和outerHTML的用法区别
用法: <div id="test"> <span style="color:red">test1</span> tes ...
- chattr用法
[root@localhost tmp]# umask 0022 一.chattr用法 1.创建空文件attrtest,然后删除,提示无法删除,因为有隐藏文件 [root@localhost tmp] ...
- 萌新笔记——vim命令“=”、“d”、“y”的用法(结合光标移动命令,一些场合会非常方便)
vim有许多命令,网上搜有一堆贴子.文章列举出各种功能的命令. 对于"="."d"."y",我在无意中发现了它们所具有的相同的一些用法,先举 ...
随机推荐
- java web每天定时执行任务(四步轻松搞定)
第一步: package com.eh.util; import java.util.Calendar; import java.util.Date; import java.util.Timer; ...
- liunx下NetworkManager导致网卡不能启动
前几天在客户现场,配置一台系统为redhat 6.0的服务器,这台服务器是IBM x3755,系统是预装的.在把服务器的IP地址配置完成后,使用命令不能启动网卡.提示:弹出界面 eht0:错误:激活链 ...
- jQuery学习-事件之绑定事件(五)
大家应该还记得dispatch方法中有这么一段代码: event = jQuery.event.fix( event ); event的修复是在fix这个方法中的,而在fix中是通过 new jQue ...
- GDI+简单现实文字旋转
原文 http://www.cnblogs.com/kaixiangbb/p/3301272.html 题记 入职新公司已快有两月了,试用期已快结束,项目却迟迟还未正式启动.安排给我的多是些琐事,一直 ...
- Struts2 多文件上传
Struts2多文件上传只需要将 单文件上传中的File变成File[] 即可,上篇文章:单文件上传 <form action="${pageContext.request.cont ...
- #include <sstream>
1 std::istringstream 2 std::stringstream 1 std::istringstream input 1 在一个字符串string里提取部分数据,这些数据以空格' ' ...
- 配置php中的Oracle扩展
window 1. 从 OTN Instant Client page下载windows客户端安装包,安装包的位数(32/64位)必须和你所使用的操作系统类型.php版本一致.解压安装包至C:\ins ...
- Java NIO——2 缓冲区
一.缓冲区基础 1.缓冲区并不是多线程安全的. 2.属性(容量.上界.位置.标记) capacity limit 第一个不能被读或写的元素 position 下一个要被读或写的元素索引 mark ...
- 开发汉澳即时通信网,2006年上线,QQ死期到了
为汉澳sinox用户打造即时通信网让大家用上即时通信软件 近期腾讯关闭了linuxQQ登录,汉澳 sinox也登陆不上.非windows用户再也不能用上即时通信软件了! 这是多么可悲的事,可是我们必须 ...
- 简单实现仿UITabBarController界面
第一步:添加两个占位View 第二步:添加子控制器 第三步:添加按钮 #import "ViewController.h" #define SCREEN_WIDTH ([UIScr ...