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

📄 mainwndcmd.cpp

📁 windows mobile上很好用的音频播放器希望大家会喜欢
💻 CPP
📖 第 1 页 / 共 2 页
字号:
#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 + -