c语言做的播放器源码.zip
立即下载
资源介绍:
c语言做的播放器源码.zip
#include "stdafx.h"
#include
#include
#include
#include //用到了time函数,所以要有这个头文件
#include
#include // mciSengString函数调用需要先调用#include
#include // TBM_SETPOS头文件
#include "resource.h"
#include "MainDlg.h"
#include //有关系统托盘的头文件
#define WM_HIDE WM_USER+100
//定制自己的消息ID。
//为了防止用户定义的消息ID与系统的消息ID冲突
//MS(Microsoft)定义了一个宏WM_USER,小于WM_USER的ID被系统使用,大于WM_USER的ID被用户使用。
/* 【自学去】网站收集 http://www.zixue7.com */
#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的句柄定义为hwSlider
SendMessage(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);
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////*****************************************最下化到系统托盘问题*************************************************////
/* ypedef struct _NOTIFYICONDATAA {
DWORD cbSize; //结构体的大小,以字节为单位。
HWND hWnd; //窗口的句柄。标示的窗口用来接收与托盘图标相关的消息。
UINT uID; //应用程序定义的任务栏图标的标识符。
UINT uFlags; //此成员表明具体哪些其他成员为合法数据(即哪些成员起作用)。
//此成员可以为以下值的组合:
// NIF_ICON hIcon成员起作用。
// NIF_MESSAGE uCallbackMessage成员起作用。
// NIF_TIP szTip成员起作用。
// NIF_STATE dwState和dwStateMask成员起作用。
// NIF_INFO 使用气球提示代替普通的工具提示框。szInfo, uTimeout, szInfoTitle和dwInfoFlags成员起作用。
// NIF_GUID 保留。
UINT uCallbackMessage; //应用程序定义的消息标示。当托盘图标区域发生鼠标事件或者使用键盘选择或激活图标时,
//系统将使用此标示向由hWnd成员标示的窗口发送消息。
//消息响应函数的wParam参数标示了消息事件发生的任务栏图标,lParam参数根据事件的不同,
//包含了鼠标或键盘的具体消息,例如当鼠标指针移过托盘图标时,lParam将为WM_MOUSEMOVE。
HICON hIcon; //增加、修改或删除的图标的句柄。
CHAR szTip[64]; //指向一个以\0结束的字符串的指针。字符串的内容为标准工具提示的信息。
//包含最后的\0字符,szTip最多含有64个字符。
} NOTIFYICONDATAA */
//************