⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mp4.cpp

📁 MP4源代码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// 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 + -