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

📄 winampclassdlg.cpp

📁 mp3文件操作
💻 CPP
字号:
// WinampClassDlg.cpp : Implementierungsdatei
//

#include "stdafx.h"
#include "WinampClass.h"
#include "WinampClassDlg.h"

#include "winamp2.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CWinampClassDlg Dialogfeld

CWinampClassDlg::CWinampClassDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CWinampClassDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CWinampClassDlg)
	m_strTrackTitle = _T("N/A");
	m_strTrackLength = _T("N/A");
	m_strTrackChannels = _T("N/A");
	m_strTrackBitrateSampler = _T("N/A");
	m_iTrackPos = 0;
	m_iPreampVol = 0;
	m_strStatus = _T("N/A");
	m_strPlaylistEntry = _T("N/A");
	m_bEQEnabled = FALSE;
	m_bEQAuto = FALSE;
	m_iVolume = 0;
	m_strPlsCount = _T("N/A");
	m_strPlsSelected = _T("N/A");
	//}}AFX_DATA_INIT
	// Beachten Sie, dass LoadIcon unter Win32 keinen nachfolgenden DestroyIcon-Aufruf ben鰐igt
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CWinampClassDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CWinampClassDlg)
	DDX_Control(pDX, IDC_VOLUME, m_ctlVolume);
	DDX_Control(pDX, IDC_TRACKPOS, m_ctlTrackPos);
	DDX_Text(pDX, IDC_TRACK_TITLE, m_strTrackTitle);
	DDX_Text(pDX, IDC_TRACK_LENGTH, m_strTrackLength);
	DDX_Text(pDX, IDC_TRACK_CHANNELS, m_strTrackChannels);
	DDX_Text(pDX, IDC_TRACK_BITRATE_SAMPLER, m_strTrackBitrateSampler);
	DDX_Slider(pDX, IDC_TRACKPOS, m_iTrackPos);
	DDX_Slider(pDX, IDC_PREAMPVOL, m_iPreampVol);
	DDX_Text(pDX, IDC_STATUS, m_strStatus);
	DDX_Text(pDX, IDC_PLAYLIST_ENTRY, m_strPlaylistEntry);
	DDX_Check(pDX, IDC_EQENABLED, m_bEQEnabled);
	DDX_Check(pDX, IDC_EQAUTO, m_bEQAuto);
	DDX_Slider(pDX, IDC_VOLUME, m_iVolume);
	DDX_Text(pDX, IDC_PLS_COUNT, m_strPlsCount);
	DDX_Text(pDX, IDC_PLS_SELECTED, m_strPlsSelected);
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CWinampClassDlg, CDialog)
	//{{AFX_MSG_MAP(CWinampClassDlg)
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_WM_TIMER()
	ON_BN_CLICKED(IDC_EQPRESETS, OnEqpresets)
	ON_BN_CLICKED(IDC_PREV, OnPrev)
	ON_BN_CLICKED(IDC_REW, OnRewind)
	ON_BN_CLICKED(IDC_PLAY, OnPlay)
	ON_BN_CLICKED(IDC_PAUSE, OnPause)
	ON_BN_CLICKED(IDC_FORWARD, OnForward)
	ON_BN_CLICKED(IDC_NEXT, OnNext)
	ON_BN_CLICKED(IDC_OPEN, OnOpen)
	ON_COMMAND(IDM_LOAD_PRESET, OnLoadPreset)
	ON_COMMAND(IDM_LOAD_AUTOLOAD, OnLoadAutoload)
	ON_COMMAND(IDM_LOAD_DEFAULT, OnLoadDefault)
	ON_COMMAND(IDM_LOAD_FROMEQF, OnLoadFromeqf)
	ON_COMMAND(IDM_SAVE_AUTOLOAD, OnSaveAutoload)
	ON_COMMAND(IDM_SAVE_DEFAULT, OnSaveDefault)
	ON_COMMAND(IDM_SAVE_PRESET, OnSavePreset)
	ON_COMMAND(IDM_SAVE_TOEQF, OnSaveToEQF)
	ON_COMMAND(IDM_DELETE_PRESET, OnDeletePreset)
	ON_COMMAND(IDM_DELETE_AUTOLOAD, OnDeleteAutoload)
	ON_BN_CLICKED(IDC_PLS_ADDURL, OnPlsAddurl)
	ON_BN_CLICKED(IDC_PLS_ADDDIR, OnPlsAdddir)
	ON_BN_CLICKED(IDC_PLS_ADDFILE, OnPlsAddfile)
	ON_BN_CLICKED(IDC_PLS_SORTBYTITLE, OnPlsSortbytitle)
	ON_BN_CLICKED(IDC_PLS_SORTBYFILENAME, OnPlsSortbyfilename)
	ON_BN_CLICKED(IDC_PLS_SORTBYFILEPATH, OnPlsSortbyfilepath)
	ON_BN_CLICKED(IDC_PLS_REVERSE, OnPlsReverse)
	ON_BN_CLICKED(IDC_PLS_RANDOMIZE, OnPlsRandomize)
	ON_BN_CLICKED(IDC_PLS_CLEAR, OnPlsClear)
	ON_WM_HSCROLL()
	ON_WM_VSCROLL()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

CWinamp amp;

int EQBand[10] = {
	IDC_BAND0,
	IDC_BAND1,
	IDC_BAND2,
	IDC_BAND3,
	IDC_BAND4,
	IDC_BAND5,
	IDC_BAND6,
	IDC_BAND7,
	IDC_BAND8,
	IDC_BAND9
};

/////////////////////////////////////////////////////////////////////////////
// CWinampClassDlg Nachrichten-Handler

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

	// Symbol f黵 dieses Dialogfeld festlegen. Wird automatisch erledigt
	//  wenn das Hauptfenster der Anwendung kein Dialogfeld ist
	SetIcon(m_hIcon, TRUE);			// Gro遝s Symbol verwenden
	SetIcon(m_hIcon, FALSE);		// Kleines Symbol verwenden
	
	// ZU ERLEDIGEN: Hier zus鋞zliche Initialisierung einf黦en
	if(!amp.FindWinamp())
	{
		MessageBox("Winamp is not running! Terminating.", "Error", MB_OK|MB_ICONINFORMATION);
		PostQuitMessage(0);
	}

	for(int i=0; i<10; i++)
		((CSliderCtrl*)GetDlgItem(EQBand[i]))->SetRange(0,63);

	((CSliderCtrl*)GetDlgItem(IDC_PREAMPVOL))->SetRange(0,63);
	((CSliderCtrl*)GetDlgItem(IDC_VOLUME))->SetRange(0,255);

	SetTimer(0, 1000, NULL);
	
	return TRUE;  // Geben Sie TRUE zur點k, au遝r ein Steuerelement soll den Fokus erhalten
}

// Wollen Sie Ihrem Dialogfeld eine Schaltfl鋍he "Minimieren" hinzuf黦en, ben鰐igen Sie 
//  den nachstehenden Code, um das Symbol zu zeichnen. F黵 MFC-Anwendungen, die das 
//  Dokument/Ansicht-Modell verwenden, wird dies automatisch f黵 Sie erledigt.

void CWinampClassDlg::OnPaint() 
{
	if (IsIconic())
	{
		CPaintDC dc(this); // Ger鋞ekontext f黵 Zeichnen

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

		// Symbol in Client-Rechteck zentrieren
		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;

		// Symbol zeichnen
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialog::OnPaint();
	}
}

// Die Systemaufrufe fragen den Cursorform ab, die angezeigt werden soll, w鋒rend der Benutzer
//  das zum Symbol verkleinerte Fenster mit der Maus zieht.
HCURSOR CWinampClassDlg::OnQueryDragIcon()
{
	return (HCURSOR) m_hIcon;
}

void CWinampClassDlg::OnTimer(UINT nIDEvent) 
{
	// update title, bitrate, samplerrate  and no of channels
	m_strTrackTitle = amp.GetCurrentTitle();
	m_strTrackBitrateSampler.Format("%ikbps  %ikHz", amp.TrackGetBitrate(), amp.TrackGetSamplerRate());
	m_strTrackChannels.Format("%i", amp.TrackGetChannels());
	
	// get track length in seconds and convert it to a mm:ss display
	int seconds = amp.TrackGetLengthSec();
	int minutes = 0;
	while(seconds >	60)
	{
		seconds -= 60;
		minutes++;
	}	
	m_strTrackLength.Format("%i:%.2i", minutes, seconds);
	
	// set the slider range to the track length
	m_ctlTrackPos.SetRange(0, amp.TrackGetLengthSec());
	// set the slider pos to the current position of a track (and convert msec to sec)
	m_iTrackPos = amp.TrackGetPositionMSec() / 1000;
	// update the preamp slider value
	m_iPreampVol = amp.EQGetPreampValaue();

	// update the ten equalizer bars
	for(int i=0; i<10; i++)
		((CSliderCtrl*)GetDlgItem(EQBand[i]))->SetPos(amp.EQGetData(i));

	// status of winamp
	if(amp.IsPlaying())
		m_strStatus = "playing";
	else if(amp.IsPaused())
		m_strStatus = "paused";
	else if(amp.IsStopped())
		m_strStatus = "stopped";

	// track playlist entry
	m_strPlaylistEntry.Format("%i", amp.PlsGetEntry());

	// equalizer enabled/auto?
	m_bEQEnabled = amp.EQIsEnabled();
	m_bEQAuto	 = amp.EQAuto();

	// update volume slider  position
	m_iVolume = amp.GetVolume();

	// playlist entry and number of items in playlist
	m_strPlsCount.Format("%i", amp.PlsCount());
	m_strPlsSelected.Format("%i", amp.PlsPosition());

	UpdateData(FALSE);
	
	CDialog::OnTimer(nIDEvent);
}

void CWinampClassDlg::OnEqpresets() 
{
	POINT point;
	GetCursorPos(&point);

	CMenu menu;
	CMenu *submenu; 
	
	menu.LoadMenu(IDR_PRESETS);
	submenu = menu.GetSubMenu(0);

	submenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON,point.x,point.y,GetActiveWindow(),NULL);
}

void CWinampClassDlg::OnPrev() 
{
	amp.Previous();	
}

void CWinampClassDlg::OnRewind() 
{
	amp.Rewind5Sec();	
}

void CWinampClassDlg::OnPlay() 
{
	amp.Play();
}

void CWinampClassDlg::OnPause() 
{
	amp.Pause();
}

void CWinampClassDlg::OnForward() 
{
	amp.Forward5Sec();
}

void CWinampClassDlg::OnNext() 
{
	amp.Next();
}

void CWinampClassDlg::OnOpen() 
{
	amp.OpenFileDlg();
}

void CWinampClassDlg::OnLoadPreset() 
{
	amp.EQPresetsLoadPreset();
}

void CWinampClassDlg::OnLoadAutoload() 
{
	amp.EQPresetsLoadAutoloadPreset();	
}

void CWinampClassDlg::OnLoadDefault() 
{
	amp.EQPresetsLoadDefault();
}

void CWinampClassDlg::OnLoadFromeqf() 
{
	amp.EQPresetsLoadPresetFromEQF();
}

void CWinampClassDlg::OnSaveAutoload() 
{
	amp.EQPresetsSaveAutoloadPreset();	
}

void CWinampClassDlg::OnSaveDefault() 
{
	amp.EQPresetsSaveDefault();
}

void CWinampClassDlg::OnSavePreset() 
{
	amp.EQPresetsSavePreset();
}

void CWinampClassDlg::OnSaveToEQF() 
{
	amp.EQPresetsSavePresetToEQF();
}

void CWinampClassDlg::OnDeletePreset() 
{
	amp.EQPresetsDeletePreset();
}

void CWinampClassDlg::OnDeleteAutoload() 
{
	amp.EQPresetsDeleteAutoloadPreset();
}

void CWinampClassDlg::OnPlsAddurl() 
{
	amp.PlsAddURL();
}

void CWinampClassDlg::OnPlsAdddir() 
{
	amp.PlsAddDir();
}

void CWinampClassDlg::OnPlsAddfile() 
{
	amp.PlsAddFile();
}

void CWinampClassDlg::OnPlsSortbytitle() 
{
	amp.PlsSortByTitle();
}

void CWinampClassDlg::OnPlsSortbyfilename() 
{
	amp.PlsSortByFilename();
}

void CWinampClassDlg::OnPlsSortbyfilepath() 
{
	amp.PlsSortByFilepath();
}

void CWinampClassDlg::OnPlsReverse() 
{
	amp.PlsReverse();
}

void CWinampClassDlg::OnPlsRandomize() 
{
	amp.PlsRandomize();	
}

void CWinampClassDlg::OnPlsClear() 
{
	int ret = MessageBox("Are you sure you want to clear the list?", "Clear?", MB_OK|MB_ICONQUESTION|MB_OKCANCEL);
	if(ret == IDOK)
		amp.PlsClear();
}

void CWinampClassDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
{
	CSliderCtrl* pSlider = (CSliderCtrl*) pScrollBar;
	// change volume
	if(pSlider == &m_ctlVolume)
		amp.SetVolume(m_ctlVolume.GetPos());
	// seek track
	if(pSlider == &m_ctlTrackPos)
		amp.TrackSeek(m_ctlTrackPos.GetPos() * 1000);
	
	CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
}

void CWinampClassDlg::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
{
	CSliderCtrl* pSlider = (CSliderCtrl*)pScrollBar;
	
	// if one of the band has been changed, apply changes
	for(int i=0; i<10; i++)
		if(pSlider == ((CSliderCtrl*)GetDlgItem(EQBand[i])))
			amp.EQSetData(i, ((CSliderCtrl*)GetDlgItem(EQBand[i]))->GetPos());
	
	CDialog::OnVScroll(nSBCode, nPos, pScrollBar);
}

⌨️ 快捷键说明

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