📄 musicdlg.cpp
字号:
// MusicDlg.cpp : implementation file
//
#include "stdafx.h"
#include "BlueSky.h"
#include "MusicDlg.h"
#include "eci.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CMusicDlg dialog
CMusicDlg::CMusicDlg(CWnd* pParent /*=NULL*/)
: CDialog(CMusicDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CMusicDlg)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
}
void CMusicDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CMusicDlg)
// NOTE: the ClassWizard will add DDX and DDV calls here
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CMusicDlg, CDialog)
//{{AFX_MSG_MAP(CMusicDlg)
ON_WM_PAINT()
ON_WM_CTLCOLOR()
ON_WM_MOUSEMOVE()
ON_WM_LBUTTONDBLCLK()
ON_WM_RBUTTONDBLCLK()
ON_WM_TIMER()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CMusicDlg message handlers
void CMusicDlg::OnOK()
{
CDialog::OnOK();
}
BOOL CMusicDlg::OnInitDialog()
{
CDialog::OnInitDialog();
SetWindowPos(NULL,0,0,1024,768,0);//全屏显示
brush.CreateSolidBrush(RGB(0,120,220));//初始化背景画刷
CString strFilePath = _T("E:\\MusicFile\\*.*");
CFileFind find;
BOOL bFind = find.FindFile(strFilePath);
while (bFind)//查找音乐文件,初始化文件列表
{
bFind = find.FindNextFile();
CString filename = find.GetFilePath();
if (filename.Right(3) == _T("mp3") || filename.Right(3) == _T("MP3"))
{
fileList.AddTail(filename);
}
}
//hEci = NULL;
pos = fileList.GetHeadPosition();
if (pos)
filename = fileList.GetAt(pos);
return TRUE;
}
void CMusicDlg::OnPaint()
{
CPaintDC dc(this);
CPen pen(PS_INSIDEFRAME,5,RGB(200,180,0));
CFont font,*pOldFont,font2;
font.CreatePointFont(300,_T("楷体_GB2312"));
pOldFont = dc.SelectObject(&font);
CString s = _T("我的音乐");
dc.SetBkMode(TRANSPARENT);
dc.SetTextColor(RGB(0,220,0));
dc.TextOut(435,100,s,s.GetLength());//输出对话框标题
CPen *pOldPen = dc.SelectObject(&pen);
dc.SelectStockObject(NULL_BRUSH);
CBrush brush(RGB(220,230,220));
CBrush *pOldBrush = dc.SelectObject(&brush);
dc.Rectangle(412,300,612,610);
CPen pen2(PS_SOLID,1,RGB(200,180,0));
dc.SelectObject(&pen2);
for(int i=0; i<5; i++) //画自定义菜单项
{
dc.MoveTo(412,355+50*i);
dc.LineTo(612,355+50*i);
}
font2.CreatePointFont(160,_T("楷体_GB2312"));
dc.SetTextColor(RGB(255,0,0));
dc.SelectObject(&font2);
dc.TextOut(470,320,_T("向上搜索"));
dc.TextOut(470,370,_T("当前音乐"));
dc.TextOut(470,420,_T("向下搜索"));
dc.TextOut(470,470,_T("播放音乐"));
dc.TextOut(470,520,_T("返 回"));
dc.TextOut(470,570,_T("退出系统"));
dc.SelectObject(pOldBrush);
dc.SelectObject(pOldPen);
dc.SelectObject(pOldFont);
}
HBRUSH CMusicDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
//设置背景色
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
if (pWnd->m_hWnd == m_hWnd)
return brush;
return hbr;
}
void CMusicDlg::OnMouseMove(UINT nFlags, CPoint point)
{
char c=NULL;
switch ((point.y-305)/50)
{
case 0: c='1'; break;
case 1: c='2'; break;
case 2: c='3'; break;
case 3: c='4'; break;
case 4: c='5'; break;
case 5: c='6'; break;
}
if( c!=pointchar)
{
pointchar=c;
switch(c)
{
case '1': eciSpeakText("向上搜索",0); break;
case '2': eciSpeakText("当前音乐",0); break;
case '3': eciSpeakText("向下搜索",0); break;
case '4': eciSpeakText("播放音乐",0); break;
case '5': eciSpeakText("返 回",0); break;
case '6': eciSpeakText("退出系统",0); break;
}
}
CDialog::OnMouseMove(nFlags, point);
}
void CMusicDlg::OnLButtonDblClk(UINT nFlags, CPoint point)
{
//向上搜索音乐文件
if (point.y<355)
{
if (pos)
{
fileList.GetPrev(pos);
if (!pos)
pos = fileList.GetHeadPosition();
filename = fileList.GetAt(pos);
MessageBox(filename);
}
}
//获取当前文件名
if (point.y>355 && point.y<405)
{
filename = fileList.GetAt(pos);
MessageBox(filename);
}
//向下搜索音乐文件
if (point.y>405 && point.y<455)
{
if (pos)
{
POSITION oldPos = pos;
fileList.GetNext(pos);
if (!pos)
pos = oldPos;
filename = fileList.GetAt(pos);
MessageBox(filename);
}
}
//利用MCI设备播放音乐
if (point.y>455 && point.y<505)
{
CRect rc(0,610,1024,768);
ClipCursor(&rc);
MCI_OPEN_PARMS mciOpen;
MCI_PLAY_PARMS mciPlay;
DWORD cdfrom;
DWORD cdto;
//char dir[1024];
//GetCurrentDirectory(1024,dir);
//strcat(dir,"\\sd.mp3");
mciOpen.lpstrElementName=filename;
mciOpen.lpstrDeviceType=NULL;
mciSendCommand(0,MCI_OPEN,MCI_DEVTYPE_WAVEFORM_AUDIO,(DWORD)(LPVOID)&mciOpen);//打开音乐文件
deviceId = mciOpen.wDeviceID;
mciPlay.dwCallback=(DWORD)GetSafeHwnd();
playLength = GetPlayLength();//获到音乐文件播放时间
cdfrom=MCI_MAKE_HMS(0,0,0);
cdto=MCI_MAKE_HMS(MCI_HMS_HOUR(playLength),MCI_HMS_MINUTE(playLength),MCI_HMS_SECOND(playLength));
mciPlay.dwFrom=cdfrom;
mciPlay.dwTo=cdto;
mciSendCommand(deviceId,MCI_PLAY,MCI_TO|MCI_FROM,(DWORD)(LPVOID)& mciPlay);//播放音乐文件
playLength = playLength/1000;
SetTimer(10,1000,NULL);
bPlay = true;
}
//返回主界面
if (point.y>505 && point.y<555)
{
CDialog::OnCancel();
}
//结束程序,退出
if (point.y>555 && point.y<605)
{
/*if (hEci)
if (eciSpeaking(hEci))
{
eciStop(hEci);
eciDelete(hEci);
}*/
exit(0);
}
//暂停或继续播放
if (point.y>=610)
{
if (bPlay)
{
if (deviceId != 0)
mciSendCommand(deviceId,MCI_PAUSE,0,NULL);
bPlay = false;
}
else
{
mciSendCommand(deviceId,MCI_RESUME,0,NULL);
bPlay = true;
}
}
CDialog::OnLButtonDblClk(nFlags, point);
}
DWORD CMusicDlg::GetPlayLength()
{
//获取音乐文件播放时间
MCI_STATUS_PARMS mcistatusparms;
mcistatusparms.dwCallback=(DWORD)GetSafeHwnd();
mcistatusparms.dwItem=MCI_STATUS_LENGTH;
mcistatusparms.dwReturn=0;
mciSendCommand(deviceId,MCI_STATUS,MCI_STATUS_ITEM,(DWORD)&mcistatusparms);
return mcistatusparms.dwReturn;
}
BOOL CMusicDlg::DestroyWindow()
{
if (deviceId != 0)
{
mciSendCommand(deviceId,MCI_CLOSE,0,NULL);
deviceId = 0;
}
return CDialog::DestroyWindow();
}
void CMusicDlg::ClipWindow()
{
//设置鼠标活动区域
CRect rect(417,306,608,606);
ClipCursor(&rect);
}
void CMusicDlg::OnRButtonDblClk(UINT nFlags, CPoint point)
{
//停止播放,返回
if (point.y>610)
if (deviceId != 0)
{
mciSendCommand(deviceId,MCI_CLOSE,0,NULL);
deviceId = 0;
ClipWindow();
}
CDialog::OnRButtonDblClk(nFlags, point);
}
void CMusicDlg::OnTimer(UINT nIDEvent)
{
//检测是否播放完毕,如播完将鼠标退回
playLength-- ;
if (!playLength)
{
if (deviceId != 0)
{
mciSendCommand(deviceId,MCI_CLOSE,0,NULL);
deviceId = 0;
}
KillTimer(10);
ClipWindow();
}
CDialog::OnTimer(nIDEvent);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -