📄 mainwndcmd.cpp
字号:
{
TCHAR szPath[MAX_PATH] = {0};
#ifdef _WIN32_WCE
CFolderDlg dlg;
dlg.SetSubFolder(m_pOptions->m_fSearchSubFolders);
if (dlg.ShowFolderDlg(m_hWnd, szPath, MAX_PATH) == IDCANCEL)
return;
m_pOptions->m_fSearchSubFolders = dlg.GetSubFolder();
#else
CTempStr strTitle(IDS_TITLE_FIND_FILE);
//僼僅儖僟慖戰僟僀傾儘僌偺昞帵
LPMALLOC pmalloc;
LPITEMIDLIST lPIDL;
LPITEMIDLIST pIDL;
if (SUCCEEDED(SHGetMalloc(&pmalloc))) {
if (SUCCEEDED(SHGetSpecialFolderLocation(NULL, CSIDL_DESKTOP, &lPIDL))) {
TCHAR szBuff[MAX_PATH];
_tcscpy(szBuff, m_pOptions->m_szLastDir);
BROWSEINFO binfo = {0};
binfo.hwndOwner = m_hWnd;
binfo.lpszTitle = strTitle;
binfo.pidlRoot = lPIDL;
binfo.pszDisplayName = szBuff;
binfo.ulFlags = BIF_RETURNONLYFSDIRS;
pIDL = SHBrowseForFolder(&binfo);
if (pIDL)
SHGetPathFromIDList(pIDL, szPath);
pmalloc->Free(pIDL);
}
pmalloc->Release();
}
if (!_tcslen(szPath))
return;
#endif
_tcscpy(m_pOptions->m_szLastDir, szPath);
AddDir(szPath);
if (m_pPlayListDlg)
m_pPlayListDlg->UpdatePlayList();
}
void CMainWnd::OnFileList()
{
if (!m_pPlayListDlg)
m_pPlayListDlg = new CPlayListDlg();
m_pPlayListDlg->Show(this);
}
void CMainWnd::OnFileSaveList()
{
SaveMediaFile();
}
void CMainWnd::OnPlayPlayPause()
{
if (MAP_GetStatus(m_hMap) == MAP_STATUS_STOP) {
Play();
}
else
Pause();
}
void CMainWnd::OnPlayStop()
{
// 儗僕儏乕儉梡偺忣曬傪庢摼偟偰偍偔
if (m_pOptions->m_fResume && MAP_GetStatus(m_hMap) != MAP_STATUS_STOP) {
m_pOptions->m_nResumeTime = MAP_GetCurrent(m_hMap);
}
if (MAP_GetStatus(m_hMap) == MAP_STATUS_STOP)
MAP_AudioDeviceClose(m_hMap);
// 掆巭張棟
Stop();
// 僔儍僢僼儖僼儔僌傪儕僙僢僩
if (m_pOptions->m_fShuffle) {
ResetShuffle();
FILEINFO* p = (FILEINFO*)m_pListFile->GetAt(m_nCurrent);
if (p) p->fShuffle = TRUE;
}
// 儗僕儏乕儉偺応崌帪崗傪僙僢僩
if (m_pOptions->m_fResume) {
MAP_Seek(m_hMap, m_pOptions->m_nResumeTime);
m_pOptions->m_nResumeTime = 0;
}
UpdateTime();
UpdateStatus();
UpdateStreamTitle();
}
void CMainWnd::OnPlayPrev()
{
BOOL fPlay = MAP_GetStatus(m_hMap) != MAP_STATUS_STOP;
// 僼傽僀儖嵞惗偺帪偵嵞惗帪娫偑2昩埲忋側傜愭摢偵
// 2昩枹枮偺応崌偼慜偺嬋
FILEINFO* pInfo = GetInfo(GetCurrentFile());
if (pInfo && !IsURL(pInfo->szPath)) {
long lCurrent = MAP_GetCurrent(m_hMap);
if (fPlay && lCurrent > 2000) {
MAP_Seek(m_hMap, 0);
return;
}
}
int nPrev = GetPrevIndex();
if (nPrev == OPEN_NONE)
return;
Open(nPrev);
if (fPlay)
Play();
}
void CMainWnd::OnPlayNext()
{
int nNext = GetNextIndex();
if (nNext == OPEN_NONE)
return;
BOOL fPlay = MAP_GetStatus(m_hMap) != MAP_STATUS_STOP;
Open(nNext);
if (fPlay)
Play();
}
void CMainWnd::OnPlayRew()
{
Seek((MAP_GetCurrent(m_hMap) - SKIP_INTERVAL));
}
void CMainWnd::OnPlayFf()
{
Seek((MAP_GetCurrent(m_hMap) + SKIP_INTERVAL));
}
void CMainWnd::OnPlayRepeat()
{
switch (m_pOptions->m_fRepeat) {
case COptions::RepeatNone:
m_pOptions->m_fRepeat = COptions::RepeatAll;
break;
case COptions::RepeatAll:
m_pOptions->m_fRepeat = COptions::RepeatOne;
break;
default:
m_pOptions->m_fRepeat = COptions::RepeatNone;
break;
}
UpdatePlayOption();
}
void CMainWnd::OnPlayRepeatNone()
{
m_pOptions->m_fRepeat = COptions::RepeatNone;
UpdatePlayOption();
}
void CMainWnd::OnPlayRepeatAll()
{
m_pOptions->m_fRepeat = COptions::RepeatAll;
UpdatePlayOption();
}
void CMainWnd::OnPlayRepeatOne()
{
m_pOptions->m_fRepeat = COptions::RepeatOne;
UpdatePlayOption();
}
void CMainWnd::OnPlayShuffle()
{
m_pOptions->m_fShuffle = !m_pOptions->m_fShuffle;
if (m_pOptions->m_fShuffle) {
srand(GetTickCount());
FILEINFO* p = (FILEINFO*)m_pListFile->GetAt(m_nCurrent);
if (p) p->fShuffle = TRUE;
}
else {
ResetShuffle();
}
UpdatePlayOption();
}
#define VOLUME_INT ((double)0xFFFF * 2 / 100)
void CMainWnd::OnToolVolUp()
{
DWORD dwVolume;
waveOutGetVolume(NULL, &dwVolume);
double dLeft = LOWORD(dwVolume) + 1;
double dRight = HIWORD(dwVolume) + 1;
//left channnel (low word)
dLeft = min(dLeft + VOLUME_INT, 0xFFFF);
//right channel (high word)
dRight = min(dRight + VOLUME_INT, 0xFFFF);
waveOutSetVolume(NULL, MAKELONG((int)dLeft, (int)dRight));
// 昞帵傪峏怴 (悢昩屻偵尦偵栠偡)
KillTimer(m_hWnd, ID_TIMER_VOLUME);
m_fDrawVolume = TRUE;
UpdateTitle();
SetTimer(m_hWnd, ID_TIMER_VOLUME, TIMER_VOLUME_INTERVAL, NULL);
UpdateVolumeSlider();
}
void CMainWnd::OnToolVolDown()
{
DWORD dwVolume;
waveOutGetVolume(NULL, &dwVolume);
double dLeft = LOWORD(dwVolume) + 1;
double dRight = HIWORD(dwVolume) + 1;
//left channnel (low word)
dLeft = max(dLeft - VOLUME_INT, 0);
//right channel (high word)
dRight = max(dRight - VOLUME_INT, 0);
waveOutSetVolume(NULL, MAKELONG((int)dLeft, (int)dRight));
// 昞帵傪峏怴 (悢昩屻偵尦偵栠偡)
KillTimer(m_hWnd, ID_TIMER_VOLUME);
m_fDrawVolume = TRUE;
UpdateTitle();
SetTimer(m_hWnd, ID_TIMER_VOLUME, TIMER_VOLUME_INTERVAL, NULL);
UpdateVolumeSlider();
}
void CMainWnd::OnToolEffect()
{
CEffectDlg dlg;
dlg.ShowEffectDlg(m_hWnd, m_hMap);
}
void CMainWnd::OnToolTopMost()
{
m_pOptions->m_fTopMost = !m_pOptions->m_fTopMost;
SetWindowPos(m_hWnd, m_pOptions->m_fTopMost ? HWND_TOPMOST : HWND_NOTOPMOST,
0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE);
}
void CMainWnd::OnToolOption()
{
m_pOptions->ShowOptionDlg(m_hWnd, m_hMap);
MAP_SetScanPeek(m_hMap, m_pOptions->m_fDrawPeek);
// 嵞昤夋偡傞
DeleteImages();
InitImages();
InvalidateRect(m_hWnd, NULL, TRUE);
UpdateWindow(m_hWnd);
}
void CMainWnd::OnToolSleepTimer()
{
if (m_pOptions->ShowSleepTimerDlg(m_hWnd)) {
if (m_pOptions->m_nSleepTime != -1) {
m_pOptions->m_nSleepTime = 0;
m_pOptions->m_dwSleepLast = GetTickCount();
SetTimer(m_hWnd, ID_TIMER_SLEEPTIMER, TIMER_SLEEPTIMER_INTERVAL, NULL);
}
else {
KillTimer(m_hWnd, ID_TIMER_SLEEPTIMER);
}
}
}
void CMainWnd::OnShowMenu(POINT* ppt)
{
if (m_hMenu)
return;
m_hMenu = LoadMenu(GetInst(), (LPCTSTR)IDR_POPUP);
HMENU hSub = GetSubMenu(m_hMenu, IDM_SUBMENU_MAIN);
POINT pt;
if (ppt)
pt = *ppt;
else {
if (m_pSkin->GetImageList(IMAGELIST_BUTTON)) {
pt.x = BTN_LEFT + BTN_MENU * BTN_WIDTH + (BTN_WIDTH / 2);
pt.y = BTN_TOP + (BTN_HEIGHT / 2);
}
else {
pt.x = 0;
pt.y = 0;
}
}
ClientToScreen(m_hWnd, &pt);
switch (m_pOptions->m_fRepeat) {
case COptions::RepeatAll:
CheckMenuItem(hSub, IDM_PLAY_REPEAT_ALL, MF_BYCOMMAND | MF_CHECKED);
break;
case COptions::RepeatOne:
CheckMenuItem(hSub, IDM_PLAY_REPEAT_ONE, MF_BYCOMMAND | MF_CHECKED);
break;
default:
CheckMenuItem(hSub, IDM_PLAY_REPEAT_NONE, MF_BYCOMMAND | MF_CHECKED);
break;
}
if (m_pOptions->m_fShuffle)
CheckMenuItem(hSub, IDM_PLAY_SHUFFLE, MF_BYCOMMAND | MF_CHECKED);
if (m_pOptions->m_fTopMost)
CheckMenuItem(hSub, IDM_TOOL_TOPMOST, MF_BYCOMMAND | MF_CHECKED);
SetForegroundWindow(m_hWnd);
TrackPopupMenu(hSub, TPM_LEFTALIGN | TPM_TOPALIGN, pt.x, pt.y, 0, m_hWnd, NULL);
DestroyMenu(m_hMenu);
m_hMenu = NULL;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -