⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 musicdlg.cpp

📁 蓝天盲人电脑软件
💻 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 + -