C實現音樂播放器

本文轉自:http://blog.sina.com.cn/s/blog_8e6d13280100z7j7.html

#include <windows.h>
#include <tchar.h>
#include <mmsystem.h>  //包含語音和視頻播放的函數
#include <digitalv.h>
#include <commctrl.h>
#include <stdio.h>
#include "resource.h"


#pragma comment(lib,"winmm.lib")
#pragma comment(lib,"comctl32.lib")


//該函數實現“打開文件名填充在FileName數組中,char *lei爲需要打開的文件類型,如:mp3, 則傳入"mp3"
int _GetFileName(TCHAR *FileName,
				 HANDLE hwnd,
				 TCHAR *lei)
{
	int i,j,len;
	TCHAR c[100] = {0};
	TCHAR a[] = _T("(*.)\0*.\0\0");
	OPENFILENAME FileNames;
	static TCHAR szFileName[MAX_PATH];
	static TCHAR szTitleName[MAX_PATH];
	static TCHAR szFilter[100] = {0};
	len = _tcsclen(lei);
	c[0] = a[0];
	c[1] = a[1];
	c[2] = a[2];
	for (i = 0; i < len; i++)
		c[i + 3] = lei[i];
	c[i + 3] = a[3];
	c[i + 4] = a[4];
	c[i + 5] = a[5];
	c[i + 6] = a[6];
	for(j=0;j<len;j++)
		c[7+i+j]=lei[j];
	c[7+i+j]=a[7];
	c[8+i+j]=a[8];
	memcpy(szFilter,c,100);
	FileNames.lStructSize       = sizeof (OPENFILENAME) ;
	FileNames.hwndOwner         = (HWND)hwnd ;
	FileNames.hInstance         = NULL ;
	FileNames.lpstrFilter       = szFilter ;
	FileNames.lpstrCustomFilter = NULL ;
	FileNames.nMaxCustFilter    = 0 ;
	FileNames.nFilterIndex      = 0 ;
	FileNames.lpstrFile         = szFileName ;
	FileNames.nMaxFile          = MAX_PATH ;
	FileNames.lpstrFileTitle    = szTitleName ;
	FileNames.nMaxFileTitle     = MAX_PATH ;
	FileNames.lpstrInitialDir   = NULL ;
	FileNames.lpstrTitle        = NULL ;
	FileNames.Flags             = 0 ;
	FileNames.nFileOffset       = 0 ;
	FileNames.nFileExtension    = 0 ;
	FileNames.lpstrDefExt       = NULL;
	FileNames.lCustData         = 0 ;
	FileNames.lpfnHook          = NULL ;
	FileNames.lpTemplateName    = NULL ;

	GetOpenFileName(&FileNames);
	for(i=0,j=0; szFileName[i]; i++,j++)
	{
		if(szFileName[i]=='\\')
		{
			FileName[j++] = szFileName[i];
			FileName[j]='\\';
		}
		else
			FileName[j]=szFileName[i];
	}
	FileName[j] = 0;
	return 0;
}

LRESULT CALLBACK DlgProc(HWND hwnd,
						 UINT Msg,
						 WPARAM wParam,
						 LPARAM lParam)
{
	static TCHAR FileName[250] = {0};
	static TCHAR buffer[100];
	static int iPosition;
	static HANDLE hSlider;
	static MCI_PLAY_PARMS mciPlay;
	static MCI_OPEN_PARMS mciOpen;
	static MCI_DGV_SETAUDIO_PARMS mciSetAudioParm;

	switch (Msg)
	{
	case WM_CLOSE:
		EndDialog(hwnd,0);
		return 0;
	case WM_INITDIALOG:
		hSlider = GetDlgItem(hwnd,IDC_SLIDER1);
		SendMessage((HWND)hSlider,TBM_SETPOS,TRUE,20);
		mciSetAudioParm.dwValue = 200;
		mciSetAudioParm.dwItem = MCI_DGV_SETAUDIO_VOLUME;
		return 0;
	case WM_HSCROLL:
		switch (LOWORD(wParam))
		{
		case SB_THUMBPOSITION:
		case SB_PAGERIGHT:
		case SB_PAGELEFT:
			iPosition = SendMessage((HWND)hSlider,TBM_GETPOS,0,0);
			mciSetAudioParm.dwItem = MCI_DGV_SETAUDIO_VOLUME;
			mciSetAudioParm.dwValue = iPosition * 10;
			mciSendCommand(mciOpen.wDeviceID,MCI_SETAUDIO,MCI_DGV_SETAUDIO_VALUE | 
				MCI_DGV_SETAUDIO_ITEM,(DWORD_PTR)&mciSetAudioParm);
			return 0;
		default:
			return 0;
		}
		return 0;
	case WM_COMMAND:
		switch (LOWORD(wParam))
		{
		case IDB_SCAN:
			//打開文件
			_GetFileName(FileName,hwnd,_T("mp3"));
			SetDlgItemText(hwnd,IDC_EDIT,FileName);
			SetFocus(GetDlgItem(hwnd,IDB_PLAY));
			//開始播放
			mciOpen.lpstrElementName = (TCHAR *)malloc(250*sizeof(TCHAR));
			GetDlgItemText(hwnd,IDC_EDIT,(LPWSTR)mciOpen.lpstrElementName,250);
			mciSendCommand(0,MCI_OPEN,MCI_OPEN_ELEMENT,(DWORD_PTR)&mciOpen);
			mciSendCommand(mciOpen.wDeviceID,MCI_PLAY,MCI_NOTIFY,(DWORD_PTR)&mciPlay);
			//設置初始音量
			mciSendCommand(mciOpen.wDeviceID,MCI_SETAUDIO,MCI_DGV_SETAUDIO_VALUE |
				MCI_DGV_SETAUDIO_ITEM,(DWORD_PTR)&mciSetAudioParm);
			return 0;
			//從暫停中恢復播放
		case IDB_PLAY:
			mciSendCommand(mciOpen.wDeviceID,MCI_PLAY,MCI_NOTIFY,(DWORD_PTR)&mciPlay);
			return 0;
		case IDB_PAUSE:
			mciSendCommand(mciOpen.wDeviceID,MCI_PAUSE,MCI_NOTIFY,(DWORD_PTR)&mciPlay);
			return 0;
		default:
			return 0;
		}
		return 0;
	default:
		return 0;
	}
}

int APIENTRY WinMain(HINSTANCE hInstance,
					 HINSTANCE hPreInstance,
					 LPSTR lpCmdLine,
					 int nShowCmd)
{
	InitCommonControls();
	DialogBoxParam(hInstance,(LPCWSTR)IDD_DIALOG1,NULL,(DLGPROC)DlgProc,NULL);
	return 0;
}

.rc 文件

// Microsoft Visual C++ generated resource script.
//
#include "resource.h"

#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 2 resource.
//
#include "afxres.h"

/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS

/////////////////////////////////////////////////////////////////////////////
// Chinese (Simplified, PRC) resources

#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS)
LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED

#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//

1 TEXTINCLUDE 
BEGIN
    "resource.h\0"
END

2 TEXTINCLUDE 
BEGIN
    "#include ""afxres.h""\r\n"
    "\0"
END

3 TEXTINCLUDE 
BEGIN
    "\r\n"
    "\0"
END

#endif    // APSTUDIO_INVOKED


/////////////////////////////////////////////////////////////////////////////
//
// Dialog
//

IDD_DIALOG1 DIALOGEX 0, 0, 309, 177
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Mp3 Player"
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
    DEFPUSHBUTTON   "OK",IDOK,198,156,50,14
    PUSHBUTTON      "Cancel",IDCANCEL,252,156,50,14
    PUSHBUTTON      "open",IDB_SCAN,7,7,50,14
    PUSHBUTTON      "play",IDB_PLAY,7,131,61,16
    PUSHBUTTON      "pause",IDB_PAUSE,97,131,61,16
    CONTROL         "",IDC_SLIDER1,"msctls_trackbar32",TBS_BOTH | TBS_NOTICKS | WS_TABSTOP,183,128,108,18
    EDITTEXT        IDC_EDIT,152,7,130,24,ES_AUTOHSCROLL
END


/////////////////////////////////////////////////////////////////////////////
//
// DESIGNINFO
//

#ifdef APSTUDIO_INVOKED
GUIDELINES DESIGNINFO
BEGIN
    IDD_DIALOG1, DIALOG
    BEGIN
        LEFTMARGIN, 7
        RIGHTMARGIN, 302
        TOPMARGIN, 7
        BOTTOMMARGIN, 170
    END
END
#endif    // APSTUDIO_INVOKED

#endif    // Chinese (Simplified, PRC) resources
/////////////////////////////////////////////////////////////////////////////



#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 3 resource.
//


/////////////////////////////////////////////////////////////////////////////
#endif    // not APSTUDIO_INVOKED

resource.h 

//{{NO_DEPENDENCIES}}
// Microsoft Visual C++ generated include file.
// Used by Resource.rc
//
#define IDD_DIALOG1                     101
#define IDB_SCAN                        1002
#define IDB_PLAY                        1003
#define IDB_PAUSE                       1004
#define IDC_SLIDER1                     1005
#define IDC_EDIT1                       1006
#define IDC_EDIT                        1006

// Next default values for new objects
// 
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE        102
#define _APS_NEXT_COMMAND_VALUE         40001
#define _APS_NEXT_CONTROL_VALUE         1007
#define _APS_NEXT_SYMED_VALUE           101
#endif
#endif


發佈了28 篇原創文章 · 獲贊 7 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章