问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

急求一个用MCI设计的数字视频播放器!

发布网友 发布时间:2022-05-02 01:50

我来回答

2个回答

热心网友 时间:2022-06-26 12:10

#include <MMSystem.h>
#include <Vfw.h>
#include <shlobj.H>

#pragma comment(lib, "winmm.lib")
#pragma comment(lib, "Vfw32.lib")
#define AudioStereo 0
#define AudioLeft 1
#define AudioRight 2
WNDPROC OldProc;

LPSTR GetDriverID(LPSTR ff);
bool OpenMusic(LPSTR FileName,HWND hWnd);
bool PlayMusic();
long GetMusicLength();
bool PutToWindow(RECT rc);
long GetMusicPos();
bool SetMusicPos(long Position);
bool PauseMusic();
bool CloseMusic();
bool SetAudioSource(int AudioSource);
bool PlayFullScreen();
bool SetVolume(int Volume);
bool SetSpeed(int Speed);
bool SetAudioOnOff(bool AudioOff);
bool SetWindowShow(bool WindowOff);
bool IsPlaying();
HWND GetWindowHandle();
MCIDEVICEID GetDeviceID();
LRESULT CALLBACK MCIWindowProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam);
bool ShowOpenSave(LPSTR FileName,bool OpenOrSave,HWND hWnd);
bool SavePicture(LPSTR FileName,HWND hWnd);
/*'======================================================*\
'根据文件名,确定设备
\'=======================================================*/
LPSTR GetDriverID(LPSTR ff)
{
char aa[3];
int i;
char bb[3];
int lenff=strlen(ff);
for(i=0;i<3;i++){
aa[i]=ff[lenff-3+i];
if(aa[i]>=97||aa[i]<=122)aa[i]-=32;
}
aa[3]=0;
strcpy(bb,"MID");
if(strcmp(aa,bb)==0)return "Sequencer";
strcpy(bb,"RMI");
if(strcmp(aa,bb)==0)return "Sequencer";
strcpy(bb,"IDI");
if(strcmp(aa,bb)==0)return "Sequencer";
strcpy(bb,"WAV");
if(strcmp(aa,bb)==0)return "Waveaudio";
return "MPEGVideo";
}
//=======================================================
//打开MCI设备,FILENAME为文件名,传值代表成功与否
//=======================================================
bool OpenMusic(LPSTR FileName,HWND hWnd=NULL)
{
CloseMusic();
CString ShortPathName;
CString tmpStr=FileName;
if(tmpStr.Left(7)=="http://")
ShortPathName=FileName;
else
GetShortPathName(FileName,
ShortPathName.GetBuffer(0), 255);
// MessageBox(NULL,ShortPathName.GetBuffer(0),"",MB_OK);
char *DrvID=GetDriverID(ShortPathName.GetBuffer(0));
CString lpstrCommand;
lpstrCommand.Format("open %s type %s alias NOWMUSIC",
ShortPathName.GetBuffer(0), DrvID);
if(strcmp(DrvID,"MPEGVideo")>=0)
{
if(hWnd!=NULL)
lpstrCommand.Format("open %s type %s alias NOWMUSIC parent %d style child",
ShortPathName.GetBuffer(0), DrvID,(int)hWnd);
else lpstrCommand+=" style overlapped ";}
if(mciSendString(lpstrCommand.GetBuffer(0),NULL,0,0)==0)
{
OldProc=(WNDPROC)GetWindowLong(GetWindowHandle(),GWL_WNDPROC);
SetWindowLong(GetWindowHandle(),GWL_WNDPROC,(long)MCIWindowProc);
return true;
}
return false;
}
//=======================================================
//关闭MCI设备,FILENAME为文件名,传值代表成功与否
//=======================================================
bool CloseMusic()
{
if(mciSendString("close NOWMUSIC", NULL, 0, 0)==0)
return true;
else return false;
}
//'======================================================
//'播放文件
//'======================================================
bool PlayMusic()
{
if(mciSendString("play NOWMUSIC", NULL, 0, 0)==0)
return true;
else return false;

}
//'======================================================
//'获取媒体的长度
//'======================================================
long GetMusicLength()
{
char RefStr[80];
mciSendString("status NOWMUSIC length", RefStr, 80, 0);
return atol(RefStr);
}
//'======================================================
//'添充画面
//'======================================================
bool PutToWindow(RECT rc)
{
CString lpstrCommand;
lpstrCommand.Format("put NOWMUSIC window at %d %d %d %d",
rc.left,rc.top,rc.right-rc.left,rc.bottom-rc.top);
if(mciSendString(lpstrCommand.GetBuffer(0),NULL,0,0)==0)
return true;
else return false;
}
//'======================================================
//'获取当前播放进度
//'======================================================
long GetMusicPos()
{
char RefStr[80];
mciSendString("status NOWMUSIC position", RefStr, 80, 0);
return atol(RefStr);
}
//'======================================================
//'设置媒体的当前进度
//'======================================================
bool SetMusicPos(long Position)
{
CString lpstrCommand;
lpstrCommand.Format("seek NOWMUSIC to %d",
Position);
if(mciSendString(lpstrCommand.GetBuffer(0),NULL,0,0)==0)
return true;
else return false;
}
//'======================================================
//'暂停播放
//'======================================================
bool PauseMusic()
{
if(mciSendString("pause NOWMUSIC", NULL, 0, 0)==0)
return true;
else return false;
}
//'======================================================
//'设置声道
//'======================================================
bool SetAudioSource(int AudioSource)
{
CString lpstrCommand;
lpstrCommand="setaudio NOWMUSIC source to ";
switch(AudioSource){
case AudioStereo:
lpstrCommand+="stereo";
break;
case AudioLeft:
lpstrCommand+="left";
break;
case AudioRight:
lpstrCommand+="right";
break;
}
if(mciSendString(lpstrCommand.GetBuffer(0),NULL,0,0)==0)
return true;
else return false;
}
//'======================================================
//'全屏播放
//'======================================================
bool PlayFullScreen()
{
if(mciSendString("play NOWMUSIC fullscreen", NULL, 0, 0)==0)
return true;
else return false;
}
//'=====================================================
//'设置声音大小1-1000
//'=====================================================
bool SetVolume(int Volume)
{
CString lpstrCommand;
lpstrCommand.Format("setaudio NOWMUSIC volume to %d",
Volume);
if(mciSendString(lpstrCommand.GetBuffer(0),NULL,0,0)==0)
return true;
else return false;
}
//'=====================================================
//'设置播放速度1-2000
//'=====================================================
bool SetSpeed(int Speed)
{
CString lpstrCommand;
lpstrCommand.Format("set NOWMUSIC speed %d",
Speed);
if(mciSendString(lpstrCommand.GetBuffer(0),NULL,0,0)==0)
return true;
else return false;
}
//'====================================================
//'静音True为静音,FALSE为取消静音
//'====================================================
bool SetAudioOnOff(bool AudioOff)
{
if(AudioOff){
if(mciSendString("setaudio NOWMUSIC off",NULL,0,0)==0)
return true;
}
else{
if(mciSendString("setaudio NOWMUSIC on",NULL,0,0)==0)
return true;
}
return false;
}
//'====================================================
//'是否有画面True为有,FALSE为取消
//'====================================================
bool SetWindowShow(bool WindowOff)
{
if(WindowOff){
if(mciSendString("window NOWMUSIC state show",NULL,0,0)==0)
return true;
}
else{
if(mciSendString("window NOWMUSIC state hide",NULL,0,0)==0)
return true;
}
return false;
}
//'====================================================
//'获得当前媒体的状态是不是在播放
//'====================================================
bool IsPlaying()
{
// char RefStr[10];
CString RefStr;
if(mciSendString("status NOWMUSIC mode",
RefStr.GetBuffer(10), 10, 0)==0)
{
if(RefStr.Find("playing")>=0||
RefStr.Find("播放")>=0)
return true;
}
return false;
}
//'====================================================
//'获得播放窗口的handle
//'====================================================
HWND GetWindowHandle()
{
char RefStr[80];
mciSendString("status NOWMUSIC window handle", RefStr, 80, 0);
return (HWND)atol(RefStr);
}
//'====================================================
//'获取DeviceID
//'====================================================
MCIDEVICEID GetDeviceID()
{
return mciGetDeviceID("NOWMUSIC");
}
//'====================================================
//'处理窗口事件
//'====================================================
LRESULT CALLBACK MCIWindowProc(HWND hWnd,UINT message,
WPARAM wParam,LPARAM lParam)
{

// HDC hdc;
int wmId;

switch (message)
{
case WM_COMMAND:
wmId = LOWORD(wParam);
//MessageBox(NULL,"OK","sd",MB_OK);
/*switch(wmId)
{
default:
break;
}//*/
break;
case WM_LBUTTONUP:
return 0;
break;
case WM_RBUTTONUP:
POINT pt;

GetCursorPos(&pt);
break;
case WM_PAINT:

break;

default:
break;
}
return CallWindowProc(OldProc,hWnd,
message,wParam,lParam);

}

这些都是没用类的,直接用的MCI API,这玩意不用必须把它集合成类吧。

参考资料:来源于月光软件站

热心网友 时间:2022-06-26 12:10

看看这里吧,有源代码可以下载直接使用:

http://www.codeproject.com/KB/audio-video/hmediaplayer.aspx
http://www.codeproject.com/KB/cpp/media_player.aspx
http://www.codeproject.com/KB/cpp/Media_PlayerByyazan_nemer.aspx

用邮箱注册一下就可以下载了。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
纯种萨摩和不纯的萨摩的区别 不是纯种萨摩,长大成型后和纯种萨摩外表一样吗 学播音主持和配音哪个更赚钱,各有各的长处 学播音真的能改变声音吗,会让自己的普通话更加标准 学习播音和配音的作用,可以提升自信和气质 普通人学配音有没有用,有兴趣则有用 什么是永诚财产保险股份有限公司 win10电脑升级不了ie11win10怎么升级ie11 电脑硬件保修哪些电脑硬件保修包括什么 电脑固态硬盘质保几年一般的电脑保修时间是多久 怎样把XXX.cpp文件编译进XXX.dll文件里? 时尚圈流行的轻熟风穿搭,既温柔又有女人味,应该怎样搭配才好看呢? 网络封包分析工具EG+CCP+WPE 3个软件的具体名称叫什么 女孩子有哪些舒服又好看的穿搭?你有什么时尚又靠谱的穿搭建议吗? EVE游戏中的各种声音文件在那个文件夹里? 要是我现在想要选一款合适的流量卡套餐的话,哪一个会更好? CCP是什么软件? 日常的基础款式既保暖又好看时尚的穿搭有哪些?有人简要地介绍一下吗? 如何来分析oracle 11g grid infrastructure root.sh 执行错误诊断 我想问淘宝上卖10块钱衣服还包邮的,是怎么挣钱呀 qq邮件乱码 我买的衣服上面说包邮,客服说过年物流涨价,多问我要了十块钱咋办? 打篮球怎样提升身体素质 淘宝上那些10元左右还包邮的衣服,质量怎样?能穿吗。 打篮球。怎么提高自己的身体素质?怎么锻炼? 淘宝里8元的衣服还包邮是真的吗 喜欢打篮球,身体素质不太好,如何正确训练? 在淘宝上买的衣服包邮价格是38(有退货保险),我要求退货,但是卖家不退原价怎么办? 淘宝上店家9.9,6.6等卖的衣服还包邮是真的还是假的? 为什么在淘宝买衣服选择包邮很多衣服就没有了? 如何把project转换成ccpproject EVE同一台电脑2个账号怎么都要单独设置总览和窗口,单独账号CCP文件包备份我会了, 基础的日常穿搭怎么搭配才会更加时尚好看? 夏天时尚姐妹漂亮穿搭,轻松赚回头率,到底应该怎么搭配? 请问,有没有可以提取加载EVE玩家设置的软件啊? MFC在ccp怎么声明.h文件 简单时尚的夏日穿搭,休闲百搭显气质,你觉得好看吗? 布鲁斯口琴G调和A调比较,那个常用 邻家小妹的穿搭风格有哪些?怎么穿搭更时尚好看?怎么能穿出可爱风格? G调的布鲁斯口琴好吗? 安庆有什么特色菜吗? 布鲁斯g调口琴怎么吹啊?我是新手,不晓得怎么用 索尼18-105镜头的画质怎么样,拍人像挂这个头没问题吧,虽然有个e50 安徽安庆人喜欢什么口味的菜 口琴分G调什么的吗? 18105vr镜头适合拍什么 吉林省60岁以上老人补贴政策 G调布鲁斯口琴标准&quot;Richter&quot;音阶 g调口琴音阶图 俄罗斯产的伏特加和中国的白酒,究竟有什么区别?