c语言做的播放器源码.zip
资源内容介绍
c语言做的播放器源码.zip #include "stdafx.h"#include <windows.h>#include <windowsx.h>#include <stdlib.h>#include <time.h>//用到了time函数,所以要有这个头文件#include <commdlg.h>#include <mmsystem.h> // mciSengString函数调用需要先调用#include <mmsystem.h>#include <commctrl.h> // TBM_SETPOS头文件#include "resource.h"#include "MainDlg.h"#include <shellapi.h>//有关系统托盘的头文件#define WM_HIDE WM_USER+100 //定制自己的消息ID。//为了防止用户定义的消息ID与系统的消息ID冲突//MS(Microsoft)定义了一个宏WM_USER,小于WM_USER的ID被系统使用,大于WM_USER的ID被用户使用。 #define ORDER 0 //顺序播放#define SINGLELOOP 1 //单曲循环#define LISTLOOP 2 //列表循环#define RANDOM 3 //随机播放void Main_OnHScroll(HWND hwnd, HWND hwndCtl, UINT code, int pos); //声明滑块函数// 全局变量定义TCHAR szFileNamePath[256][MAX_PATH]; //歌曲的完全路径,二维数组 Path(路径)TCHAR szFileName[256][MAX_PATH]; // 歌曲名TCHAR shortName[256]; //歌曲的短路径名int num; //正在播放歌曲的序号int offset = 0; //打开歌曲时记录歌曲的编号,为了多次打开时编号能连续,所以设为全局变量int count = 0; //为列表中的歌曲添加序号int playStatus = 1; // 当前歌曲播放状态,1 表示正在播放状态,0 表示暂停状态int minite; // 曲目播放时间,分int second; // 曲目播放时间,秒long allLength;//这是什么?long curLength;// curLength = atoi(curTime);//这是但前时间的字符串转化为INT型TCHAR strTime[256] = ""; // 曲目播放当前时间TCHAR strTimeAll[256] = ""; // 曲目总时间TCHAR curTime[256] = "";// 这是什么?int mode = ORDER;// 这是什么?int n;// 这是什么?// 函数原型void addFiles(HWND hwnd); // 添加歌曲void playMusic(HWND hwnd); // 播放歌曲void pauseMusic(HWND hwnd); // 暂停播放void stopPlay(HWND hwnd); // 停止播放当前正在播放的歌曲void playLast(HWND hwnd); // 播放上一曲void playNext(HWND hwnd); // 播放下一曲void autoNext(HWND hwnd); //自动播放下一曲void silence(HWND hwnd); // 静音void getAllTime(HWND hwnd); // 得到歌曲总时间void deleteAll(HWND hwnd); // 移除所有曲目void deleteSel(HWND hwnd); // 移除选中曲目void getSongMessage(HWND hwnd);// 获取曲目详细信息??////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////******* 此函数需要现在初始化对话框中定义TimerProc!!!如:SetTimer(hwnd,1,1000,TimerProc); *************//////VOID CALLBACK TimerProc (HWND hwnd, UINT message, UINT iTimerID, DWORD dwTime) //IDC_EDITSYST编辑框中在显示系统时间{SYSTEMTIME stLocal; //系统当前时间TCHAR time[256]; //定义time数组来保存需要在IDC_EDITSYST编辑框中显示的内容GetLocalTime(&stLocal);//得到系统当前时间的指针wsprintf(time,"%d年%d月%d日 %d:%d:%d",stLocal.wYear,stLocal.wMonth,stLocal.wDay,stLocal.wHour,stLocal.wMinute,stLocal.wSecond);//将“”中内容拷贝到time数组中SetDlgItemText(hwnd,IDC_EDITSYST,time);//将time数组内容打印到IDC_EDITSYST编辑框中}///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 此函数需要现在初始化对话框中定义curTimePro!!!如:SetTimer(hwnd, 0, 1000, curTimePro); /////// void CALLBACK curTimePro(HWND hwnd, UINT message, UINT iTemerID, DWORD dwTime)// 回调函数,读取当前播放时间,设置滑动条的当前值{TCHAR str[256];wsprintf(str, "status %s position", shortName);//int wsprintf( LPTSTR lpOut, 输出缓冲区,最大为1024字节 LPCTSTR lpFmt, 格式字符串 ... 需输出的参数;)mciSendString(str, curTime, sizeof(curTime)/sizeof(TCHAR), NULL);//mciSendString(“play ***”,"",0,NULL);curLength = atoi(curTime);minite = curLength / 60000;//定义时间中 “分”的由来second = (curLength / 1000) % 60;//定义时间中 “秒”的由来wsprintf(strTime, "%.2d:%.2d", minite, second);// 曲目播放当前时间 的确定SetDlgItemText(hwnd, IDC_EDITTIME, strTime);//将当前播放时间打印到IDC_EDITTIME中// 设置滑块的最大值,最小值以及当时位置HWND hwSlider = GetDlgItem(hwnd, IDC_SLIDER);//IDC_SLIDER的句柄定义为hwSliderSendMessage(hwSlider, TBM_SETRANGEMAX, (WPARAM)TRUE, allLength);//TBM_SETRANGEMAX:设置滑块逻辑位置的最大值,及是否重画SendMessage(hwSlider, TBM_SETRANGEMIN, (WPARAM)TRUE, 0);//TBM_SETRANGEMIN:设置滑块逻辑位置的最小值,及是否重画SendMessage(hwSlider, TBM_SETPOS, (WPARAM)TRUE, curLength);//TBM_SETPOS:设置滑块的逻辑位置,及是否重画TCHAR szCommand[MAX_PATH+10];TCHAR szReturn[MAX_PATH];ZeroMemory(szCommand, sizeof(szCommand)/sizeof(TCHAR));//C语言中声明一个结构体变量之后,在使用这个变量之前要首先用memset来把各个位清零。使用C语言内置的函数memset来完成://memset(&s1,sizeof(s1),0);//在这里我们使用ZeroMemory“函数”,ZeroMemory其实并不是函数,其实是memset的宏定义//ZeroMemory其实就是memset,纸老虎而已,不是一个全新的函数。wsprintf(szCommand, TEXT("status %s mode"), shortName);mciSendString(szCommand, szReturn, sizeof(szReturn)/sizeof(TCHAR), NULL);//***********************************下面的函数功能会和IDC_STOP点击函数冲突!!!***************************************////strcmp速度快但是代码多;lstrcmp速度慢但精简,其实也就慢那么一丁丁丁丁点啦 推荐使用lstrcmp//lstrcmp字符串对比,本语句含义是:当szReturn==stopped时自动播放下一曲if (0 == lstrcmp(szReturn, TEXT("stopped"))){autoNext(hwnd);}}///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 此函数需要现在初始化对话框中定义TimerProc1!!!如:SetTimer(hwnd,2,1000,TimerProc1); ///////VOID CALLBACK TimerProc1(HWND hwnd, UINT message, UINT iTimerID, DWORD dwTime) //IDC_EDITSYST编辑框中在显示系统时间{SYSTEMTIME stLocal; //系统当前时间GetLocalTime(&stLocal);//得到系统当前时间的指针TCHAR STR1[256],STR2[256];int hour,minute;GetDlgItemText(hwnd,IDC_EDIT1,STR1,sizeof(STR1));GetDlgItemText(hwnd,IDC_EDIT2,STR2,sizeof(STR2));hour = atoi(STR1);minute = atoi(STR2);if(hour == stLocal.wHour&&minute == stLocal.wMinute){HWND hwList = GetDlgItem(hwnd,IDC_LIST1);TCHAR str1[256],str2[256];ListBox_GetText(hwList,0,str1);wsprintf(str2,"play %s",str1);mciSendString(str2,"",0,NULL);}}//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////*****************************************最下化到系统托盘问题*************************************************//////************