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

📄 myplayerdlg.cpp

📁 一种类似千千静听的音乐播放器
💻 CPP
📖 第 1 页 / 共 3 页
字号:
// MyPlayerDlg.cpp : implementation file
//

#include "stdafx.h"
#include "MyPlayer.h"
#include "MyPlayerDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#include "StarWarsCtrl.h"
/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About

class CAboutDlg : public CDialog
{
public:
	CAboutDlg();

// Dialog Data
	//{{AFX_DATA(CAboutDlg)
	enum { IDD = IDD_ABOUTBOX };
	CStarWarsCtrl m_starWar;
	//}}AFX_DATA

	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CAboutDlg)
	protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
	//}}AFX_VIRTUAL

// Implementation
protected:
	//{{AFX_MSG(CAboutDlg)
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
	//{{AFX_DATA_INIT(CAboutDlg)
	//}}AFX_DATA_INIT
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CAboutDlg)
	DDX_Control(pDX, IDC_STARWARS, m_starWar);
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
	//{{AFX_MSG_MAP(CAboutDlg)
		// No message handlers
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CMyPlayerDlg dialog

CMyPlayerDlg::CMyPlayerDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CMyPlayerDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CMyPlayerDlg)
	//}}AFX_DATA_INIT
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CMyPlayerDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CMyPlayerDlg)
	DDX_Control(pDX, IDC_BTN_SHOWMENU, m_btnShowMenu);
	DDX_Control(pDX, IDC_BTN_LYRIC, m_btnLyric);
	DDX_Control(pDX, IDC_BTN_VOLUME, m_volume);
	DDX_Control(pDX, IDC_BTN_SLIDE, m_slide);
	DDX_Control(pDX, IDC_STATIC_MODE, m_stcMode);
	DDX_Control(pDX, IDC_STATIC_PLAY, m_stcPlay);
	DDX_Control(pDX, IDC_BTN_STOP, m_btnStop);
	DDX_Control(pDX, IDC_BTN_PREV, m_btnPrev);
	DDX_Control(pDX, IDC_BTN_PLAYLIST_SHOW, m_btnPLShow);
	DDX_Control(pDX, IDC_BTN_PLAY, m_btnPlay);
	DDX_Control(pDX, IDC_BTN_OPEN, m_btnOpen);
	DDX_Control(pDX, IDC_BTN_NEXT, m_btnNext);
	DDX_Control(pDX, IDC_BTN_MIN, m_btnMin);
	DDX_Control(pDX, IDC_BTN_HIDE, m_btnHide);
	DDX_Control(pDX, IDC_BTN_EXIT, m_btnExit);
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CMyPlayerDlg, CDialog)
	//{{AFX_MSG_MAP(CMyPlayerDlg)
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_WM_LBUTTONDOWN()
	ON_BN_CLICKED(IDC_BTN_EXIT, OnBtnExit)
	ON_WM_CREATE()
	ON_WM_TIMER()
	ON_BN_CLICKED(IDC_STATIC_MODE, OnStaticMode)
	ON_BN_CLICKED(IDC_STATIC_PLAY, OnStaticPlay)
	ON_BN_CLICKED(IDC_BTN_VOLUME, OnBtnVolume)
	ON_BN_CLICKED(IDC_BTN_SLIDE, OnBtnSlide)
	ON_BN_CLICKED(IDC_BTN_PLAYLIST_SHOW, OnBtnPlaylistShow)
	ON_WM_MOVE()
	ON_BN_CLICKED(IDC_BTN_LYRIC, OnBtnLyric)
	ON_BN_CLICKED(IDC_BTN_OPEN, OnBtnOpen)
	ON_BN_CLICKED(IDC_BTN_NEXT, OnBtnNext)
	ON_BN_CLICKED(IDC_BTN_PLAY, OnBtnPlay)
	ON_BN_CLICKED(IDC_BTN_PREV, OnBtnPrev)
	ON_BN_CLICKED(IDC_BTN_STOP, OnBtnStop)
	ON_WM_RBUTTONDOWN()
	ON_BN_CLICKED(IDC_BTN_SHOWMENU, OnBtnShowmenu)
	ON_WM_KILLFOCUS()
	ON_COMMAND(IDC_MENU_NEXT, OnMenuNext)
	ON_COMMAND(IDC_MENU_OPEN, OnMenuOpen)
	ON_COMMAND(IDC_MENU_PLAY, OnMenuPlay)
	ON_COMMAND(IDC_MENU_PREV, OnMenuPrev)
	ON_COMMAND(IDC_MENU_RAND, OnMenuRand)
	ON_COMMAND(IDC_MENU_SEQ, OnMenuSeq)
	ON_COMMAND(IDC_MENU_SINGLE, OnMenuSingle)
	ON_COMMAND(IDC_MENU_STOP, OnMenuStop)
	ON_COMMAND(IDC_MENU_VOLDOWN, OnMenuVoldown)
	ON_COMMAND(IDC_MENU_PAUSE, OnMenuPause)
	ON_COMMAND(IDC_MENU_VOLSLC, OnMenuVolslc)
	ON_COMMAND(IDC_MENU_VOLUP, OnMenuVolup)
	ON_COMMAND(IDC_ABOUT_STAR, OnAboutStar)
	ON_MESSAGE(MYWM_NOTIFYICON,OnNotifyIcon)
	ON_BN_CLICKED(IDC_BTN_HIDE, OnBtnHide)
	ON_BN_CLICKED(IDC_BTN_MIN, OnBtnMin)
	ON_COMMAND(IDC_SET_LYRICPATH, OnSetLyricpath)
	ON_COMMAND(IDC_MENU_OPEN_LYRICPATH, OnMenuOpenLyricpath)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CMyPlayerDlg message handlers

BOOL CMyPlayerDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	// Add "About..." menu item to system menu.

	// IDM_ABOUTBOX must be in the system command range.
	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
	ASSERT(IDM_ABOUTBOX < 0xF000);

	CMenu* pSysMenu = GetSystemMenu(FALSE);
	if (pSysMenu != NULL)
	{
		CString strAboutMenu;
		strAboutMenu.LoadString(IDS_ABOUTBOX);
		if (!strAboutMenu.IsEmpty())
		{
			pSysMenu->AppendMenu(MF_SEPARATOR);
			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
		}
	}

	// Set the icon for this dialog.  The framework does this automatically
	//  when the application's main window is not a dialog
	SetIcon(m_hIcon, TRUE);			// Set big icon
	SetIcon(m_hIcon, FALSE);		// Set small icon
	
	// TODO: Add extra initialization here
	InitButtons();
	InitRect();
	InitText();
	InitSize();
	CreateLyric();
	CreatePlayList();
	m_pMenuDlg=NULL;
	InitFileList();

	strTitle="                星空旋律                ";
    strTime="00:00";
	m_nTime=0;
    fInited=TRUE;
	fPlaying=FALSE;
     fPlay=TRUE;
	nRollTextCounter=0;
    
	SetWindowText("星空旋律");

	m_strLyricPath="";

	if(ReadConfig()){
		m_pPlayListDlg->OpenList(nCurrentList);	
		m_volume.SetPos(m_nVolume);	
		if(m_nPlayMode==MODE_SEQ)
			OnStaticMode();
		if(m_nPlayMode==MODE_SINGLE){
			OnStaticMode();
			OnStaticMode();
		}
	}else{
		m_nPlayMode=MODE_RAND;
		nCurrentList=0;
	    m_pPlayListDlg->OpenList(nCurrentList);	
		m_nVolume=8;
		m_volume.SetPos(m_nVolume);	
	}

    CreateNotifyIcon();
    SetWindowPos(&CWnd::wndTopMost,0,0,0,0,SWP_NOSIZE|SWP_NOMOVE);
	m_pLyricDlg->SetPlayListWnd(m_pPlayListDlg);
	return TRUE;  // return TRUE  unless you set the focus to a control
}



// If you add a minimize button to your dialog, you will need the code below
//  to draw the icon.  For MFC applications using the document/view model,
//  this is automatically done for you by the framework.

void CMyPlayerDlg::OnPaint() 
{
	if (IsIconic())
	{
		CPaintDC dc(this); // device context for painting

		SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

		// Center icon in client rectangle
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;

		// Draw the icon
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CPaintDC dc(this);
		DrawMainPicture(&dc);
		DrawText(&dc);
		DrawTime(&dc);
		CDialog::OnPaint();
	}
}

// The system calls this to obtain the cursor to display while the user drags
//  the minimized window.
HCURSOR CMyPlayerDlg::OnQueryDragIcon()
{
	return (HCURSOR) m_hIcon;
}

void CMyPlayerDlg::InitButtons()
{
	CRect rect;
	rect.right=1000;
	rect.bottom=1000;

	rect.left=224;
	rect.top=42;
	m_btnOpen.MoveWindow(&rect,TRUE);
	m_btnOpen.Init(IDB_OPEN_NORMAL,IDB_OPEN_OVER,"打开文件");

	rect.left-=18;
	m_btnNext.MoveWindow(&rect,TRUE);
	m_btnNext.Init(IDB_NEXT_NORMAL,IDB_NEXT_OVER,"下一首");

	rect.left-=19;
	m_btnPrev.MoveWindow(&rect,TRUE);
	m_btnPrev.Init(IDB_PREV_NORMAL,IDB_PREV_OVER,"上一首");

	rect.left-=18;
	m_btnPlay.MoveWindow(&rect,TRUE);
	m_btnPlay.Init(IDB_PLAY_NORMAL,IDB_PLAY_OVER,"播放");

	rect.left-=20;
	m_btnStop.MoveWindow(&rect,TRUE);
	m_btnStop.Init(IDB_STOP_NORMAL,IDB_STOP_OVER,"停止");

	rect.top=0;
	rect.left=240;

	m_btnHide.MoveWindow(&rect,TRUE);
	m_btnHide.Init(IDB_HIDE_NORMAL,IDB_HIDE_OVER,"隐藏窗体");

	rect.left+=14;
	m_btnMin.MoveWindow(&rect,TRUE);
	m_btnMin.Init(IDB_MIN_NORMAL,IDB_MIN_OVER,"最小化");

	rect.left+=14;
	m_btnExit.MoveWindow(&rect,TRUE);
	m_btnExit.Init(IDB_EXIT_NORMAL,IDB_EXIT_OVER,"关闭");

	rect.top=100;
	rect.left=269;
	m_btnPLShow.MoveWindow(&rect,TRUE);
	m_btnPLShow.Init(IDB_PLAYLIST_HIDE_NORMAL,IDB_PLAYLIST_HIDE_OVER,"关闭播放列表");

	rect.top=81;
	rect.left=145;
	m_slide.MoveWindow(&rect,TRUE);
	m_slide.Init(IDB_SLIDEBKGND,IDB_SLIDE,"当前进度");

	rect.top=18;
	rect.left=274;
	m_volume.MoveWindow(&rect,TRUE);
	m_volume.Init(IDB_VOLUME,"调节音量");

	rect.top=88;
	rect.left=269;
	m_btnLyric.MoveWindow(&rect,TRUE);
	m_btnLyric.Init(IDB_LYRIC_HIDE_NORMAL,IDB_LYRIC_HIDE_OVER,"关闭歌词");
    
	rect.top=3;
	rect.left=3;
	m_btnShowMenu.MoveWindow(&rect,TRUE);
	m_btnShowMenu.Init(IDB_MENUSHOW,IDB_MENUSHOW,"主菜单");
}

void CMyPlayerDlg::DrawMainPicture(CDC*pDC)
{
	CDC MemDC;
	CBitmap bitmap;
	BITMAP m_bitmap;

	bitmap.LoadBitmap(IDB_MAIN);
	bitmap.GetBitmap(&m_bitmap);
	MemDC.CreateCompatibleDC(pDC);
	MemDC.SelectObject(&bitmap);
	
	pDC->BitBlt(0,0,m_bitmap.bmWidth,m_bitmap.bmHeight,&MemDC,
		0,0,SRCCOPY);

	bitmap.DeleteObject();
	MemDC.DeleteDC();
}

void CMyPlayerDlg::OnLButtonDown(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	PostMessage(WM_NCLBUTTONDOWN,HTCAPTION,MAKELPARAM (point.x, point.y));
     DestroyMenuDlg();
	CDialog::OnLButtonDown(nFlags, point);
}

void CMyPlayerDlg::DrawText(CDC *pDC)
{
	pDC->SetBkMode(TRANSPARENT);

	CFont font,*pOldFont;	
	LOGFONT logFont;
	pDC->GetCurrentFont()->GetLogFont(&logFont);

	logFont.lfCharSet=134;
	logFont.lfWidth=6;
	logFont.lfWeight=10;
	lstrcpy(logFont.lfFaceName,"华文彩云");
	font.CreateFontIndirect(&logFont);

	pOldFont=pDC->SelectObject(&font);
	pDC->SetTextColor(RGB(255,255,0));
	pDC->TextOut(21,48,"Love You Forever");

	font.DeleteObject();

    
	logFont.lfWidth=6;
	logFont.lfHeight=12;
	logFont.lfWeight=0;
	lstrcpy(logFont.lfFaceName,"宋体");
	font.CreateFontIndirect(&logFont);
	pDC->SelectObject(&font);


	pDC->SetTextColor(RGB(0,255,0));
	pDC->TextOut(22,35,strOutText);
	pDC->TextOut(22,66,"状态:");
	pDC->TextOut(75,90,"☆For My Love 邹其梅☆");
	pDC->SetTextColor(RGB(0,150,0));
	pDC->TextOut(60,103,"★星空旋律 MADE BY 梁志先★");

   font.DeleteObject();

	pDC->SelectObject(pOldFont);
	

}

void CMyPlayerDlg::OnBtnExit() 
{
	// TODO: Add your control notification handler code here
    ExitPlayer();
}

int CMyPlayerDlg::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
	if (CDialog::OnCreate(lpCreateStruct) == -1)
		return -1;
	
	// TODO: Add your specialized creation code here
	SetTimer(1,1000,NULL);
	fInited=FALSE;

	DragAcceptFiles(TRUE);

	return 0;
}

void CMyPlayerDlg::OnTimer(UINT nIDEvent) 
{
	// TODO: Add your message handler code here and/or call default

    RollText();
	if(fPlaying){
	   CountTime();
       MoveSlide();
	   CirculatePlay();
	}

	CDialog::OnTimer(nIDEvent);
}

void CMyPlayerDlg::RollText()
{
	TCHAR ch;
	strOutText="";
	for(UINT i=0;i<16;){
		ch=strTitle.GetAt(nRollTextCounter+i);
		strOutText+=ch;
		i++;		
	}
	nRollTextCounter+=2;
	if(nRollTextCounter>=strTitle.GetLength()-16)
		nRollTextCounter=0;

	InvalidateRect(&rectTitle,TRUE);
}

void CMyPlayerDlg::DrawTime(CDC *pDC)
{
	pDC->SetBkMode(TRANSPARENT);

	CFont font,*pOldFont;	
	LOGFONT logFont;
	pDC->GetCurrentFont()->GetLogFont(&logFont);

	logFont.lfCharSet=134;
	logFont.lfWidth=6;
	logFont.lfHeight=16;
	logFont.lfWeight=1000;
//	logFont.lfQuality=100;
	lstrcpy(logFont.lfFaceName,"方正舒体");
	font.CreateFontIndirect(&logFont);

	pOldFont=pDC->SelectObject(&font);
	pDC->SetTextColor(RGB(255,200,0));
	pDC->TextOut(180,60,strTime);

	font.DeleteObject();
	pDC->SelectObject(pOldFont);

	pDC->MoveTo(180,68);
	pDC->LineTo(225,68);
}



void CMyPlayerDlg::InitRect()
{	
	rectTitle.top=35;
	rectTitle.left=22;
	rectTitle.right=120;
	rectTitle.bottom=50;  

	rectTime.left=180;
	rectTime.top=60;
	rectTime.right=220;
	rectTime.bottom=75;
}

void CMyPlayerDlg::CountTime()
{
    m_nTime=MCIWndGetPosition(hAudio)/MCIWndGetSpeed(hAudio);
	int nMinute=m_nTime/60;
	int nSecond=m_nTime%60;
	if(nMinute<10){
		if(nSecond<10)
		  strTime.Format("0%d:0%d",nMinute,nSecond);
		else
			strTime.Format("0%d:%d",nMinute,nSecond);
	}else{
		if(nSecond<10)
		  strTime.Format("%d:0%d",nMinute,nSecond);
		else
			strTime.Format("%d:%d",nMinute,nSecond);
	}	   
	InvalidateRect(&rectTime,TRUE);
}

void CMyPlayerDlg::InitText()
{
	m_stcPlay.SetToolTipText("播放/暂停");
	m_stcMode.SetToolTipText("播放模式");

	CRect rect;
	rect.top=66;
	rect.left=55;
	rect.right=83;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -