不知不觉中我的音乐播放器也做完了,在此我将代码分享给大家
主要的代码
#include "stdafx.h" #include <windows.h> #include <commdlg.h>//控制文件 #include <mmsystem.h> #include <Shlobj.h>//处理文件夹 #include <windowsx.h> #include <commctrl.h>/*使用滑块头文件*/ #include "resource.h" #include "MainDlg.h" #include "AboutDlg.h" #include "ExitDlg.h" #include "SkinH.h"//调用皮肤库 #pragma comment(lib,"SkinH.lib") /************************************************************************ 处理音乐文件时所需的全局变量 *************************************************************************/ static OPENFILENAME ofn;//打开文件对话框的文件结构 static char szOpenFileName[80*MAX_PATH];//保存文件名 static char szFileName[80*MAX_PATH];//保存歌曲的全路径 static char szPath[80*MAX_PATH];//储存路径 static char OpenMusicFile[MAX_PATH];//保存路径(用于操作音乐) /********************************************************************** 函数名: FileInit(HWND hwnd) 函数功能: 打开文件初始化文件对话框 ****************************************************************************/ void FileInit(HWND hwnd) { //文件结构清零 ZeroMemory(&ofn,sizeof(ofn)); //文件结构的大小 ofn.lStructSize = sizeof(ofn); //文件路径 ofn.lpstrFile = szOpenFileName; ofn.lpstrFile[0] = TEXT('\0'); ofn.nMaxFile = sizeof(szOpenFileName); //过滤器 ofn.lpstrFilter = TEXT("所有支持文件(*.wav,*.mp3,*.wma)\0*.wav;*.mp3;*.wma\0wave文件(*.wav)\0*.wav\0mp3文件(*.mp3)\0*.mp3\0wma文件(*.wma)\0*.wma\0"); ofn.nFilterIndex = 1; ofn.lpstrFileTitle = NULL; ofn.nMaxFileTitle = 0; ofn.lpstrInitialDir = NULL; ofn.hwndOwner = hwnd; ofn.Flags = OFN_EXPLORER |OFN_PATHMUSTEXIST | OFN_ALLOWMULTISELECT; } /********************************************************************** 函数名: bool OpenFileDlg(void) 函数功能: 打开文件对话框 ************************************************************************/ int OpenFileDlg(void) { return GetOpenFileName(&ofn); } /********************************************************************** 函数名: void AddFile(HWND hwnd) 函数功能: 添加文件 ***********************************************************************/ void AddFile(HWND hwnd) { TCHAR *p;//用于遍历音乐文件 int len = 0; FileInit(hwnd);//文件初始化 if(OpenFileDlg()) { /*把第一个文件名复制到szPath 如果只选了一个文件,就复制到最后一个'\' 如果选了多个文件,就复制到第一个NULL字符*/ lstrcpyn(szPath, szOpenFileName, ofn.nFileOffset); /*当只选了一个文件时,下面的NULL是必须的 这是不区别待选了一个和多个文件情况 */ szPath[ofn.nFileOffset] = '\0'; len = lstrlen(szPath); if(szPath[len - 1] != '\\') { lstrcat(szPath,TEXT("\\")); } p = szOpenFileName + ofn.nFileOffset; ZeroMemory(szFileName, sizeof(szFileName)); HWND hwndList = GetDlgItem(hwnd, IDC_LIST1); while(*p) { lstrcat(szFileName, szPath);/*给文件名加上路径*/ lstrcat(szFileName, p);/*加上文件名*/ ListBox_InsertString(hwndList, -1, p); lstrcat(szFileName, TEXT("\n"));/*换行*/ p += lstrlen(p) + 1;/*移到下一个文件*/ } } } /************************************************************************************ 函数名: AddFolder(HWND hwnd) 函数功能: 添加文件夹 ****************************************************************************/ void AddFolder(HWND hwnd) { //保存文件夹的路径 TCHAR szFile[MAX_PATH]; TCHAR pBuffer_Directory[MAX_PATH];//存放文件信息 BROWSEINFO sBrowseInfo;//文件夹结构 LPCITEMIDLIST lpitem;//用于判断是否选择了一个文件夹 WIN32_FIND_DATA sfd;//文件的全部属性结构 //对文件夹结构清零 ZeroMemory(&sBrowseInfo,sizeof(BROWSEINFO)); //浏览文件夹对话框的父窗体句柄。 sBrowseInfo.hwndOwner=hwnd; //该浏览文件夹对话框对话框的显示文本,用来提示该浏览文件夹对话框的功能、作用和目的。 sBrowseInfo.lpszTitle="请选择文件夹"; //文件夹对话框的选项 sBrowseInfo.ulFlags=BIF_RETURNONLYFSDIRS; //BIF_RETURNFSANCESTORS:返回文件系统的一个节点。仅仅当选中的是有意义的节点时,“OK”按钮才可以使用。 //显示一个选择文件夹的对话框 lpitem=SHBrowseForFolder(&sBrowseInfo); //判断是否选择了文件夹 if(NULL==lpitem) { return; } //获得文件夹的路径 SHGetPathFromIDList(lpitem,pBuffer_Directory); strcpy(szFile,pBuffer_Directory); //枚举过滤条件(只实现MP3) lstrcat(pBuffer_Directory,"\\*.mp3"); /*得到第一个文件(第一首歌)的句柄*/ HANDLE hfindfile = FindFirstFile(pBuffer_Directory,&sfd); if(INVALID_HANDLE_VALUE==hfindfile)//判断文件是否有效 { return; } do { if (sfd.cFileName[0]=='.') { continue; } lstrcat(szFileName,szFile); lstrcat(szFileName,TEXT("\\")); lstrcat(szFileName,sfd.cFileName); lstrcat(szFileName,TEXT("\n")); //得到ListBox控件的句柄 HWND hwndList = GetDlgItem(hwnd,IDC_LIST1); //将音乐文件的文件名(歌曲名)添加到播放列表中 ListBox_InsertString(hwndList,-1,sfd.cFileName); }while (FindNextFile(hfindfile,&sfd)); /*只要没遍历到文件夹中的最后一个文件就一直添加*/ } /*************************************************************************** 得到选定的歌曲所需的全局变量 *****************************************************************************/ TCHAR line[MAX_PATH];//保存歌曲的路径 /*************************************************************************** 函数名: void GetMusic(HWND hwnd) 函数功能: 得到选定的歌曲 *****************************************************************************/ void GetMusic(HWND hwnd) { //得到ListBox控件的句柄 HWND hwndList = GetDlgItem(hwnd,IDC_LIST1); //得到选择的歌曲的索引 int CurSel = ListBox_GetCurSel(hwndList); //得到歌曲的全路径 ListBox_GetText(hwndList,CurSel,line); //得到歌曲的短路径 GetShortPathName(line,OpenMusicFile,sizeof(OpenMusicFile)/sizeof(TCHAR)); } /**************************************************************************** 计算歌曲的总播放时间所需的全局变量 *****************************************************************************/ static TCHAR musicTotalTime[256];//保存歌曲的总时间 static int TotalSecond;//保存歌曲的总时间(秒) /*************************************************************************** 函数名: void MusicTotalTime(HWND hwnd) 函数功能: 计算一首歌曲的总时间 ****************************************************************************/ void MusicTotalTime(HWND hwnd) { TCHAR musicTotalLength[256];//保存歌曲的总时长 TCHAR cmd[MAX_PATH];//保存播放命令 GetMusic(hwnd);//得到选中的歌曲 int Minute;//保存歌曲的时间(分钟) //打印得到歌曲的总时长的命令 wsprintf(cmd,"status %s length",OpenMusicFile); //发送得到歌曲的总时长的命令 mciSendString(cmd,musicTotalLength,sizeof(musicTotalLength)/sizeof(TCHAR),NULL); //得到歌曲的总时长(秒) TotalSecond = atoi(musicTotalLength)/1000; //得到歌曲的时间长度(分) Minute = TotalSecond / 60; //得到歌曲的时长(秒) int Second = TotalSecond - (Minute * 60); //打印歌曲的时长 wsprintf(musicTotalTime,"%02d:%02d",Minute,Second); //显示歌曲的时长 SetDlgItemText(hwnd,IDC_WHOLE_TIME,musicTotalTime); } /***************************************************************************j 函数名: SetProgressBar 函数功能: 播放歌曲时滑动条自动滑动 ****************************************************************************/ void CALLBACK SetProgressBar(HWND hwnd, UINT message, UINT iTimerId,DWORD dwTime) { TCHAR nowMusicTime[256];//保存歌曲的播放位置 TCHAR totalLength[256];//保存歌曲的长度 TCHAR cmd[MAX_PATH];//保存播放命令 //打印得到歌曲的长度的命令 wsprintf(cmd,"status %s length",OpenMusicFile); //发送得到歌曲的长度的命令 mciSendString(cmd,totalLength,sizeof(totalLength)/sizeof(TCHAR),NULL); //得到歌曲的总时长 int totalSecond = atoi(totalLength) / 1000; //设置播放进度条的最大值是歌曲的长度 SendDlgItemMessage(hwnd,IDC_MUSIC_SLIDER,TBM_SETRANGEMAX,false,(LPARAM)totalSecond); //设置播放进度的最小值为0 SendDlgItemMessage(hwnd,IDC_MUSIC_SLIDER,TBM_SETRANGEMIN,false,(LPARAM)0); //打印得到播放位置的命令 wsprintf(cmd,"status %s position",OpenMusicFile); //发送得到播放位置的命令 mciSendString(cmd,nowMusicTime,sizeof(nowMusicTime)/sizeof(TCHAR),NULL); int musicSliderTime = atoi(nowMusicTime) / 1000; //设置播放进度 SendDlgItemMessage(hwnd,IDC_MUSIC_SLIDER,TBM_SETPOS, true,(LPARAM)musicSliderTime); } /*********************************************************************************************** 函数名: void JumpProcess(HWND hwnd, int pos) 函数功能: 拖动滑动条,音乐从滑动条位置开始播放 ************************************************************************************************/ void JumpProcess(HWND hwnd, int pos) { TCHAR cmd[MAX_PATH + 20]; wsprintf(cmd,"play %s from %d to %d", OpenMusicFile, pos,pos*100); mciSendString(cmd,0,NULL,NULL); } /*************************************************************************** 函数名: void SetVolume(HWND hwnd) 函数功能: 控制音量 ****************************************************************************/ void SetVolume(HWND hwnd) { //得到滑块中的音量值 int voice = SendMessage(GetDlgItem(hwnd,IDC_VOLUME_SLIDER),TBM_GETPOS,0,0); //调节音量 voice = voice * 10; TCHAR szVoice[256];//保存音量控制的命令 //打印调节音量的命令 wsprintf(szVoice,"setaudio %s volume to %d",OpenMusicFile,voice); //发送调节音量的命令 mciSendString(szVoice,(LPTSTR)NULL,0,0); } /************************************************************************** 播放歌曲所需的全局变量 ****************************************************************************/ static int numPlayMusicNow = 0;//正在播放的歌曲的序号 /**************************************************************************** 函数名: void PlayMusic(HWND hwnd) 函数功能: 播放歌曲 ****************************************************************************/ void PlayMusic(HWND hwnd) { TCHAR cmd[MAX_PATH];//保存播放歌曲的命令 //打印关闭歌曲的命令 wsprintf(cmd,"close %s",OpenMusicFile); ///发送关闭歌曲的命令 mciSendString(cmd, "", 0, NULL); GetMusic(hwnd);//得到选择的歌曲 //显示正在播放的歌曲 SetDlgItemText(hwnd,IDC_PLAYEDIT,line); wsprintf(cmd,"open %s alias",OpenMusicFile); mciSendString(cmd,0,0,NULL); //打印播放歌曲的命令 wsprintf(cmd,"play %s",OpenMusicFile); //发送播放歌曲的命令 mciSendString(cmd,0,0,NULL); //得到歌曲的总时长 MusicTotalTime(hwnd); //设置定时器 SetTimer(hwnd,1,1000,MusicNowTime);//用于处理播放时间 SetTimer(hwnd,2,1000,SetProgressBar);//用于处理播放进度 } /*********************************************************************************************** 实现暂停播放所需的全局变量 *************************************************************************************************/ static int flagPauseOrPlay = 0;//暂停播放的标志位(歌曲是暂停还是播放) /********************************************************************************************** 函数名: void PauseMusic(HWND hwnd) 函数功能: 暂停歌曲 ***********************************************************************************************/ void PauseMusic(HWND hwnd) { //得到暂停按钮上的句柄 HWND hwndPause = GetDlgItem(hwnd,IDC_PAUSE); TCHAR cmd[256]; //当按下了继续按钮 if(1 == flagPauseOrPlay) { //继续按钮变成暂停按钮 SetWindowText(hwndPause,TEXT("暂停")); //打印播放命令 wsprintf(cmd,"play %s",OpenMusicFile); //发送播放命令 mciSendString(cmd,NULL,0,0); //修改标志位(表示用户按下了继续按钮) flagPauseOrPlay = 0; } else if(0 == flagPauseOrPlay)//当按了暂停后 { //暂停按钮变成继续按钮 SetWindowText(hwndPause,TEXT("继续")); //打印暂停命令 wsprintf(cmd,"pause %s",OpenMusicFile); //执行暂停命令 mciSendString(cmd,NULL,0,0); //修改标志位(表示用户按下了暂停按钮) flagPauseOrPlay = 1; } } /*********************************************************************************************** 函数名:void StopMusic(HWND hwnd) 函数功能:停止播放 ************************************************************************************************/ void StopMusic(HWND hwnd) { TCHAR cmd[256]; wsprintf(cmd,"stop %s",OpenMusicFile); mciSendString(cmd,NULL,0,0); } /**************************************************************************************************************** 实现上一曲和下一曲所需的全局变量 *****************************************************************************************************************/ static int totalMusicCount;//播放列表中歌曲的总数 static NumPlayMusicNow;//选择歌曲的编号 static int iLoopType = 0;//播放方式:初始为单曲模式 /*********************************************************************************************** 函数名: void JumpMusic(HWND hwnd,int num) 函数功能: 实现上一曲(num=0)或下一曲(num=1) ************************************************************************************************/ void JumpMusic(HWND hwnd,int num) { HWND hwndList = GetDlgItem(hwnd,IDC_LIST1); //得到选择的歌曲的序号 numPlayMusicNow = ListBox_GetCurSel(hwndList); //得到歌曲总数 totalMusicCount = ListBox_GetCount(hwndList); /*下面的代码是处理随机播放中的上一曲和下一曲*/ if(0==num)//上一曲 { //随机播放 if(3 == iLoopType) { //随机生成歌曲的序号 numPlayMusicNow = rand() % totalMusicCount; } else { //当正在播放的歌曲的序号大于0时 if(numPlayMusicNow > 0) { //上一曲 numPlayMusicNow = numPlayMusicNow - 1; } else if(0 == numPlayMusicNow)//当在播放第1首歌时 { //跳到最后一首歌曲 numPlayMusicNow = totalMusicCount - 1; } } } else if(1 == num)//下一曲 { if(3 == iLoopType) { //随机生成歌曲的序号 numPlayMusicNow = rand() % totalMusicCount; } else { //当正在播放的歌曲的序号小于歌曲的最大序号时 if(numPlayMusicNow < totalMusicCount - 1) { //下一曲 numPlayMusicNow = numPlayMusicNow + 1; } //当正在播放最后一首歌时 else if(numPlayMusicNow == totalMusicCount - 1) { //跳到第一首歌 numPlayMusicNow = 0; } } } //设置歌曲的序号 ListBox_SetCurSel(hwndList,numPlayMusicNow); //得到歌曲的序号 numPlayMusicNow = ListBox_GetCurSel(hwndList); //播放歌曲 PlayMusic(hwnd); } /****************************************************************************** 函数名; void PlayTypeMenuSet(HWND hwnd,int indexs) 函数功能: 播放模式菜单设定 *******************************************************************************/ void PlayTypeMenuSet(HWND hwnd,int indexs) { //该函数取得分配给指定窗口的菜单的句柄 HMENU hMenu = GetMenu(hwnd); switch(indexs) { case 0://列表循环 { CheckMenuItem(hMenu,ID_MENUORDER,MF_CHECKED); CheckMenuItem(hMenu,ID_MENUCIRCULATION,MF_UNCHECKED); CheckMenuItem(hMenu,ID_MENURANDOM,MF_UNCHECKED); CheckMenuItem(hMenu,ID_MENUITEM40017,MF_UNCHECKED); } break; case 1://顺序播放 { CheckMenuItem(hMenu,ID_MENUORDER,MF_UNCHECKED); CheckMenuItem(hMenu,ID_MENUCIRCULATION,MF_CHECKED); CheckMenuItem(hMenu,ID_MENURANDOM,MF_UNCHECKED); CheckMenuItem(hMenu,ID_MENUITEM40017,MF_UNCHECKED); } break; case 2://单曲循环 { CheckMenuItem(hMenu,ID_MENUORDER,MF_UNCHECKED); CheckMenuItem(hMenu,ID_MENUCIRCULATION,MF_UNCHECKED); CheckMenuItem(hMenu,ID_MENURANDOM,MF_CHECKED); CheckMenuItem(hMenu,ID_MENUITEM40017,MF_UNCHECKED); } break; case 3://随机播放 { CheckMenuItem(hMenu,ID_MENUORDER,MF_UNCHECKED); CheckMenuItem(hMenu,ID_MENUCIRCULATION,MF_UNCHECKED); CheckMenuItem(hMenu,ID_MENURANDOM,MF_UNCHECKED); CheckMenuItem(hMenu,ID_MENUITEM40017,MF_CHECKED); } break; default: break; } } /*************************************************************************** 显示播放歌曲的时间所需的全局变量 ****************************************************************************/ static char curTime[256];//当前歌曲播放的位置 /*************************************************************************** 函数名: MusicNowTime 函数功能: 显示当前歌曲的播放时间 *****************************************************************************/ void CALLBACK MusicNowTime(HWND hwnd,UINT message,UINT iTimerId,DWORD dwTime) { TCHAR Position[256];//保存歌曲的播放位置 TCHAR cmd[256];//保存得到歌曲的播放位置的命令 //打印得到歌曲的播放位置的命令 wsprintf(cmd,"status %s position",OpenMusicFile); //发送得到歌曲播放时间的命令 mciSendString(cmd, Position, sizeof(Position)/sizeof(TCHAR), NULL); int Time = atoi(Position)/1000;//保存歌曲的播放时间(秒) int Minute = Time/60;//分钟 int Second = Time - 60*Minute;//秒 //打印播放时间 wsprintf(curTime,"%02d:%02d",Minute,Second); //显示播放时间 SetDlgItemText(hwnd,IDC_BEGIN_TIME,curTime); TCHAR mode[MAX_PATH];//保存的到当前的播放状态 //打印得到状态的命令 wsprintf(cmd,"status %s mode",OpenMusicFile); //发送得到状态的命令 mciSendString(cmd,mode,sizeof(mode)/sizeof(TCHAR),NULL); //判断一首歌是否播完 if(0 == strcmp(mode,TEXT("stopped"))) { switch(iLoopType) { case 0://列表循环 { //下一曲 JumpMusic(hwnd, 1); } break; case 1://顺序播放 { if(numPlayMusicNow == totalMusicCount-1) { //停止 StopMusic(hwnd); } else { //下一曲 JumpMusic(hwnd, 1); } } break; case 2://单曲循环 { PlayMusic(hwnd); } break; case 3://随机播放 { //下一曲 JumpMusic(hwnd, 1); } break; default: break; } } } /************************************************************************* 函数名: void DeleteMusic(HWND hwnd) 函数功能: 删除选定的歌曲 **************************************************************************/ void DeleteMusic(HWND hwnd) { GetMusic(hwnd);//选定歌曲 //得到ListBox控件的句柄 HWND hwndList = GetDlgItem(hwnd,IDC_LIST1); //得到选择的歌曲的序号 int CurSel = ListBox_GetCurSel(hwndList); //下一曲 JumpMusic(hwnd,1); //删除选定的歌曲 ListBox_DeleteString(hwndList,CurSel); } /************************************************************************** 函数名: void DeleteList(HWND hwnd) 函数功能: 清空播放列表 **************************************************************************/ void DeleteList(HWND hwnd) { HWND hwndList = GetDlgItem(hwnd,IDC_LIST1); //得到播放列表中歌曲的数量 int Count = ListBox_GetCount(hwndList); for(int i=Count-1;i>=0;i--) { ListBox_DeleteString(hwndList,i); } //停止播放 StopMusic(hwnd); //歌曲显示为空 SetDlgItemText(hwnd,IDC_PLAYEDIT,NULL); //关闭定时器 KillTimer(hwnd,1); //关闭定时器 KillTimer(hwnd,2); //清空播放时间 SetDlgItemText(hwnd,IDC_BEGIN_TIME,NULL); //清空总时间 SetDlgItemText(hwnd,IDC_WHOLE_TIME,NULL); //播放进度条返回起始位置 SendDlgItemMessage(hwnd,IDC_MUSIC_SLIDER,TBM_SETPOS,true,(LPARAM)NULL); } /************************************************************************** 设定迷你模式所需的全局变量 **************************************************************************/ static int flag = 0;//标记音乐播放器为迷你模式 /************************************************************************** 函数名: void SetMiniMode(HWND hwnd) 函数功能: 设置迷你模式 **************************************************************************/ void SetMiniMode(HWND hwnd) { //得到菜单句柄 HMENU hMenu = GetMenu(hwnd); if(0 == flag) { //选中迷你模式 CheckMenuItem(hMenu,ID_MENUMINIMODE,MF_CHECKED); //将窗口变成迷你模式窗口 SetWindowPos(hwnd,0,122,75,385,445,SWP_NOMOVE | SWP_NOZORDER); flag = 1;//标识符,标示窗口为普通窗口 } else { //不选择迷你模式 CheckMenuItem(hMenu,ID_MENUMINIMODE,MF_UNCHECKED); //将窗口还原成普通窗口 SetWindowPos(hwnd,0,122,75,615,495,SWP_NOMOVE | SWP_NOZORDER); flag = 0;//标示窗口为迷你窗口 } } BOOL WINAPI Main_Proc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch(uMsg) { // HANDLE_MSG(hWnd, WM_HSCROLL, Main_OnHScroll);//响应音乐滑动条被拖动 HANDLE_MSG(hWnd, WM_HSCROLL,Main_OnSlider);//响应音量滑动条被拖动 HANDLE_MSG(hWnd, WM_INITDIALOG, Main_OnInitDialog); HANDLE_MSG(hWnd, WM_COMMAND, Main_OnCommand); HANDLE_MSG(hWnd,WM_CLOSE, Main_OnClose); //托盘消息 case WM_SHOWTASK: { //在托盘上单击左键 if(WM_LBUTTONDOWN == lParam) { //还原音乐播放器 ToTray(hWnd,2); } //在托盘上单击右键 if(WM_RBUTTONDOWN == lParam) { //退出音乐播放器 exit(0); } } break; } return FALSE; } //音量滑块被拖动 void Main_OnSlider(HWND hwnd,HWND hwndCtl,UINT code,int pos) { //判断是否拖动了音量滑块 switch(GetDlgCtrlID(hwndCtl)) { //拖动音量滑块 case IDC_VOLUME_SLIDER: { //调节音量 SetVolume(hwnd); } break; } } /************************************************************************************************ 定义修改窗口的透明度所需的变量 *************************************************************************************************/ #define WS_EX_LAYERED 0x00080000 #define LWA_COLORKEY 0x00000001 #define LWA_ALPHA 0x00000002 typedef BOOL (FAR WINAPI *LAYERFUNC)(HWND,COLORREF,BYTE,DWORD); int Item = 0; /************************************************************************************************ 函数名:SetLayeredWindowAttributes 函数功能:设置窗口的透明度 ************************************************************************************************/ BOOL SetLayeredWindowAttributes(HWND hwnd, COLORREF crKey, BYTE bAlpha, DWORD dwFlags) { LAYERFUNC SetLayer; BOOL bReturn; HMODULE hmod = LoadLibrary("user32.dll"); SetLayer = (LAYERFUNC)GetProcAddress(hmod,"SetLayeredWindowAttributes"); bReturn = SetLayer(hwnd,crKey,bAlpha,dwFlags); FreeLibrary(hmod); return bReturn; } /******************************************************************************************* 函数名称: ChangeTransparency 函数功能: 改变窗口的透明度 *********************************************************************************************/ void ChangeTransparency(HWND hwnd, int indexs) { //得到菜单句柄 HMENU hMenu = GetMenu(hwnd); switch (indexs) { case 0: //窗口的透明度为10% { CheckMenuItem(hMenu,ID_MENUTM10,MF_CHECKED); CheckMenuItem(hMenu,ID_MENUTM30,MF_UNCHECKED); CheckMenuItem(hMenu,ID_MENUTM50,MF_UNCHECKED); CheckMenuItem(hMenu,ID_MENUTM70,MF_UNCHECKED); CheckMenuItem(hMenu,ID_MENUTM90,MF_UNCHECKED); CheckMenuItem(hMenu,ID_MENUUNTM,MF_UNCHECKED); if(0 == Item)//保证窗口能自由的切换透明度 { //设置窗口的透明度为10% SetWindowLong(hwnd,GWL_EXSTYLE, GetWindowLong(hwnd,GWL_EXSTYLE)^0x80000); SetLayeredWindowAttributes(hwnd,RGB(100,100,100),25,LWA_ALPHA); Item = 1;//使得窗口有向非透明转换的趋势 } else { //不选中透明度为10% CheckMenuItem(hMenu,ID_MENUTM10,MF_UNCHECKED); CheckMenuItem(hMenu,ID_MENUUNTM,MF_CHECKED); //设定窗口为不透明 SetWindowLong(hwnd,GWL_EXSTYLE, GetWindowLong(hwnd,GWL_EXSTYLE)^0x80000); SetLayeredWindowAttributes(hwnd,RGB(100,100,100),25,LWA_ALPHA); Item = 0;//使得窗口有向透明度为10%转换的趋势 } } break; case 1://窗口的透明度为30% { CheckMenuItem(hMenu,ID_MENUTM10,MF_UNCHECKED); CheckMenuItem(hMenu,ID_MENUTM30,MF_CHECKED); CheckMenuItem(hMenu,ID_MENUTM50,MF_UNCHECKED); CheckMenuItem(hMenu,ID_MENUTM70,MF_UNCHECKED); CheckMenuItem(hMenu,ID_MENUTM90,MF_UNCHECKED); CheckMenuItem(hMenu,ID_MENUUNTM,MF_UNCHECKED); if(0 == Item)//保证窗口能自由的切换透明度 { //设置窗口的透明度为30% SetWindowLong(hwnd,GWL_EXSTYLE, GetWindowLong(hwnd,GWL_EXSTYLE)^0x80000); SetLayeredWindowAttributes(hwnd,RGB(100,100,100),50,LWA_ALPHA); Item = 1;//使得窗口有向非透明转换的趋势 } else { //不选中透明度为10% CheckMenuItem(hMenu,ID_MENUTM30,MF_UNCHECKED); CheckMenuItem(hMenu,ID_MENUUNTM,MF_CHECKED); //设定窗口为不透明 SetWindowLong(hwnd,GWL_EXSTYLE, GetWindowLong(hwnd,GWL_EXSTYLE)^0x80000); SetLayeredWindowAttributes(hwnd,RGB(100,100,100),50,LWA_ALPHA); Item = 0;//使得窗口有向透明度为10%转换的趋势 } } break; case 2: //设定窗口的透明度为50% { CheckMenuItem(hMenu,ID_MENUTM10,MF_UNCHECKED); CheckMenuItem(hMenu,ID_MENUTM30,MF_UNCHECKED); CheckMenuItem(hMenu,ID_MENUTM50,MF_CHECKED); CheckMenuItem(hMenu,ID_MENUTM70,MF_UNCHECKED); CheckMenuItem(hMenu,ID_MENUTM90,MF_UNCHECKED); CheckMenuItem(hMenu,ID_MENUUNTM,MF_UNCHECKED); if(0 == Item)//保证窗口能自由的切换透明度 { //设置窗口的透明度为50% SetWindowLong(hwnd,GWL_EXSTYLE, GetWindowLong(hwnd,GWL_EXSTYLE)^0x80000); SetLayeredWindowAttributes(hwnd,RGB(100,100,100),125,LWA_ALPHA); Item = 1;//使得窗口有向非透明转换的趋势 } else { //不选中透明度为50% CheckMenuItem(hMenu,ID_MENUTM50,MF_UNCHECKED); CheckMenuItem(hMenu,ID_MENUUNTM,MF_CHECKED); //设定窗口为不透明 SetWindowLong(hwnd,GWL_EXSTYLE, GetWindowLong(hwnd,GWL_EXSTYLE)^0x80000); SetLayeredWindowAttributes(hwnd,RGB(100,100,100),125,LWA_ALPHA); Item = 0;//使得窗口有向透明度为10%转换的趋势 } } break; case 3://设定窗口的透明度为70% { CheckMenuItem(hMenu,ID_MENUTM10,MF_UNCHECKED); CheckMenuItem(hMenu,ID_MENUTM30,MF_UNCHECKED); CheckMenuItem(hMenu,ID_MENUTM50,MF_UNCHECKED); CheckMenuItem(hMenu,ID_MENUTM70,MF_CHECKED); CheckMenuItem(hMenu,ID_MENUTM90,MF_UNCHECKED); CheckMenuItem(hMenu,ID_MENUUNTM,MF_UNCHECKED); if(0 == Item)//保证窗口能自由的切换透明度 { //设置窗口的透明度为70% SetWindowLong(hwnd,GWL_EXSTYLE, GetWindowLong(hwnd,GWL_EXSTYLE)^0x80000); SetLayeredWindowAttributes(hwnd,RGB(100,100,100),175,LWA_ALPHA); Item = 1;//使得窗口有向非透明转换的趋势 } else { //不选中透明度为10% CheckMenuItem(hMenu,ID_MENUTM70,MF_UNCHECKED); CheckMenuItem(hMenu,ID_MENUUNTM,MF_CHECKED); //设定窗口为不透明 SetWindowLong(hwnd,GWL_EXSTYLE, GetWindowLong(hwnd,GWL_EXSTYLE)^0x80000); SetLayeredWindowAttributes(hwnd,RGB(100,100,100),175,LWA_ALPHA); Item = 0;//使得窗口有向透明度为10%转换的趋势 } } break; case 4://设定窗口的透明度为90% { CheckMenuItem(hMenu,ID_MENUTM10,MF_UNCHECKED); CheckMenuItem(hMenu,ID_MENUTM30,MF_UNCHECKED); CheckMenuItem(hMenu,ID_MENUTM50,MF_UNCHECKED); CheckMenuItem(hMenu,ID_MENUTM70,MF_UNCHECKED); CheckMenuItem(hMenu,ID_MENUTM90,MF_CHECKED); CheckMenuItem(hMenu,ID_MENUUNTM,MF_UNCHECKED); if(0 == Item)//保证窗口能自由的切换透明度 { //设置窗口的透明度为90% SetWindowLong(hwnd,GWL_EXSTYLE, GetWindowLong(hwnd,GWL_EXSTYLE)^0x80000); SetLayeredWindowAttributes(hwnd,RGB(100,100,100),225,LWA_ALPHA); Item = 1;//使得窗口有向非透明转换的趋势 } else { //不选中透明度为90% CheckMenuItem(hMenu,ID_MENUTM90,MF_UNCHECKED); CheckMenuItem(hMenu,ID_MENUUNTM,MF_CHECKED); //设定窗口为不透明 SetWindowLong(hwnd,GWL_EXSTYLE, GetWindowLong(hwnd,GWL_EXSTYLE)^0x80000); SetLayeredWindowAttributes(hwnd,RGB(100,100,100),225,LWA_ALPHA); Item = 0;//使得窗口有向透明度为10%转换的趋势 } } break; case 5: //设定窗口为不透明 { CheckMenuItem(hMenu,ID_MENUTM10,MF_UNCHECKED); CheckMenuItem(hMenu,ID_MENUTM30,MF_UNCHECKED); CheckMenuItem(hMenu,ID_MENUTM50,MF_UNCHECKED); CheckMenuItem(hMenu,ID_MENUTM70,MF_UNCHECKED); CheckMenuItem(hMenu,ID_MENUTM90,MF_UNCHECKED); CheckMenuItem(hMenu,ID_MENUUNTM,MF_CHECKED); //设置窗口的透明度为不透明 SetWindowLong(hwnd,GWL_EXSTYLE, GetWindowLong(hwnd,GWL_EXSTYLE)^0x80000); SetLayeredWindowAttributes(hwnd,RGB(100,100,100),255,LWA_ALPHA); } break; default: break; } } //程序初始化 BOOL Main_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam) { //设置最大的音量是1000 SendDlgItemMessage(hwnd,IDC_VOLUME_SLIDER,TBM_SETRANGEMAX,false,(LPARAM)1000); //音量滑块滑动到最大的音量处 SendDlgItemMessage(hwnd,IDC_VOLUME_SLIDER,TBM_SETPOS, true,(LPARAM)1000); /*在窗口的标题栏上显示图标*/ SendMessage(hwnd, WM_SETICON, ICON_SMALL, (LPARAM)LoadIcon(GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_ICON1))); /*在托盘上显示一个图标*/ ToTray(hwnd,4); SkinH_Attach();//加载皮肤,你就可以看到界面皮肤变了 return TRUE; } void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify) { switch(id) { /*添加歌曲到列表中*/ case ID_MENUADD: { AddFile(hwnd); } break; /*添加歌曲到播放列表中*/ case IDC_ADD: { AddFile(hwnd); } break; //删除歌曲 case IDC_DELETE: { DeleteMusic(hwnd); } break; //清空播放列表 case IDC_DELETE_LIST: { DeleteList(hwnd); } break; //添加文件夹中的所有歌曲到播放列表 case ID_MENUADDFOLDER: { AddFolder(hwnd); } break; //播放歌曲 case IDC_PLAY: { PlayMusic(hwnd); } break; //双击播放列表 case IDC_LIST1: { if(LBN_DBLCLK == codeNotify) { PlayMusic(hwnd);//播放歌曲 } } break; //暂停 case IDC_PAUSE: { PauseMusic(hwnd); } break; //停止 case IDC_STOP: { StopMusic(hwnd); } break; //上一曲 case IDC_PRESONG: { JumpMusic(hwnd,0); } break; //下一曲 case IDC_NEXTSONG: { JumpMusic(hwnd,1); } break; case ID_MENUORDER://列表循环 { PlayTypeMenuSet(hwnd,0); iLoopType = 0; } break; case ID_MENUCIRCULATION://顺序播放 { PlayTypeMenuSet(hwnd,1); iLoopType = 1; } break; case ID_MENURANDOM://单曲循环 { PlayTypeMenuSet(hwnd,2); iLoopType = 2; } break; case ID_MENUITEM40017://随机播放 { PlayTypeMenuSet(hwnd,3); iLoopType = 3; } break; case ID_MENUTM10://设定窗口透明度为10% { ChangeTransparency(hwnd, 0); } break; case ID_MENUTM30://设定窗口透明度为30% { ChangeTransparency(hwnd, 1); } break; case ID_MENUTM50://设定窗口透明度为50% { ChangeTransparency(hwnd, 2); } break; case ID_MENUTM70://设定窗口透明度为70% { ChangeTransparency(hwnd, 3); } break; case ID_MENUTM90://设定窗口透明度为90% { ChangeTransparency(hwnd, 4); } break; case ID_MENUUNTM://设定窗口为不透明 { ChangeTransparency(hwnd, 5); } break; //迷你模式 case ID_MENUMINIMODE: { SetMiniMode(hwnd); } break; //关于 case ID_MENUITEM40016: { /*得到窗口的实例句柄*/ HINSTANCE hInstance = (HINSTANCE)GetWindowLong(hwnd, GWL_HINSTANCE); /*弹出对话框*/ DialogBoxParam(hInstance, MAKEINTRESOURCE(IDD_ABOUT), NULL,About_Main_Proc, NULL); } break; //退出音乐播放器 case ID_MENUITEMEXIT: { Exit_Main_OnClose1(hwnd); } break; default: break; } } void Main_OnClose(HWND hwnd) { /*得到窗口的实例句柄*/ HINSTANCE hInstance = (HINSTANCE)GetWindowLong(hwnd, GWL_HINSTANCE); /*弹出对话框*/ DialogBoxParam(hInstance, MAKEINTRESOURCE(IDD_EXIT), NULL,Exit_Main_Proc, NULL); }
单击此处下载音乐播放器