本文轉自: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