📄 mp4.cpp
字号:
// MP4.cpp : Defines the entry point for the console application.
//
// NewMp3.cpp : Defines the entry point for the application.
//
#include "stdafx.h"
#include "GWT.h"
#include "GWTspirit.h"//classes definition for vc++
#include "io.h"
#include "direct.h"
#include <commdlg.h>
#include "iostream"
#include "fstream"
#include "string"
using namespace std;
//IMPORTANT!全局歌曲控制变量
int filMaxId=-1;//当前加载的歌曲量
int filCocId=0;//当前选中的歌曲ID
int plyMod=1;//1循环播放 2单曲重复 3随机重复
int state=0;//0停止 1播放当前 2暂停 3上一曲 4下一曲 5减小音量 6增加音量
char ArtistPath[MAX_PATH];//其实是一个PathBuffer,谁都可以随时用,改动
char nowPath[MAX_PATH];//当前程序所在路径,在main中由argc[0]获取的。
bool haveArtistJpg=false;//是否有演唱者图像
bool paused=false;//歌曲是否暂停过(为控制歌词与歌曲时间同步而设置的)
bool haveLrc=false;//是否有歌词
bool fisTim=true;//是否首次播放
//*********
OPENFILENAME ofn;
char szFile[255];
int voc=500;//初始化音量
int picMovSpd=10;//初始化动画图片移动速度
MUSIC music[100];//MUSIC类。允许添加最多100首歌曲
MP3INFO aMp3;//MP3信息类
LRCPLAYER aLrc;//MP3歌词类
bool iconic=false;//窗口是否最小化
HWND myHwnd;//窗口句柄
MOUSEMSG mouse;//鼠标消息
PIMAGE imgBg1,imgBg2,imgBg3,imgArtist;
void DataInit();//数据初始化
void GMain();//主函数循环
void GetAFile();//由用户选择文件函数
void SowSysMsg();//ShowSystemMessage
void Ext();//Exit
void ShowWcm();//ShowWelcom
void Settings();//设置
void CALLBACK AtoNxtFil(HWND hwnd,UINT nMsg,UINT nTimerid,DWORD dwTime);//定时器:AutoNextFile
void SowAllFil(PIMAGE dest);//ShowAllFile
void SowCocFil(PIMAGE dest);//ShowCurrentChoseFile
void SetMyWindowTitle(string fis,string las);//SetWindowTitle
void ArtistPicInit();//初始化演唱者图片
void ShowLrc(PIMAGE dest);//显示歌词函数
int main(int argc, char* argv[])
{
string pathBuf=argv[0];
pathBuf=pathBuf.erase(pathBuf.find("MP4.exe"));//返回当前路径
sprintf(nowPath,"%s",pathBuf.c_str());
pathBuf.~string();//删除
GViewInit(GW_NORMAL,600,350);
DataInit();
GMain();
GViewDestroy();
return 0;
}
void DataInit()
{
randomize();
myHwnd=GetHWnd();
EnableMenuItem(GetSystemMenu(myHwnd, 0), SC_CLOSE, MF_BYCOMMAND | MF_GRAYED);//关闭按钮失效
ZeroMemory(&ofn,sizeof(ofn));
ofn.lStructSize = sizeof(ofn);
ofn.lpstrFile = szFile;
ofn.lpstrFile[0] = TEXT('\0');
ofn.nMaxFile = sizeof(szFile);
ofn.lpstrFilter = TEXT("MP3\0*.MP3\0WAV\0*.WAV\0MPEG\0*.MPEG\0AVI\0*.AVI\0");
ofn.nFilterIndex = 1;
ofn.lpstrFileTitle = NULL;
ofn.nMaxFileTitle = 0;
ofn.lpstrInitialDir = NULL;
ofn.lpstrTitle="对不起,未添加数组以支持多选,请等待下一个版本!!";
ofn.hwndOwner = myHwnd;
ofn.Flags = OFN_EXPLORER |OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST ;
imgBg1=new IMAGE(getwidth(),getheight());
imgBg2=new IMAGE(getwidth(),getheight());
imgBg3=new IMAGE(getwidth(),getheight());
imgArtist=new IMAGE;
sprintf(ArtistPath,"%sMP4\\bgdef.jpg",nowPath);
getimage(imgBg1,ArtistPath);
*imgBg1=GImageAdaptWindow(imgBg1);
sprintf(ArtistPath,"%sMP4\\bg.jpg",nowPath);
getimage(imgBg2,ArtistPath);
*imgBg2=GImageAdaptWindow(imgBg2);
setfont(16,0,"宋体");
setfont(16,0,"宋体",imgBg3);
setbkmode(TRANSPARENT,imgBg3);
setbkmode(TRANSPARENT,imgBg3);
setbkmode(TRANSPARENT);
setcolor(LIGHTCYAN);
}
void CALLBACK AtoWindowSet(HWND hwnd,UINT nMsg,UINT nTimerid,DWORD dwTime)
{
iconic=IsIconic(myHwnd);
}
void CALLBACK AtoNxtFil(HWND hwnd,UINT nMsg,UINT nTimerid,DWORD dwTime)//判断歌曲是否播完,播完则下一曲,state仅有此获得
{
static int statebuf=0;//使state状态不变则定时器不做无效空转浪费cpu
if(state==1&&filMaxId>=0&&fisTim==false)//自动下一曲
if(music[filCocId].GetState()==0)
{
state=4;
statebuf=0;
}
if(state==1&&state!=statebuf)
{
music[filCocId].Play();
music[filCocId].SetVoice(voc);
SetMyWindowTitle(music[filCocId].GetFileName(2),"正在播放中");
if(!paused)haveLrc=aLrc.InitLrc(music[filCocId].GetFileName());
if(paused&&haveLrc)aLrc.LrcContinue();
aMp3.Init(music[filCocId].GetFileName(1));
ArtistPicInit();
statebuf=state=1;
fisTim=false;
paused=false;
}
else if(state==2&&state!=statebuf)
{
if(filMaxId>=0)
{
SetMyWindowTitle(music[filCocId].GetFileName(2),"歌曲被暂停");
music[filCocId].Pause();
if(haveLrc)aLrc.LrcPause();
statebuf=state=2;
paused=true;
}
}
else if(state==0&&state!=statebuf)
{
if(filMaxId>=0)
{
SetMyWindowTitle(music[filCocId].GetFileName(2),"歌曲被终止");
music[filCocId].Stop();
statebuf=state=0;
}
}
else if(state==3&&state!=statebuf)
{
if(filMaxId>=0)
{
if(music[filCocId].GetState())music[filCocId].Stop();
switch(plyMod)
{
case 1://循环播放
if(filCocId<=0)
filCocId=filMaxId;
else
--filCocId;
break;
case 2://单曲重复
break;
case 3:
if(filMaxId)filCocId=random(filMaxId);
break;
}
SetMyWindowTitle(music[filCocId].GetFileName(2),"正播放中");
music[filCocId].Play();
music[filCocId].SetVoice(voc);
haveLrc=aLrc.InitLrc(music[filCocId].GetFileName());
aMp3.Init(music[filCocId].GetFileName(1));
ArtistPicInit();
statebuf=state=1;
fisTim=false;
paused=false;
}
}
else if(state==4&&state!=statebuf)
{
if(filMaxId>=0)
{
if(music[filCocId].GetState())music[filCocId].Stop();
switch(plyMod)
{
case 1://循环播放
if(filCocId>=filMaxId)
filCocId=0;
else
++filCocId;
break;
case 2://单曲重复
break;
case 3:
if(filMaxId)filCocId=random(filMaxId);
break;
}
SetMyWindowTitle(music[filCocId].GetFileName(2),"正播放中");
music[filCocId].Play();
music[filCocId].SetVoice(voc);
haveLrc=aLrc.InitLrc(music[filCocId].GetFileName());
aMp3.Init(music[filCocId].GetFileName(1));
ArtistPicInit();
statebuf=state=1;
fisTim=false;
paused=false;
}
}
else if(state==5&&state!=statebuf)
{
music[filCocId].SetVoice(voc);
state=statebuf=music[filCocId].GetState();
}
else if(state==6&&state!=statebuf)
{
music[filCocId].SetVoice(voc);
state=statebuf=music[filCocId].GetState();
}
}
void GMain()
{
ShowWcm();//显示欢迎
//创建按钮类(1句创建2句设置鼠标滑过状态颜色)
GBUTTON btnPlyCtl ("播 放",0,270,300,60,40); btnPlyCtl.SetText("播 放", btnPlyCtl.imgSkim, 0xca7788,WHITE);
GBUTTON btnNxtMus ("Next",1,330,300,60,40); btnNxtMus.SetText("Next", btnNxtMus.imgSkim, 0xca7788,WHITE);
GBUTTON btnLstMus ("Last",2,210,300,60,40); btnLstMus.SetText("Last", btnLstMus.imgSkim, 0xca7788,WHITE);
GBUTTON btnVocUpr ("音量+",3,390,300,60,40); btnVocUpr.SetText("音量+", btnVocUpr.imgSkim, 0xca7788,WHITE);
GBUTTON btnVocDnr ("音量-",4,150,300,60,40); btnVocDnr.SetText("音量-", btnVocDnr.imgSkim, 0xca7788,WHITE);
GBUTTON btnFilAdd ("添加歌曲",5,75,300,75,40); btnFilAdd.SetText("添加歌曲", btnFilAdd.imgSkim, 0xca7788,WHITE);
GBUTTON btnHlp ("系统说明",6,450,300,75,40); btnHlp.SetText ("系统说明", btnHlp.imgSkim, 0xca7788,WHITE);
GBUTTON btnExt ("退出",7,525,10,75,40); btnExt.SetText ("退出", btnExt.imgSkim, 0xca7788,WHITE);
GBUTTON btnSet ("系统设置",8,0,300,75,40); btnSet.SetText ("系统设置", btnSet.imgSkim, 0xca7788,WHITE);
GBUTTON btnFilMsg ("歌曲信息",9,525,300,75,40); btnFilMsg.SetText("歌曲信息", btnFilMsg.imgSkim, 0xca7788,WHITE);
LOGFONT myFont;
int buttonId=-1;
int rgtSowMsg=1;//1歌曲列表 2选中歌曲信息
SetTimer(myHwnd,1,500,AtoNxtFil);
SetTimer(myHwnd,2,1500,AtoWindowSet);
BeginBatchDraw();
while(1)
{
if(iconic)
{
getfont(&myFont);
setfont(30,0,"黑体");
Sleep(1000);
putimage(0,0,imgBg1);
setcolor(LIGHTBLUE);
outtextxy(GetMidPos(getwidth(),textwidth("退出休息状态中...")),150,"退出休息状态中...");
setfont(&myFont);
}
else
{
buttonId=-1;
//虚拟点击按钮消息处理
btnPlyCtl.Update (&mouse,&buttonId);
btnNxtMus.Update (&mouse,&buttonId);
btnLstMus.Update (&mouse,&buttonId);
btnVocUpr.Update (&mouse,&buttonId);
btnVocDnr.Update (&mouse,&buttonId);
btnFilAdd.Update (&mouse,&buttonId);
btnHlp.Update (&mouse,&buttonId);
btnExt.Update (&mouse,&buttonId);
btnSet.Update (&mouse,&buttonId);
btnFilMsg.Update (&mouse,&buttonId);
//缓冲区图像更新处理
putimage(imgBg3,0,0,imgBg2);//主图像逻辑更新
if(haveArtistJpg==true)putimage(imgBg3,GetMidPos(600,imgArtist->getwidth()),0,imgArtist);//显示演唱者
switch(buttonId)
{
case 0://人只能控制播放或暂停
if(filMaxId<0)break;
if(state==0)//若停止,则播放,显示“暂停”
{
state=1;
btnPlyCtl.SetText("暂 停", btnPlyCtl.imgNormal,0xca7788,WHITE);
btnPlyCtl.SetText("暂 停", btnPlyCtl.imgSkim, 0xca7788,WHITE);
}
else if(state==1)//如果播放,则暂停
{
state=2;
btnPlyCtl.SetText("播 放", btnPlyCtl.imgNormal,0xca7788,WHITE);
btnPlyCtl.SetText("播 放", btnPlyCtl.imgSkim, 0xca7788,WHITE);
}
else if(state==2)//暂停则播放
{
state=1;
btnPlyCtl.SetText("暂 停", btnPlyCtl.imgNormal,0xca7788,WHITE);
btnPlyCtl.SetText("暂 停", btnPlyCtl.imgSkim, 0xca7788,WHITE);
}
break;
case 1://filCocId变化,buttonId传入执行音乐器以下一曲
if(filMaxId<0)break;
state=4;
break;
case 2://filCocId变化,buttonId传入执行音乐器以上一曲
if(filMaxId<0)break;
state=3;
break;
case 3://增加音量
if(filMaxId<0)break;
if(voc<=1000)
{
voc+=random(40);
if(voc>1000)voc=1000;
state=6;
}
setcolor(LIGHTCYAN,imgBg3);
ShowIntegerWithString(100,60,"调节声音至",voc,imgBg3);
break;
case 4://减小音量
if(filMaxId<0)break;
if(voc>=0)
{
voc-=random(40);
if(voc<0)voc=0;
state=5;
}
setcolor(LIGHTRED,imgBg3);
ShowIntegerWithString(100,60,"调节声音至",voc,imgBg3);
break;
case 5:
GetAFile();;
break;
case 6:
SowSysMsg();
break;
case 7:
if(MessageBox(myHwnd,"确定退出?","Mp4温馨提醒",MB_YESNO)==IDYES)
Ext();
break;
case 8:
Settings();
break;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -