📄 mainwnd.cpp
字号:
DrawStatus(m_hMemDC);
// 僺乕僋
SetRect(&rc, PEEK_LEFT, PEEK_TOP,
PEEK_LEFT + PEEK_WIDTH, PEEK_TOP + PEEK_HEIGHT);
if (NeedToRepaint(&pps->rcPaint, &rc))
DrawPeek(m_hMemDC);
// 僗僩儕乕儉僞僀僩儖
SetRect(&rc, STREAM_TITLE_LEFT, m_nStreamTitleTop,
STREAM_TITLE_LEFT + m_nStreamTitleWidth, m_nStreamTitleTop + m_nStreamTitleHeight);
if (NeedToRepaint(&pps->rcPaint, &rc))
DrawStreamTitle(m_hMemDC);
// 儃儕儏乕儉僗儔僀僟乕
SetRect(&rc, m_nVolumeSliderLeft, m_nVolumeSliderTop,
m_nVolumeSliderLeft + m_nVolumeSliderWidth, m_nVolumeSliderTop + m_nVolumeSliderHeight);
if (NeedToRepaint(&pps->rcPaint, &rc))
DrawVolumeSlider(m_hMemDC);
// 僂僀儞僪僂DC偵揮憲
BitBlt(hDC, pps->rcPaint.left, pps->rcPaint.top,
RECT_WIDTH(&pps->rcPaint), RECT_HEIGHT(&pps->rcPaint),
m_hMemDC, pps->rcPaint.left, pps->rcPaint.top, SRCCOPY);
}
void CMainWnd::OnClose()
{
// 儗僕儏乕儉忣曬傪曐懚偟偰偍偔
if (m_pOptions->m_fResume) {
m_pOptions->m_nResumeTrack = m_nCurrent;
m_pOptions->m_nResumeTime = MAP_GetCurrent(m_hMap);
}
// 僼傽僀儖傪暵偠傞
Close();
MAP_AudioDeviceClose(m_hMap);
// 儕僜乕僗傪夝曻偡傞
if (m_pPlayListDlg) {
m_pPlayListDlg->Close();
delete m_pPlayListDlg;
m_pPlayListDlg = NULL;
}
// 儕僗僩傪曐懚偡傞
if (m_pOptions->m_fSaveDefList) {
TCHAR szPath[MAX_PATH];
GetDefPlayListPath(szPath);
SavePlayList(szPath);
}
// 僞僗僋僩儗僀傾僀僐儞偺嶍彍
RegisterTrayIcon(FALSE);
// 僂僀儞僪僂傪尦偵栠偡
ShowWindow(m_hWnd, SW_HIDE);
SetWindowPos(m_hWnd, 0, 0, 0, 0, 0, SWP_NOZORDER | SWP_NOMOVE);
ShowWindow(m_hWnd, SW_RESTORE);
// 忬懺傪曐懚偡傞
Save();
#ifdef REGISTER_WAKE_EVENT
if (m_fRegEvent) {
TCHAR sz[MAX_PATH];
GetModuleFileName(GetInst(), sz, MAX_PATH);
CeRunAppAtEvent(sz, NULL);
}
#endif
// 僂僀儞僪僂偺攋婞
DeleteImages();
KillTimer(m_hWnd, ID_TIMER_TIME);
KillTimer(m_hWnd, ID_TIMER_SUSPEND);
KillTimer(m_hWnd, ID_TIMER_SCROLLTITLE);
KillTimer(m_hWnd, ID_TIMER_SCROLLSTREAM);
KillTimer(m_hWnd, ID_TIMER_STREAMINGWAIT);
KillTimer(m_hWnd, ID_TIMER_SLEEPTIMER);
DestroyWindow(m_hWnd);
}
void CMainWnd::OnDestroy()
{
PostQuitMessage(0);
}
void CMainWnd::OnTimer(UINT uID)
{
if (uID == ID_TIMER_TIME) {
UpdateTime();
}
else if (uID == ID_TIMER_SUSPEND) {
#ifdef _WIN32_WCE
// 僒僗儁儞僪杊巭
if (MAP_GetStatus(m_hMap) == MAP_STATUS_PLAY) {
//keybd_event(VK_F4, 0x1e, KEYEVENTF_KEYUP, 1);
SystemIdleTimerReset();
}
#endif
}
else if (uID == ID_TIMER_VOLUME) {
KillTimer(m_hWnd, ID_TIMER_VOLUME);
m_fDrawVolume = FALSE;
UpdateTitle();
}
else if (uID == ID_TIMER_VOLSLIDER) {
DWORD dwVolume;
waveOutGetVolume(NULL, &dwVolume);
if (m_dwCurrentVolume != dwVolume)
UpdateVolumeSlider();
}
else if (uID == ID_TIMER_SCROLLTITLE) {
if (++m_nTitleWait >= SCROLL_TITLE_INITWAIT) {
if (m_pOptions->m_fScrollTitle) {
if (!m_fDrawVolume) {
if (m_nTitleLen - SCROLL_TITLE_MARGIN > m_nTitleWidth) {
m_nTitlePos += SCROLL_TITLE_INTERVAL;
UpdateTitle();
}
}
}
}
}
else if (uID == ID_TIMER_SCROLLSTREAM) {
if (++m_nStreamTitleWait >= SCROLL_TITLE_INITWAIT) {
FILEINFO* pInfo = GetInfo(GetCurrentFile());
if (pInfo && IsURL(pInfo->szPath)) {
if (m_nStreamTitleLen - SCROLL_TITLE_MARGIN > m_nStreamTitleWidth) {
m_nStreamTitlePos += SCROLL_TITLE_INTERVAL;
UpdateStreamTitle();
}
}
}
}
else if (uID == ID_TIMER_STREAMINGWAIT) {
UpdateStreamTitle();
if (MAP_GetStatus(m_hMap) != MAP_STATUS_WAIT)
KillTimer(m_hWnd, ID_TIMER_STREAMINGWAIT);
}
else if (uID == ID_TIMER_SLEEPTIMER) {
if (m_pOptions->m_nSleepTime != -1) {
DWORD dwTick = GetTickCount();
m_pOptions->m_nSleepTime += dwTick - m_pOptions->m_dwSleepLast;
m_pOptions->m_dwSleepLast = dwTick;
if (m_pOptions->m_nSleepTime > m_pOptions->m_nSleepMinutes * 60 * 1000) {
m_pOptions->m_nSleepTime = -1;
KillTimer(m_hWnd, ID_TIMER_SLEEPTIMER);
OnPlayStop();
#ifdef _WIN32_WCE
if (m_pOptions->m_fSleepPowerOff) {
MAP_AudioDeviceClose(m_hMap);
keybd_event(VK_OFF, 0, KEYEVENTF_SILENT, 0);
keybd_event(VK_OFF, 0, KEYEVENTF_KEYUP | KEYEVENTF_SILENT, 0);
}
#endif
}
}
}
}
void CMainWnd::OnLButtonDown(int x, int y)
{
#ifdef _WIN32_WCE
if (GetAsyncKeyState(VK_MENU) & 0x8000) {
return;
}
else if (x >= BTN_LEFT && y >= m_nBtnTop &&
#else
if (x >= BTN_LEFT && y >= m_nBtnTop &&
#endif
x < BTN_LEFT + BTN_WIDTH * m_nBtnMax &&
y < m_nBtnTop + BTN_HEIGHT) {
// 儃僞儞偺埵抲傪専弌
m_fPressed = TRUE;
m_nPressed = (x - BTN_LEFT) / BTN_WIDTH;
RECT rc = {
BTN_LEFT + BTN_WIDTH * m_nPressed,
m_nBtnTop,
BTN_LEFT + BTN_WIDTH * (m_nPressed + 1),
m_nBtnTop + BTN_HEIGHT
};
InvalidateRect(m_hWnd, &rc, TRUE);
UpdateWindow(m_hWnd);
SetCapture(m_hWnd);
return;
}
else if (x >= TIME_LEFT &&
x < TIME_LEFT + TIME_WIDTH &&
y >= TIME_TOP &&
y < TIME_TOP + TIME_HEIGHT) {
// 帪崗昞帵儕僶乕僗
m_pOptions->m_fTimeReverse = !m_pOptions->m_fTimeReverse;
UpdateTime();
}
else if (x >= PEEK_LEFT &&
x < PEEK_LEFT + PEEK_WIDTH &&
y >= PEEK_TOP &&
y < PEEK_TOP + PEEK_HEIGHT) {
// 僺乕僋僶乕昞帵愗傝懼偊
m_nPeek[0] = m_nPeek[1] = 0;
UpdatePeek();
m_pOptions->m_fDrawPeek = !m_pOptions->m_fDrawPeek;
MAP_SetScanPeek(m_hMap, m_pOptions->m_fDrawPeek);
}
else if (x >= SEEK_LEFT &&
y >= m_nTitleTop &&
x < SEEK_LEFT + m_nSeekWidth &&
y < DISP_TOP + m_nDispHeight) {
// 僔乕僋
int nDur = MAP_GetDuration(m_hMap);
int nSeek = int(((double)x - SEEK_LEFT) / m_nSeekWidth * nDur);
Seek(nSeek);
return;
}
else if (x >= m_nVolumeSliderLeft &&
y >= m_nVolumeSliderTop &&
x < m_nVolumeSliderLeft + m_nVolumeSliderWidth &&
y < m_nVolumeSliderTop + m_nVolumeSliderHeight) {
// 儃儕儏乕儉僗儔僀僟乕
m_fVolPressed = TRUE;
double dPos = x - m_nVolumeSliderLeft - m_nVolumeTrackWidth / 2;
dPos = dPos * 100 / (m_nVolumeSliderWidth - m_nVolumeTrackWidth);
dPos = dPos * 0xFFFF / 100;
if (dPos < 0)
dPos = 0;
if (dPos > 0xFFFF)
dPos = 0xFFFF;
waveOutSetVolume(NULL, MAKELONG((int)dPos, (int)dPos));
SetCapture(m_hWnd);
UpdateVolumeSlider();
// 昞帵傪峏怴 (悢昩屻偵尦偵栠偡)
KillTimer(m_hWnd, ID_TIMER_VOLUME);
m_fDrawVolume = TRUE;
UpdateTitle();
SetTimer(m_hWnd, ID_TIMER_VOLUME, TIMER_VOLUME_INTERVAL, NULL);
}
#ifdef _WIN32_WCE
// 忋婰埲奜偺傕偺偱僨傿僗僾儗僀埲奜傪僞僢僾偟偨応崌偼
// 儊僯儏乕傪昞帵
else if (x < DISP_LEFT ||
x > DISP_LEFT + DISP_WIDTH ||
y < DISP_TOP ||
y > DISP_TOP + DISP_HEIGHT) {
POINT pt = {x, y};
OnShowMenu(&pt);
}
#endif
// 埵抲傪婰壇偟偰偍偔
// 僂僀儞僪僂堏摦梡
m_ptPressed.x = x;
m_ptPressed.y = y;
}
void CMainWnd::OnMouseMove(int fKey, int x, int y)
{
if (!(fKey & MK_LBUTTON))
return;
// 儃僞儞
if (m_nPressed != -1) {
RECT rc = {
BTN_LEFT + BTN_WIDTH * m_nPressed,
m_nBtnTop,
BTN_LEFT + BTN_WIDTH * (m_nPressed + 1),
m_nBtnTop + BTN_HEIGHT
};
if (m_fPressed &&
(x < rc.left || y < rc.top ||
x >= rc.right || y >= rc.bottom)) {
m_fPressed = FALSE;
InvalidateRect(m_hWnd, &rc, TRUE);
UpdateWindow(m_hWnd);
}
else if (!m_fPressed &&
(x >= rc.left && y >= rc.top &&
x < rc.right && y < rc.bottom)) {
m_fPressed = TRUE;
InvalidateRect(m_hWnd, &rc, TRUE);
UpdateWindow(m_hWnd);
}
}
else if (m_fVolPressed) {
double dPos = x - m_nVolumeSliderLeft - m_nVolumeTrackWidth / 2;
dPos = dPos * 100 / (m_nVolumeSliderWidth - m_nVolumeTrackWidth);
dPos = dPos * 0xFFFF / 100;
if (dPos < 0)
dPos = 0;
if (dPos > 0xFFFF)
dPos = 0xFFFF;
waveOutSetVolume(NULL, MAKELONG((int)dPos, (int)dPos));
SetCapture(m_hWnd);
UpdateVolumeSlider();
// 昞帵傪峏怴 (悢昩屻偵尦偵栠偡)
KillTimer(m_hWnd, ID_TIMER_VOLUME);
m_fDrawVolume = TRUE;
UpdateTitle();
SetTimer(m_hWnd, ID_TIMER_VOLUME, TIMER_VOLUME_INTERVAL, NULL);
}
}
void CMainWnd::OnLButtonUp(int x, int y)
{
if (m_nPressed != -1) {
ReleaseCapture();
if (m_fPressed) {
// 昞帵傪尦偵栠偡
m_fPressed = FALSE;
RECT rc = {
BTN_LEFT + BTN_WIDTH * m_nPressed,
m_nBtnTop,
BTN_LEFT + BTN_WIDTH * (m_nPressed + 1),
m_nBtnTop + BTN_HEIGHT
};
InvalidateRect(m_hWnd, &rc, TRUE);
UpdateWindow(m_hWnd);
// 僐儅儞僪憲怣
int nCommand[] = {
IDM_FILE_OPEN,
IDM_PLAY_PLAYPAUSE,
IDM_PLAY_STOP,
IDM_PLAY_PREV,
IDM_PLAY_REW,
IDM_PLAY_FF,
IDM_PLAY_NEXT,
IDM_SHOW_MENU
};
PostMessage(m_hWnd, WM_COMMAND, nCommand[m_nPressed], 0);
}
}
else if (m_fVolPressed) {
ReleaseCapture();
}
#ifdef _WIN32_WCE
else if (GetAsyncKeyState(VK_MENU) & 0x8000) {
POINT pt = {x, y};
OnShowMenu(&pt);
}
#endif
m_fPressed = FALSE;
m_nPressed = -1;
m_ptPressed.x = -1;
m_ptPressed.y = -1;
m_fVolPressed = FALSE;
}
void CMainWnd::OnMove(int x, int y)
{
RECT rc;
GetWindowRect(m_hWnd, &rc);
RECT rcWork;
SystemParametersInfo(SPI_GETWORKAREA, 0, &rcWork, FALSE);
int nLeft = rc.left;
int nTop = rc.top;
if (nLeft > rcWork.left - WINDOW_FIT_MARGIN && nLeft < rcWork.left + WINDOW_FIT_MARGIN)
nLeft = rcWork.left;
else if (nLeft + RECT_WIDTH(&rc) > rcWork.left + RECT_WIDTH(&rcWork) - WINDOW_FIT_MARGIN &&
nLeft + RECT_WIDTH(&rc) < rcWork.left + RECT_WIDTH(&rcWork) + WINDOW_FIT_MARGIN)
nLeft = rcWork.left + RECT_WIDTH(&rcWork) - RECT_WIDTH(&rc);
if (nTop > rcWork.top - WINDOW_FIT_MARGIN && nTop < rcWork.top + WINDOW_FIT_MARGIN)
nTop = rcWork.top;
else if (nTop + RECT_HEIGHT(&rc) > rcWork.top + RECT_HEIGHT(&rcWork) - WINDOW_FIT_MARGIN &&
nTop + RECT_HEIGHT(&rc) < rcWork.top + RECT_HEIGHT(&rcWork) + WINDOW_FIT_MARGIN)
nTop = rcWork.top + RECT_HEIGHT(&rcWork) - RECT_HEIGHT(&rc);
if (nLeft != rc.left || nTop != rc.top)
MoveWindow(m_hWnd, nLeft, nTop, RECT_WIDTH(&rc), RECT_HEIGHT(&rc), TRUE);
}
void CMainWnd::OnSize(UINT nType, int cx, int cy)
{
if (m_pOptions->m_fTrayIcon && nType == SIZE_MINIMIZED) {
RegisterTrayIcon(TRUE);
ShowWindow(m_hWnd, SW_HIDE);
}
else if (nType == SIZE_RESTORED) {
InvalidateRect(m_hWnd, NULL, TRUE);
UpdateWindow(m_hWnd);
}
}
void CMainWnd::OnActivate(int nActive, BOOL fMinimized, HWND hwndPrevious)
{
}
void CMainWnd::OnHotKey(int nId, UINT fuModifiers, UINT uVirtKey)
{
}
#ifdef _WIN32_WCE
void CMainWnd::OnCopyData(COPYDATASTRUCT* pcds)
{
if (pcds->dwData == WM_DROPFILES) {
DeleteAllFile();
LPTSTR pszPath = (LPTSTR)pcds->lpData;
while (TRUE) {
DWORD dw = GetFileAttributes(pszPath);
if (dw & FILE_ATTRIBUTE_DIRECTORY)
AddDir(pszPath);
else {
if (IsPlayList(pszPath))
LoadPlayList(pszPath);
else
AddFile(pszPath);
}
pszPath += _tcslen(pszPath);
if (*pszPath != NULL || *(pszPath + 1) == NULL)
break;
pszPath++;
}
if (m_pPlayListDlg)
m_pPlayListDlg->UpdatePlayList();
Play();
}
}
#else
void CMainWnd::OnDropFiles(HDROP hDrop)
{
DeleteAllFile();
AddDropFiles(hDrop);
Play();
}
void CMainWnd::AddDropFiles(HDROP hDrop)
{
TCHAR szFile[MAX_PATH];
int nIndex = 0;
// 僼傽僀儖傪捛壛偟偰偄偔
while (DragQueryFile(hDrop, nIndex++, szFile, MAX_PATH)) {
DWORD dwAttr = GetFileAttributes(szFile);
if (dwAttr != 0xFFFFFFFF) {
if (dwAttr & FILE_ATTRIBUTE_DIRECTORY)
AddDir(szFile);
else if(IsPlayList(szFile))
LoadPlayList(szFile);
else
AddFile(szFile);
}
}
DragFinish(hDrop);
if (m_pPlayListDlg)
m_pPlayListDlg->UpdatePlayList();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -