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

📄 options.cpp

📁 PPC流行的播放软件gsplayer源码
💻 CPP
📖 第 1 页 / 共 4 页
字号:
		RegSetValueEx(hKey, NAME_EQ_BANK2, 0, REG_DWORD, (LPBYTE)&eq.data[1], sizeof(DWORD));
		RegSetValueEx(hKey, NAME_EQ_BANK3, 0, REG_DWORD, (LPBYTE)&eq.data[2], sizeof(DWORD));
		RegSetValueEx(hKey, NAME_EQ_BANK4, 0, REG_DWORD, (LPBYTE)&eq.data[3], sizeof(DWORD));
		RegSetValueEx(hKey, NAME_EQ_BANK5, 0, REG_DWORD, (LPBYTE)&eq.data[4], sizeof(DWORD));
		RegSetValueEx(hKey, NAME_EQ_BANK6, 0, REG_DWORD, (LPBYTE)&eq.data[5], sizeof(DWORD));
		RegSetValueEx(hKey, NAME_EQ_BANK7, 0, REG_DWORD, (LPBYTE)&eq.data[6], sizeof(DWORD));
		RegSetValueEx(hKey, NAME_EQ_BANK8, 0, REG_DWORD, (LPBYTE)&eq.data[7], sizeof(DWORD));
		RegSetValueEx(hKey, NAME_EQ_BANK9, 0, REG_DWORD, (LPBYTE)&eq.data[8], sizeof(DWORD));
		RegSetValueEx(hKey, NAME_EQ_BANK10, 0, REG_DWORD, (LPBYTE)&eq.data[9], sizeof(DWORD));

		int nLevel = MAP_GetBassBoostLevel(hMap);
		RegSetValueEx(hKey, NAME_BASSBOOST, 0, REG_DWORD, (LPBYTE)&nLevel, sizeof(DWORD));

		// window positions
		RegSetValueEx(hKey, NAME_WINDOW_TOPMOST, 0, REG_DWORD, (LPBYTE)&m_fTopMost, sizeof(DWORD));
		RegSetValueEx(hKey, NAME_WINDOW_LEFT, 0, REG_DWORD, (LPBYTE)&m_ptInitWnd.x, sizeof(DWORD));
		RegSetValueEx(hKey, NAME_WINDOW_TOP, 0, REG_DWORD, (LPBYTE)&m_ptInitWnd.y, sizeof(DWORD));

		// general settings
		RegSetValueEx(hKey, NAME_PLAY_REPEAT, 0, REG_DWORD, (LPBYTE)&m_fRepeat, sizeof(DWORD));
		RegSetValueEx(hKey, NAME_PLAY_SHUFFLE, 0, REG_DWORD, (LPBYTE)&m_fShuffle, sizeof(DWORD));
		RegSetValueEx(hKey, NAME_DRAW_PEEK, 0, REG_DWORD, (LPBYTE)&m_fDrawPeek, sizeof(DWORD));
		RegSetValueEx(hKey, NAME_TIME_REVERSE, 0, REG_DWORD, (LPBYTE)&m_fTimeReverse, sizeof(DWORD));
		RegSetValueEx(hKey, NAME_SAVE_DEFLIST, 0, REG_DWORD, (LPBYTE)&m_fSaveDefList, sizeof(DWORD));
		RegSetValueEx(hKey, NAME_ADD_EXISTING, 0, REG_DWORD, (LPBYTE)&m_fAddExisting, sizeof(DWORD));
		RegSetValueEx(hKey, NAME_RESUME, 0, REG_DWORD, (LPBYTE)&m_fResume, sizeof(DWORD));
		RegSetValueEx(hKey, NAME_RESUME_TRACK, 0, REG_DWORD, (LPBYTE)&m_nResumeTrack, sizeof(DWORD));
		RegSetValueEx(hKey, NAME_RESUME_TIME, 0, REG_DWORD, (LPBYTE)&m_nResumeTime, sizeof(DWORD));
		RegSetValueEx(hKey, NAME_PLAYONSTART, 0, REG_DWORD, (LPBYTE)&m_fPlayOnStart, sizeof(DWORD));
		RegSetValueEx(hKey, NAME_TRAYICON, 0, REG_DWORD, (LPBYTE)&m_fTrayIcon, sizeof(DWORD));
		RegSetValueEx(hKey, NAME_SEARCHSUBFOLDERS, 0, REG_DWORD, (LPBYTE)&m_fSearchSubFolders, sizeof(DWORD));
		RegSetValueEx(hKey, NAME_SCROLLTITLE, 0, REG_DWORD, (LPBYTE)&m_fScrollTitle, sizeof(DWORD));
		RegSetValueEx(hKey, NAME_LAST_DIR, 0, REG_SZ, (LPBYTE)m_szLastDir, sizeof(TCHAR) * (_tcslen(m_szLastDir) + 1));
		RegSetValueEx(hKey, NAME_SKIN_FILE, 0, REG_SZ, (LPBYTE)m_szSkinFile, sizeof(TCHAR) * (_tcslen(m_szSkinFile) + 1));
		RegSetValueEx(hKey, NAME_SLEEP_MINUTES, 0, REG_DWORD, (LPBYTE)&m_nSleepMinutes, sizeof(DWORD));
#ifdef _WIN32_WCE
		RegSetValueEx(hKey, NAME_SLEEP_POWEROFF, 0, REG_DWORD, (LPBYTE)&m_fSleepPowerOff, sizeof(DWORD));
#endif

		// decoder
		RegSetValueEx(hKey, NAME_OUTPUT_BUFF, 0, REG_DWORD, 
							(LPBYTE)&m_Options.nOutputBufferLen, sizeof(DWORD));
		RegSetValueEx(hKey, NAME_OUTPUT_PREBUFF, 0, REG_DWORD, 
							(LPBYTE)&m_Options.nOutputPrebuffer, sizeof(DWORD));
		RegSetValueEx(hKey, NAME_OUTPUT_FADE, 0, REG_DWORD, 
							(LPBYTE)&m_Options.fFadeIn, sizeof(DWORD));
		RegSetValueEx(hKey, NAME_SCAN_COMPLETELY, 0, REG_DWORD, 
							(LPBYTE)&m_Options.fScanMpegCompletely, sizeof(DWORD));
		RegSetValueEx(hKey, NAME_SUPPRESS_ZERO, 0, REG_DWORD, 
							(LPBYTE)&m_Options.fSuppressZeroSamples, sizeof(DWORD));
		RegSetValueEx(hKey, NAME_ALWAYSOPENDEV, 0, REG_DWORD, 
							(LPBYTE)&m_Options.fAlwaysOpenDevice, sizeof(DWORD));

		// streaming
		RegSetValueEx(hKey, NAME_STREAMING_BUFF, 0, REG_DWORD, 
							(LPBYTE)&m_StreamingOptions.nBuf, sizeof(DWORD));
		RegSetValueEx(hKey, NAME_STREAMING_PREBUFF, 0, REG_DWORD, 
							(LPBYTE)&m_StreamingOptions.nPreBuf, sizeof(DWORD));
		RegSetValueEx(hKey, NAME_STREAMING_USEPROXY, 0, REG_DWORD, 
							(LPBYTE)&m_StreamingOptions.fUseProxy, sizeof(DWORD));
		RegSetValueEx(hKey, NAME_STREAMING_PROXY, 0, REG_SZ, (LPBYTE)m_StreamingOptions.szProxy, 
							sizeof(TCHAR) * (_tcslen(m_StreamingOptions.szProxy) + 1));

		RegCloseKey(hKey);
	}
}

void COptions::UpdateBufferInfo(HWND hwndDlg, HANDLE hMap)
{
	TCHAR sz[128];
	CTempStr strFmt(IDS_FMT_BUFINFO);
	DWORD cbTotalAudio, cbBufferedAudio, cbTotalStream, cbBufferedStream;
	MAP_GetBufferInfo(hMap, &cbTotalAudio, &cbBufferedAudio, &cbTotalStream, &cbBufferedStream);

	wsprintf(sz, strFmt, cbBufferedStream / 1024, cbTotalStream / 1024, cbTotalStream ? cbBufferedStream * 100 / cbTotalStream : 0,
		cbBufferedAudio / 1024, cbTotalAudio / 1024, cbTotalAudio ? cbBufferedAudio * 100 / cbTotalAudio : 0);
	SetDlgItemText(hwndDlg, IDC_STATIC_BUFINFO, sz);
}

void COptions::ShowAboutDlg(HWND hwndParent, HANDLE hMap)
{
	DialogBoxParam(GetInst(), (LPCTSTR)IDD_ABOUT_DLG, hwndParent, AboutDlgProc, (LPARAM)hMap);
}

BOOL CALLBACK COptions::AboutDlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	static HANDLE hMap;
	switch (uMsg) {
	case WM_INITDIALOG:
		hMap = (HANDLE)lParam;
		ShellInitDialog(hwndDlg);
		COptions::UpdateBufferInfo(hwndDlg, hMap);
		SetTimer(hwndDlg, ID_TIMER_BUFINFO, 500, NULL);
		return TRUE;
	case WM_COMMAND:
		if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL) {
			KillTimer(hwndDlg, ID_TIMER_BUFINFO);
			EndDialog(hwndDlg, LOWORD(wParam));
			return TRUE;
		}
	case WM_TIMER:
		COptions::UpdateBufferInfo(hwndDlg, hMap);
		return TRUE;
	case WM_PAINT:
		return DefDlgPaintProc(hwndDlg, wParam, lParam);
	case WM_CTLCOLORSTATIC:
		return DefDlgCtlColorStaticProc(hwndDlg, wParam, lParam);
#ifdef _WIN32_WCE_PPC
	case WM_SIZE:
	{
		RECT rc;
		HWND hwnd = GetDlgItem(hwndDlg, IDC_STATIC_BUFINFO);
		GetWindowRect(hwnd, &rc);

		POINT pt = {rc.left, rc.top};
		ScreenToClient(hwndDlg, &pt);
		MoveWindow(GetDlgItem(hwndDlg, IDC_STATIC_BUFINFO), 
				pt.x, pt.y, LOWORD(lParam) - pt.x * 2, HIWORD(lParam) - pt.y - pt.x, TRUE);
		return TRUE;
	}
#endif
	default:
		return FALSE;
	}
}

void COptions::ShowOptionDlg(HWND hwndParent, HANDLE hMap)
{
	m_hMap = hMap;
	CTempStr strTitle(IDS_TITLE_OPTION);

	PROPSHEETPAGE* pPage = NULL;
	int nPages = GetPropPages(&pPage);
	if (!pPage || !nPages)
		return;
	
	PROPSHEETHEADER psh;
	psh.dwSize = sizeof(PROPSHEETHEADER);
#ifdef _WIN32_WCE_PPC
	psh.dwFlags = PSH_PROPSHEETPAGE | PSH_USECALLBACK | PSH_MAXIMIZE;
#else
	psh.dwFlags = PSH_PROPSHEETPAGE | PSH_NOAPPLYNOW | PSH_USECALLBACK;
#endif
	psh.pfnCallback = PropSheetCallback;
	psh.nPages = nPages;
	psh.nStartPage = 0;
	psh.pszIcon = NULL;
	psh.pszCaption = strTitle;
	psh.hwndParent = hwndParent;
	psh.hInstance = GetInst();
	psh.ppsp = pPage;
	PropertySheet(&psh);

	delete [] pPage;
	m_hMap = NULL;
}

int COptions::GetPropPages(PROPSHEETPAGE** ppPage)
{
#define DEF_NUM_OF_PAGES	5
	*ppPage = new PROPSHEETPAGE[DEF_NUM_OF_PAGES];
	memset(*ppPage, 0, sizeof(PROPSHEETPAGE) * DEF_NUM_OF_PAGES);
	(*ppPage)[0].dwSize = sizeof(PROPSHEETPAGE);
	(*ppPage)[0].dwFlags = PSP_DEFAULT;
	(*ppPage)[0].pszTemplate = MAKEINTRESOURCE(IDD_PAGE_PLAYER);
	(*ppPage)[0].pfnDlgProc = (DLGPROC)PlayerPageProc;
	(*ppPage)[0].hInstance = GetInst();
	(*ppPage)[0].pszIcon = NULL;
	(*ppPage)[0].lParam = (LPARAM)this;
	(*ppPage)[1].dwSize = sizeof(PROPSHEETPAGE);
	(*ppPage)[1].dwFlags = PSP_DEFAULT;
	(*ppPage)[1].pszTemplate = MAKEINTRESOURCE(IDD_PAGE_DECODER);
	(*ppPage)[1].pfnDlgProc = (DLGPROC)DecoderPageProc;
	(*ppPage)[1].hInstance = GetInst();
	(*ppPage)[1].pszIcon = NULL;
	(*ppPage)[1].lParam = (LPARAM)this;
	(*ppPage)[2].dwSize = sizeof(PROPSHEETPAGE);
	(*ppPage)[2].dwFlags = PSP_DEFAULT;
	(*ppPage)[2].pszTemplate = MAKEINTRESOURCE(IDD_PAGE_STREAMING);
	(*ppPage)[2].pfnDlgProc = (DLGPROC)StreamingPageProc;
	(*ppPage)[2].hInstance = GetInst();
	(*ppPage)[2].pszIcon = NULL;
	(*ppPage)[2].lParam = (LPARAM)this;
	(*ppPage)[3].dwSize = sizeof(PROPSHEETPAGE);
	(*ppPage)[3].dwFlags = PSP_DEFAULT;
	(*ppPage)[3].pszTemplate = MAKEINTRESOURCE(IDD_PAGE_SKIN);
	(*ppPage)[3].pfnDlgProc = (DLGPROC)SkinPageProc;
	(*ppPage)[3].hInstance = GetInst();
	(*ppPage)[3].pszIcon = NULL;
	(*ppPage)[3].lParam = (LPARAM)this;
	(*ppPage)[4].dwSize = sizeof(PROPSHEETPAGE);
	(*ppPage)[4].dwFlags = PSP_DEFAULT;
	(*ppPage)[4].pszTemplate = MAKEINTRESOURCE(IDD_PAGE_ASSOCIATE);
	(*ppPage)[4].pfnDlgProc = (DLGPROC)AssociatePageProc;
	(*ppPage)[4].hInstance = GetInst();
	(*ppPage)[4].pszIcon = NULL;
	(*ppPage)[4].lParam = (LPARAM)this;
	return DEF_NUM_OF_PAGES;
}

BOOL CALLBACK COptions::PlayerPageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	static COptions* pOptions;
	switch (uMsg) {
	case WM_INITDIALOG:
		SetWindowLong(hwndDlg, DWL_MSGRESULT, FALSE);
		pOptions = (COptions*)((LPPROPSHEETPAGE)lParam)->lParam;
		pOptions->PlayerPageOnInitDialog(hwndDlg);
		return TRUE;
	case WM_NOTIFY:
		{
			NMHDR* pnmh = (NMHDR*)lParam; 
			if (pnmh->code == PSN_APPLY) {
				pOptions->PlayerPageOnOK(hwndDlg);
				return TRUE;
			}
			return FALSE;
		}
	case WM_PAINT:
		return DefDlgPaintProc(hwndDlg, wParam, lParam);
	case WM_CTLCOLORSTATIC:
		return DefDlgCtlColorStaticProc(hwndDlg, wParam, lParam);
	default:
		return FALSE;
	}
}

void COptions::PlayerPageOnInitDialog(HWND hwndDlg)
{
	if (m_fDrawPeek)
		SendMessage(GetDlgItem(hwndDlg, IDC_CHECK_PEEK), BM_SETCHECK, 1, 0);
	if (m_fSaveDefList)
		SendMessage(GetDlgItem(hwndDlg, IDC_CHECK_SAVE_DEFLIST), BM_SETCHECK, 1, 0);
	if (m_fAddExisting)
		SendMessage(GetDlgItem(hwndDlg, IDC_CHECK_ADD_EXISTING), BM_SETCHECK, 1, 0);
	if (m_fResume)
		SendMessage(GetDlgItem(hwndDlg, IDC_CHECK_RESUME), BM_SETCHECK, 1, 0);
	if (m_fPlayOnStart)
		SendMessage(GetDlgItem(hwndDlg, IDC_CHECK_PLAYONSTART), BM_SETCHECK, 1, 0);
	if (m_fTrayIcon)
		SendMessage(GetDlgItem(hwndDlg, IDC_CHECK_TRAYICON), BM_SETCHECK, 1, 0);
	if (m_fScrollTitle)
		SendMessage(GetDlgItem(hwndDlg, IDC_CHECK_SCROLLTITLE), BM_SETCHECK, 1, 0);
}

void COptions::PlayerPageOnOK(HWND hwndDlg)
{
	m_fDrawPeek = SendMessage(GetDlgItem(hwndDlg, IDC_CHECK_PEEK), BM_GETCHECK, 0, 0);
	m_fSaveDefList = SendMessage(GetDlgItem(hwndDlg, IDC_CHECK_SAVE_DEFLIST), BM_GETCHECK, 0, 0);
	m_fAddExisting = SendMessage(GetDlgItem(hwndDlg, IDC_CHECK_ADD_EXISTING), BM_GETCHECK, 0, 0);
	m_fResume = SendMessage(GetDlgItem(hwndDlg, IDC_CHECK_RESUME), BM_GETCHECK, 0, 0);
	m_fTrayIcon = SendMessage(GetDlgItem(hwndDlg, IDC_CHECK_TRAYICON), BM_GETCHECK, 0, 0);
	m_fPlayOnStart = SendMessage(GetDlgItem(hwndDlg, IDC_CHECK_PLAYONSTART), BM_GETCHECK, 0, 0);
	m_fScrollTitle = SendMessage(GetDlgItem(hwndDlg, IDC_CHECK_SCROLLTITLE), BM_GETCHECK, 0, 0);
}

BOOL CALLBACK COptions::DecoderPageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	static COptions* pOptions;
	switch (uMsg) {
	case WM_INITDIALOG:
		SetWindowLong(hwndDlg, DWL_MSGRESULT, FALSE);
		pOptions = (COptions*)((LPPROPSHEETPAGE)lParam)->lParam;
		pOptions->DecoderPageOnInitDialog(hwndDlg);
		return TRUE;
	case WM_NOTIFY:
		{
			NMHDR* pnmh = (NMHDR*)lParam; 
			if (pnmh->code == PSN_APPLY) {
				pOptions->DecoderPageOnOK(hwndDlg);
				return TRUE;
			}
			else if (pnmh->code == UDN_DELTAPOS) {
				pOptions->DecoderPageOnDeltaPos(hwndDlg, (NM_UPDOWN*)pnmh);
				return TRUE;
			}
			return FALSE;
		}
	case WM_PAINT:
		return DefDlgPaintProc(hwndDlg, wParam, lParam);
	case WM_CTLCOLORSTATIC:
		return DefDlgCtlColorStaticProc(hwndDlg, wParam, lParam);
	default:
		return FALSE;
	}
}

void COptions::DecoderPageOnInitDialog(HWND hwndDlg)
{
	ShellInitDialog(hwndDlg);

	SendMessage(GetDlgItem(hwndDlg, IDC_EDIT_OUT_BUFF_LEN), EM_LIMITTEXT, 4, 0);
	SendMessage(GetDlgItem(hwndDlg, IDC_EDIT_OUT_PREBUFF), EM_LIMITTEXT, 3, 0);

	TCHAR szBuf[32];
	wsprintf(szBuf, _T("%d"), m_Options.nOutputBufferLen);
	SetWindowText(GetDlgItem(hwndDlg, IDC_EDIT_OUT_BUFF_LEN), szBuf);
	wsprintf(szBuf, _T("%d"), m_Options.nOutputPrebuffer);
	SetWindowText(GetDlgItem(hwndDlg, IDC_EDIT_OUT_PREBUFF), szBuf);
	if (m_Options.fFadeIn)
		SendMessage(GetDlgItem(hwndDlg, IDC_CHECK_OUTPUT_FADE), BM_SETCHECK, 1, 0);
	if (m_Options.fScanMpegCompletely)
		SendMessage(GetDlgItem(hwndDlg, IDC_CHECK_SCANCOMPLETELY), BM_SETCHECK, 1, 0);
	if (m_Options.fSuppressZeroSamples)
		SendMessage(GetDlgItem(hwndDlg, IDC_CHECK_SUPZERO), BM_SETCHECK, 1, 0);
	if (m_Options.fAlwaysOpenDevice)
		SendMessage(GetDlgItem(hwndDlg, IDC_CHECK_ALWAYSOPENDEV), BM_SETCHECK, 1, 0);
}

void COptions::DecoderPageOnOK(HWND hwndDlg)
{
	TCHAR szBuf[32];
	int n;
	GetWindowText(GetDlgItem(hwndDlg, IDC_EDIT_OUT_BUFF_LEN), szBuf, 32);
	n = _tcstol(szBuf, 0, 10);
	if (n < OUTPUT_BUFF_MIN || n > OUTPUT_BUFF_MAX)
		n = min(max(n, OUTPUT_BUFF_MIN), OUTPUT_BUFF_MAX);
		
	m_Options.nOutputBufferLen = n;

	GetWindowText(GetDlgItem(hwndDlg, IDC_EDIT_OUT_PREBUFF), szBuf, 32);
	n = _tcstol(szBuf, 0, 10);
	if (n < 0 || n > 100)
		n = min(max(n, 0), 100);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -