📄 mainwndcmd.cpp
字号:
#include "GSPlayer2.h"
#include "MainWnd.h"
#ifdef _WIN32_WCE
#include "FolderDlg.h"
#endif
#ifdef _WIN32_WCE_PPC
#include "EffectDlgPPC.h"
#else
#include "EffectDlg.h"
#endif
#define FILE_BUFF_LEN 2048
#define OPEN_FILTER_BUF 1024
typedef struct _EXT_INFO {
TCHAR szExt[MAX_PATH];
TCHAR szExtDesc[MAX_PATH];
} EXT_INFO;
void CMainWnd::MakeOpenFilter(LPTSTR* ppszFilter, BOOL fGsGetFile)
{
CTempStr str;
TCHAR szExt[MAX_PATH];
TCHAR szExtDesc[MAX_PATH];
TCHAR szTemp[MAX_PATH * 2];
MAP_DEC_PLUGIN* pPlugIn;
EXT_INFO* pExt;
CMultiBuff extbuff;
BOOL fFound;
int i, j;
int nBuf = OPEN_FILTER_BUF;
int nPlugIn = MAP_GetDecoderPlugInCount(m_hMap);
int nExt;
*ppszFilter = new TCHAR[nBuf];
*ppszFilter[0] = NULL;
if (fGsGetFile) {
str.LoadNormal(IDS_FILTER_OPEN_SUPPORTED);
_tcscpy(*ppszFilter, str);
}
for (i = 0; i < nPlugIn; i++) {
pPlugIn = MAP_GetDecoderPlugIn(m_hMap, i);
if (!pPlugIn)
continue;
nExt = pPlugIn->GetFileExtCount();
for (j = 0; j < nExt; j++) {
memset(szExt, 0, sizeof(szExt));
memset(szExtDesc, 0, sizeof(szExtDesc));
if (pPlugIn->GetFileExt(j, szExt, szExtDesc) && _tcslen(szExt)) {
if (!IsDefSupportedExt(szExt)) {
fFound = FALSE;
for (int k = 0; k < extbuff.GetCount(); k++) {
pExt = (EXT_INFO*)extbuff.GetAt(k);
if (_tcsicmp(pExt->szExt, szExt) == 0) {
fFound = TRUE;
break;
}
}
if (!fFound) {
if (fGsGetFile) {
if (nBuf - 1 < (int)(_tcslen(*ppszFilter) + _tcslen(szExt) + 3)) {
nBuf += OPEN_FILTER_BUF;
LPTSTR pszNew = new TCHAR[nBuf];
_tcscpy(pszNew, *ppszFilter);
delete *ppszFilter;
*ppszFilter = pszNew;
}
_tcscat(*ppszFilter, _T(";*."));
_tcscat(*ppszFilter, szExt);
}
pExt = new EXT_INFO;
_tcscpy(pExt->szExt, szExt);
_tcscpy(pExt->szExtDesc, szExtDesc);
extbuff.Add((DWORD)pExt);
}
}
}
}
}
str.LoadNormal(IDS_FILTER_OPEN_INTERNAL);
if (nBuf - 1 < (int)(_tcslen(*ppszFilter) + _tcslen(str))) {
nBuf += OPEN_FILTER_BUF;
LPTSTR pszNew = new TCHAR[nBuf];
_tcscpy(pszNew, *ppszFilter);
delete *ppszFilter;
*ppszFilter = pszNew;
}
if (_tcslen(*ppszFilter))
_tcscat(*ppszFilter, str);
else
_tcscpy(*ppszFilter, (LPTSTR)str + 1);
while (!extbuff.IsEmpty()) {
pExt = (EXT_INFO*)extbuff.RemoveAt(0);
if (!_tcslen(pExt->szExtDesc)) {
str.LoadNormal(IDS_FMT_NULL_FILE_TYPE);
wsprintf(pExt->szExtDesc, str, pExt->szExt, pExt->szExt);
}
wsprintf(szTemp, _T("|%s|*.%s"), pExt->szExtDesc, pExt->szExt);
if (nBuf - 1 < (int)(_tcslen(*ppszFilter) + _tcslen(szTemp))) {
nBuf += OPEN_FILTER_BUF;
LPTSTR pszNew = new TCHAR[nBuf];
_tcscpy(pszNew, *ppszFilter);
delete *ppszFilter;
*ppszFilter = pszNew;
}
_tcscat(*ppszFilter, szTemp);
delete pExt;
}
str.LoadNormal(IDS_FILTER_OPEN_ALL);
if (nBuf - 1 < (int)(_tcslen(*ppszFilter) + _tcslen(str))) {
nBuf += OPEN_FILTER_BUF;
LPTSTR pszNew = new TCHAR[nBuf];
_tcscpy(pszNew, *ppszFilter);
}
_tcscat(*ppszFilter, str);
LPTSTR psz = *ppszFilter;
while (psz = _tcschr(psz, _T('|'))) {
*psz++ = NULL;
}
}
BOOL CMainWnd::OpenMediaFile(BOOL fAdd, HWND hwndParent)
{
if (m_fShowOpenDlg)
return FALSE;
BOOL fRet;
m_fShowOpenDlg = TRUE;
CTempStr strTitle(fAdd ? IDS_TITLE_ADD_FILE : IDS_TITLE_OPEN_FILE);
CTempStr strFilter;
TCHAR szFile[FILE_BUFF_LEN] = {0};
#ifdef _WIN32_WCE
OPENFILENAME ofn;
memset(&(ofn), 0, sizeof(ofn));
ofn.lStructSize = sizeof(ofn);
ofn.hwndOwner = hwndParent ? hwndParent : m_hWnd;
ofn.lpstrFile = szFile;
ofn.nMaxFile = FILE_BUFF_LEN;
ofn.lpstrTitle = strTitle;
BOOL (*gsGetOpenFileName)(OPENFILENAME*) = NULL;
HINSTANCE hInst = LoadLibrary(_T("gsgetfile.dll"));
if (hInst) {
(FARPROC&)gsGetOpenFileName = GetProcAddress(hInst, _T("gsGetOpenFileName"));
}
if (gsGetOpenFileName) {
if (!m_pszOpenFilter) MakeOpenFilter(&m_pszOpenFilter, TRUE);
ofn.lpstrFilter = m_pszOpenFilter;
ofn.Flags = OFN_EXPLORER | OFN_FILEMUSTEXIST | OFN_ALLOWMULTISELECT | OFN_HIDEREADONLY;
ofn.lpstrInitialDir = m_pOptions->m_szLastDir;
fRet = gsGetOpenFileName(&ofn);
}
else {
if (!m_pszOpenFilter) MakeOpenFilter(&m_pszOpenFilter, FALSE);
ofn.lpstrFilter = m_pszOpenFilter;
ofn.Flags = OFN_EXPLORER | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY;
ofn.lpstrInitialDir = m_pOptions->m_szLastDir;
fRet = GetOpenFileName(&ofn);
}
if (hInst) FreeLibrary(hInst);
#else
if (!m_pszOpenFilter) MakeOpenFilter(&m_pszOpenFilter, TRUE);
OPENFILENAME ofn;
memset(&(ofn), 0, sizeof(ofn));
ofn.lStructSize = sizeof(ofn);
ofn.hwndOwner = hwndParent ? hwndParent : m_hWnd;
ofn.lpstrFile = szFile;
ofn.nMaxFile = FILE_BUFF_LEN;
ofn.lpstrTitle = strTitle;
ofn.lpstrFilter = m_pszOpenFilter;
ofn.Flags = OFN_EXPLORER | OFN_FILEMUSTEXIST | OFN_ALLOWMULTISELECT | OFN_HIDEREADONLY;
ofn.lpstrInitialDir = m_pOptions->m_szLastDir;
fRet = GetOpenFileName(&ofn);
#endif
m_fShowOpenDlg = FALSE;
if (!fRet)
return FALSE;
// 婛懚偺儕僗僩傪嶍彍
if (!fAdd) DeleteAllFile();
// 捛壛
DWORD dw = GetFileAttributes(szFile);
if (dw != 0xFFFFFFFF) {
if (!(dw & FILE_ATTRIBUTE_DIRECTORY)) {
// single
if (IsPlayList(szFile))
LoadPlayList(szFile);
else
AddFile(szFile);
LPTSTR psz = _tcsrchr(szFile, _T('\\'));
if (psz) *psz = _T('\0');
_tcscpy(m_pOptions->m_szLastDir, szFile);
}
else {
// multi
TCHAR szPath[MAX_PATH];
LPTSTR p = szFile;
_tcscpy(m_pOptions->m_szLastDir, szFile);
while (TRUE) {
p += _tcslen(p);
if (*p != NULL || *(p + 1) == NULL)
break;
wsprintf(szPath, _T("%s\\%s"), m_pOptions->m_szLastDir, ++p);
if (IsPlayList(szPath))
LoadPlayList(szPath);
else
AddFile(szPath);
}
}
}
return TRUE;
}
void CMainWnd::SaveMediaFile(HWND hwndParent)
{
if (m_fShowOpenDlg)
return;
BOOL fRet;
CTempStr strTitle(IDS_TITLE_SAVE_LIST);
CTempStr strFilter(IDS_FILTER_SAVE_LIST);
TCHAR szFile[MAX_PATH] = {0};
m_fShowOpenDlg = TRUE;
#ifdef _WIN32_WCE
OPENFILENAME ofn;
memset(&(ofn), 0, sizeof(ofn));
ofn.lStructSize = sizeof(ofn);
ofn.hwndOwner = hwndParent ? hwndParent : m_hWnd;
ofn.lpstrFile = szFile;
ofn.nMaxFile = MAX_PATH;
ofn.lpstrTitle = strTitle;
ofn.lpstrFilter = strFilter;
ofn.lpstrDefExt = M3U_FILE_EXT;
ofn.Flags = OFN_EXPLORER | OFN_PATHMUSTEXIST | OFN_OVERWRITEPROMPT;
ofn.lpstrInitialDir = m_pOptions->m_szLastDir;
BOOL (*gsGetSaveFileName)(OPENFILENAME*) = NULL;
HINSTANCE hInst = LoadLibrary(_T("gsgetfile.dll"));
if (hInst) {
(FARPROC&)gsGetSaveFileName = GetProcAddress(hInst, _T("gsGetSaveFileName"));
}
if (gsGetSaveFileName)
fRet = gsGetSaveFileName(&ofn);
else
fRet = GetSaveFileName(&ofn);
if (hInst) FreeLibrary(hInst);
#else
OPENFILENAME ofn;
memset(&(ofn), 0, sizeof(ofn));
ofn.lStructSize = sizeof(ofn);
ofn.hwndOwner = m_hWnd;
ofn.lpstrFile = szFile;
ofn.nMaxFile = MAX_PATH;
ofn.lpstrTitle = strTitle;
ofn.lpstrFilter = strFilter;
ofn.lpstrDefExt = M3U_FILE_EXT;
ofn.Flags = OFN_EXPLORER | OFN_PATHMUSTEXIST | OFN_OVERWRITEPROMPT;
ofn.lpstrInitialDir = m_pOptions->m_szLastDir;
fRet = GetSaveFileName(&ofn);
#endif
m_fShowOpenDlg = FALSE;
if (!fRet)
return;
SavePlayList(szFile);
}
////////////////////////////////////////////////////////////////////////////////
void CMainWnd::OnFileOpen()
{
if (OpenMediaFile(FALSE) && m_pListFile->GetCount())
Play();
if (m_pPlayListDlg)
m_pPlayListDlg->UpdatePlayList();
}
void CMainWnd::OnFileOpenLocation()
{
TCHAR szLocation[MAX_URL];
if (m_pOptions->ShowLocationDlg(m_hWnd, szLocation) == IDOK) {
DeleteAllFile();
AddFile(szLocation);
if (m_pListFile->GetCount())
Play();
if (m_pPlayListDlg)
m_pPlayListDlg->UpdatePlayList();
}
}
void CMainWnd::OnFileAdd()
{
OpenMediaFile(TRUE);
if (m_pPlayListDlg)
m_pPlayListDlg->UpdatePlayList();
}
void CMainWnd::OnFileFind()
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -