📄 winampclassdlg.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 + -