首页 - 新闻 - vs2010 写音乐播放器_VS2010 基于windows media player做音乐播放器,问题解析(已验证)

vs2010 写音乐播放器_VS2010 基于windows media player做音乐播放器,问题解析(已验证)

2023-09-15 19:22

// 古董音乐播放器:主框架

#include

#include

void PopFileInitialize(HWND);

BOOL PopFileOpenDlg(HWND, PTSTR, PTSTR);

void paly_mp3(char *dress);

void pause_mp3();

void reset_mp3();

struct

{

int iStyle;

TCHAR *szText;

}

button[] = {

BS_PUSHBUTTON, TEXT("OPEN"),

BS_PUSHBUTTON, TEXT("PLAY"),

BS_PUSHBUTTON, TEXT("PAUSE"),

BS_PUSHBUTTON, TEXT("RESET"),

BS_PUSHBUTTON, TEXT("EXIT"),

};

#define NUM (sizeof button/sizeof button[0])

TCHAR szAppName[] = TEXT("BtnLook");

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,?

PSTR szCmdLine, int iCmdShow)

{

HWND ? ? hwnd;

MSG ? ? ?msg;

WNDCLASS wndclass;

www.gsm-guard.net = CS_HREDRAW | CS_VREDRAW;

wndclass.lpfnWndProc = WndProc;

wndclass.cbClsExtra = 0;

wndclass.cbWndExtra = 0;

wndclass.hInstance = hInstance;

wndclass.hIcon = (HICON)::LoadImage(NULL, "bitbug_favicon.ico", IMAGE_ICON, 0, 0, LR_DEFAULTSIZE | LR_LOADFROMFILE);

wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);

//wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);

wndclass.hbrBackground = CreateSolidBrush(RGB(255,0,0));

wndclass.lpszMenuName = NULL;

wndclass.lpszClassName = szAppName;

if (!RegisterClass(&wndclass))

{

MessageBox(NULL, TEXT("This program requires Windows NT !"), szAppName, MB_ICONERROR);

return 0;

}

hwnd = CreateWindow(szAppName, TEXT("古董音乐播放器"),

WS_OVERLAPPEDWINDOW,

200, 200,

290, 160,

NULL, NULL, hInstance, NULL);

ShowWindow(hwnd, iCmdShow);

UpdateWindow(hwnd);

while (GetMessage(&msg, NULL, 0, 0))

{

TranslateMessage(&msg);

DispatchMessage(&msg);

}

return msg.wParam;

}

LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)

{

static HWND hwndButton[NUM];

static RECT rect;

static HDC hdc;

static TCHAR szBuffer[50];

static TCHAR szTop[] = TEXT("当前播放歌曲:");

static TCHAR szFileName[MAX_PATH], szTitleName[MAX_PATH];

static int cxChar, cyChar;

static PAINTSTRUCT ps;

static int i;

switch (message)

{

case WM_CREATE:

cxChar = LOWORD(GetDialogBaseUnits());

cyChar = HIWORD(GetDialogBaseUnits());

for (i = 0; i < NUM; i++)

hwndButton[i] = CreateWindow(TEXT("button"),

button[i].szText,

WS_CHILD | WS_VISIBLE | button[i].iStyle,

cyChar*(1 + 3 * i), cyChar * 5,

6 * cxChar, 7 * cyChar / 4.5,

hwnd, (HMENU)i, ((LPCREATESTRUCT)lParam)->hInstance, NULL);

PopFileInitialize(hwnd);

EnableWindow(GetDlgItem(hwnd, 1), FALSE);

EnableWindow(GetDlgItem(hwnd, 2), FALSE);

EnableWindow(GetDlgItem(hwnd, 3), FALSE);

return 0;

case WM_SIZE:

rect.left = 24 * cxChar;

www.gsm-guard.net = 2 * cyChar;

rect.right = LOWORD(lParam);

rect.bottom = HIWORD(lParam);

return 0;

case WM_PAINT:

InvalidateRect(hwnd, &rect, TRUE);

hdc = BeginPaint(hwnd, &ps);

SetBkMode(hdc, TRANSPARENT);

TextOut(hdc, 2 * cxChar, cyChar, szTop, lstrlen(szTop));

EndPaint(hwnd, &ps);

return 0;

case WM_DRAWITEM:

return 0;

case WM_COMMAND:

switch (LOWORD(wParam))

{

case 0:

if (!PopFileOpenDlg(hwnd, szFileName, szTitleName))

{

MessageBox(hwnd, TEXT("未选择音乐歌曲!"), szTitleName, 0);

szFileName[0] = '\0';

szTitleName[0] = '\0';

}

else

{

hdc = GetDC(hwnd);

TextOut(hdc, 2 * cxChar, 3 * cyChar, szTitleName, lstrlen(szTitleName));

EnableWindow(GetDlgItem(hwnd, 0), FALSE);

EnableWindow(GetDlgItem(hwnd, 1), TRUE);

EnableWindow(GetDlgItem(hwnd, 2), TRUE);

EnableWindow(GetDlgItem(hwnd, 3), TRUE);

}

return 0;

case 1:

paly_mp3(szFileName);

return 0;

case 2:

pause_mp3();

return 0;

case 3:

reset_mp3();

EnableWindow(GetDlgItem(hwnd, 0), TRUE);

EnableWindow(GetDlgItem(hwnd, 1), FALSE);

EnableWindow(GetDlgItem(hwnd, 2), FALSE);

szFileName[0] = '\0';

szTitleName[0] = '\0';

return 0;

case 4:

exit(0);

return 0;

}

return 0;

case WM_DESTROY:

exit(0);

return 0;

}

return DefWindowProc(hwnd, message, wParam, lParam);

}

///******打开文件对话框********/ #include #include ? //通信相关的连接对话框 static OPENFILENAME ofn;//实现对话框,为一个类 void PopFileInitialize(HWND hwnd) { static TCHAR szFilter[] = TEXT("mp3 Files (*.MP3)\0*.mp3\0") \ TEXT("wma Files (*.WMA)\0*.wma\0") \ TEXT("ALL Files (*.*)\0*.*\0\0");//播放哪些文件,text强制转换,能把MP3的文件全部播放出来 ofn.lStructSize = sizeof(OPENFILENAME); ofn.hwndOwner = hwnd; ofn.hInstance = NULL; ofn.lpstrFilter = szFilter; ofn.lpstrCustomFilter = NULL; ofn.nMaxCustFilter = 0; ofn.nFilterIndex = 0; ofn.lpstrFile = NULL; ofn.nMaxFile = MAX_PATH; ofn.lpstrFileTitle = NULL; ofn.nMaxFileTitle = MAX_PATH; ofn.lpstrInitialDir = NULL; ofn.lpstrTitle = NULL; ofn.Flags = 0; ofn.nFileOffset = 0; ofn.nFileExtension = 0; ofn.lpstrDefExt = TEXT("txt"); ofn.lCustData = 0L; ofn.lpfnHook = NULL; ofn.lpTemplateName = NULL; } BOOL PopFileOpenDlg(HWND hwnd, PTSTR pstrFileName, PTSTR pstrTitleName) { ofn.hwndOwner = hwnd; ofn.lpstrFile = pstrFileName; ofn.lpstrFileTitle = pstrTitleName; ofn.Flags = OFN_HIDEREADONLY | OFN_CREATEPROMPT; return GetOpenFileName(&ofn); }

/***实现播放*****/ /*** 播放,暂停,重置 *****/ #include #include #include #include #include #define SHOWMSG(_msg) MessageBox(NULL,_msg,TEXT("msg"),MB_OK) MCI_PLAY_PARMS mciPlay; UINT DeviceID; MCI_OPEN_PARMS mciOpen; #pragma comment(lib,"winmm.lib")? // 播放MP3音乐? void paly_mp3(char *dress) { char buf[128] = { 0 }; MCIERROR mciError; mciOpen.lpstrDeviceType = "mpegvideo"; mciOpen.lpstrElementName = dress; ? ? ? ? ? ?// 播放文件的地址,支持mp3格式 mciError = mciSendCommand(0, MCI_OPEN, MCI_OPEN_TYPE | MCI_OPEN_ELEMENT, (DWORD)&mciOpen); if (mciError) { mciGetErrorString(mciError,buf, 128); } DeviceID = mciOpen.wDeviceID; mciError = mciSendCommand(DeviceID, MCI_PLAY, 0, (DWORD)&mciPlay); if (mciError) { MessageBox(NULL, TEXT("Send MCI_Play Command Failed!"), NULL, 0); } } // 暂停音乐播放 void pause_mp3() { DWORD dwReturn = 0; dwReturn = mciSendCommand(DeviceID, MCI_PAUSE, 0, (DWORD)&mciPlay); if (dwReturn){ SHOWMSG("MCI Stop Error."); } } // 重置 void reset_mp3() { DWORD dwReturn = 0; dwReturn = mciSendCommand(DeviceID, MCI_STOP, 0, (DWORD)&mciPlay); if (dwReturn){ SHOWMSG("MCI Stop Error."); } dwReturn = mciSendCommand(DeviceID, MCI_CLOSE, 0, (DWORD)&mciPlay); if (dwReturn){ SHOWMSG("MCI Close Error."); } }

一、添加媒体操作变量:

CWMPPlayer40 mPlayer4;//插件变量 ?CWMPSettings mSet;?//setting变量 ?CWMPControls mmCtrl;// Controls变量 ?CWMPPlaylist mlist; //list变量

CWMPMedia mMedia;//媒体文件变量 ?

二、OnInitDialog()

mPlayer4.put_URL(_T("F:\\CloudMusic\\刘珂矣 - 如是.mp3"));

mmCtrl = static_cast(mPlayer4.get_controls());//成员变量初始化 ?mSet? = static_cast(mPlayer4.get_settings()); ?mlist = static_cast(mPlayer4.get_currentPlaylist()); ? ?mPlayer4.put_currentPlaylist(mlist);?//不必须,设置播放列表 ?mSet.put_autoStart(TRUE);//自动播放 ?mSet.setMode(_T("loop"),TRUE);//单曲循环

?----------------------------------------------------------------------------------------------------------------

CFileDialog file(TRUE,_T(""),_T(""), ??OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT, ??_T("(*.*)|*.*|(*.mp3)|*.mp3|(*.avi)|*.avi")); ?if (file.DoModal()) ?{ ??mPlayer4.put_URL(file.GetPathName()); ??SetDlgItemText(IDC_BUTTON4,mPlayer4.get_URL()); ??mMedia = static_cast(mPlayer4.newMedia(file.GetPathName())); ??mlist.appendItem(mMedia); ??mPlayer4.put_currentPlaylist(mlist); ??CString info; ??long mCount = mMedia.get_attributeCount(); ??for (long i = 0;i

??TRACE("\n\n\n\n"); ?}

-------------------------------------------------------------------------------

void CSqlAdoDlg::OnBnClickedButton7() { ?// TODO: Add your control notification handler code here ?CString str; ?GetDlgItemText(IDC_BUTTON7,str); ?if (str==_T("暂停")) ?{ ??mmCtrl.pause(); ??SetDlgItemText(IDC_BUTTON7,_T("继续")); ?}else{ ??www.gsm-guard.net(); ??SetDlgItemText(IDC_BUTTON7,_T("暂停")); ?} ? }

MFC入门-MCI简单音乐播放器实现

实现功能:

1)????????播放

2)????????暂停/恢复

3)????????停止

4)????????音量调节

?

实现步骤:

1创建工程

打开VS2010,新建-》文件-》新建项目:

点击确认之后:

点击下一步:

选择“基于对话框”,点击“下一步”:

点击“下一步”:

点击“下一步”:

默认选项,点击“完成”

默认生成的界面。

2界面制作

界面制作如下:

音乐播放界面

这里说明每个控件对应的Id:

文件名称后面的编辑框:IDC_filename

浏览按钮:IDC_filechoice

播放按钮:IDC_play

暂停按钮:IDC_pause

停止按钮:IDC_stop

音量调节里面的编辑框:IDC_volume

音量滑动条:IDC_SLIDER1

版本说明按钮:IDC_about

退出软件按钮:IDC_exitbtn

软件说明界面:

3逻辑功能实现

3.1软件说明:

void Cmfc_music_playerDlg::OnBnClickedabout()

{

// TODO: 在此添加控件通知处理程序代码

CAboutDlg dlg;

dlg.DoModal(); //弹出软件说明

}

3.2退出软件:

void Cmfc_music_playerDlg::OnBnClickedexitbt()

{

// TODO: 在此添加控件通知处理程序代码

CDialog::OnCancel(); //退出

}

3.3加载

添加头文件和库:

#include

#include

#pragma comment(lib, "Winmm.lib")

//定义三个全局变量

HWND m_hWnd;

DWORD DeviceId;

MCI_OPEN_PARMS mciopenparms;

//加载

void Load(HWND hWnd, CString strFilepath)

{

m_hWnd = hWnd;

mciSendCommand(DeviceId, MCI_CLOSE, 0, 0); //在加载文件前先清空上一次播放的设备

mciopenparms.lpstrElementName = strFilepath; //将音乐文件路径传给设备

DWORD dwReturn;

if (dwReturn = mciSendCommand(NULL, MCI_OPEN, MCI_OPEN_ELEMENT | MCI_WAIT, (DWORD)(LPVOID)&mciopenparms))

{

//如果打开玩家失败,将出错信息储存在buffer,并显示出错警告

char buffer[256];

mciGetErrorString(dwReturn, buffer, 256); //获取错误码对应的错误信息

MessageBox(hWnd, buffer, "出错警告!", MB_ICONHAND | MB_ICONERROR | MB_ICONSTOP); //弹出错误信息提示对话框

}

DeviceId = mciopenparms.wDeviceID;

//打开文件成功就关联文件到设备

}

3.4播放

//播放

void play()

{

MCI_PLAY_PARMS mciplayparms;

mciplayparms.dwCallback = (DWORD)m_hWnd;

mciplayparms.dwFrom = 0; //每次播放都是从0开始播放

mciSendCommand(DeviceId, MCI_PLAY, MCI_FROM | MCI_NOTIFY, (DWORD)(LPVOID)&mciplayparms);

}

3.5暂停

void pause()

{

mciSendCommand(DeviceId, MCI_PAUSE, 0, 0);

}

3.6恢复

void resume()

{

mciSendCommand(DeviceId, MCI_RESUME, 0, 0);

}

3.7停止

void stop()

{

mciSendCommand(DeviceId, MCI_STOP, 0, 0);

mciSendCommand(DeviceId, MCI_CLOSE, 0, 0);

//当点击停止按钮时,将所有的信息都清除掉

}

3.8音量调节

//设置音量

DWORD setVolume(DWORD vol)

{

MCI_DGV_SETAUDIO_PARMS setvolume; //设置音量的参数结构体

setvolume.dwCallback = NULL; //

setvolume.dwItem = MCI_DGV_SETAUDIO_VOLUME; //动作是设置音量

setvolume.dwValue = vol; //音量值是vol

mciSendCommand(DeviceId, MCI_SETAUDIO, MCI_DGV_SETAUDIO_ITEM | MCI_DGV_SETAUDIO_VALUE, (DWORD)(LPVOID)&setvolume);

return 0;

}

4界面事件关联

4.1文件选择

void Cmfc_music_playerDlg::OnBnClickedfilechoice()

{

// TODO: 在此添加控件通知处理程序代码

char szFileFilter[] = "mp3文件(*.mp3)|*.mp3|"

"wma文件(*.wma)|*.wma|"

"wav文件(*.wav)|*.wav|"

"所有文件(*.*)|*.*|";

CFileDialog dlg(true, NULL, NULL, OFN_HIDEREADONLY, szFileFilter);

if (dlg.DoModal() == IDOK)

{

CString strFilepath = dlg.GetPathName();

CString strFilename = dlg.GetFileName();

SetDlgItemText(IDC_filename, strFilename);

Load(this->m_hWnd, strFilepath);

}

GetDlgItem(IDC_play)->EnableWindow(true); //文件读取成功时所有按钮变成可选

GetDlgItem(IDC_pause)->EnableWindow(true);

GetDlgItem(IDC_stop)->EnableWindow(true);

}

4.2播放按钮

void Cmfc_music_playerDlg::OnBnClickedplay()

{

// TODO: 在此添加控件通知处理程序代码

play();

SetDlgItemText(IDC_pause, "暂停");

}

4.3暂停/恢复按钮

void Cmfc_music_playerDlg::OnBnClickedpause()

{

// TODO: 在此添加控件通知处理程序代码

CString strTemp;

GetDlgItemText(IDC_pause, strTemp); //获取按钮的状态

if (strTemp.Compare("暂停") == 0)

{

pause();

SetDlgItemText(IDC_pause, "恢复");

}

if (strTemp.Compare("恢复") == 0)

{

resume();

SetDlgItemText(IDC_pause, "暂停");

}

}

4.4停止按钮

void Cmfc_music_playerDlg::OnBnClickedstop()

{

// TODO: 在此添加控件通知处理程序代码

stop();

SetDlgItemText(IDC_pause, "暂停");

GetDlgItem(IDC_play)->EnableWindow(false); //当按下stop的时候,播放和暂停不可选

GetDlgItem(IDC_pause)->EnableWindow(false);

}

CSDN下载:http://www.gsm-guard.net/detail/u012377333/9520199

git源码:support@www.gsm-guard.net:u012377333/mfc_music_player.git

0条大神的评论

发表评论