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

📄 options.cpp

📁 PPC流行的播放软件gsplayer源码
💻 CPP
📖 第 1 页 / 共 4 页
字号:
		i++;
	}

	// Playlist
	i = 0;
	while (s_szPlayListExt[i][0] != NULL) {
		if (IsAssociatedFile(s_szPlayListExt[i], KEY_PLAYLIST)) {
			if (!SendMessage(GetDlgItem(hwndDlg, IDC_CHECK_PLS), BM_GETCHECK, 0, 0))
				UnassociateFile(s_szPlayListExt[i], KEY_PLAYLIST);
		}
		else {
			if (SendMessage(GetDlgItem(hwndDlg, IDC_CHECK_PLS), BM_GETCHECK, 0, 0))
				AssociateFile(s_szPlayListExt[i], KEY_PLAYLIST, NAME_PLAYLIST);
		}
		i++;
	}
}

int COptions::ShowLocationDlg(HWND hwndParent, LPTSTR pszLocation)
{
	m_pszLocation = pszLocation;
	int nRet = DialogBoxParam(GetInst(), (LPCTSTR)IDD_LOCATION_DLG, hwndParent, LocationDlgProc, (LPARAM)this);
	m_pszLocation = NULL;
	return nRet;
}

BOOL CALLBACK COptions::LocationDlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	static COptions* pOptions;
	switch (uMsg) {
	case WM_INITDIALOG:
		pOptions = (COptions*)lParam;
		pOptions->LocationDlgOnInitDialog(hwndDlg);
		return TRUE;
	case WM_COMMAND:
		switch (LOWORD(wParam)) {
		case IDOK:
			pOptions->LocationDlgOnOK(hwndDlg);
			return TRUE;
		case IDCANCEL:
			EndDialog(hwndDlg, LOWORD(wParam));
			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;
		POINT pt;

		hwnd = GetDlgItem(hwndDlg, IDCANCEL);
		GetWindowRect(hwnd, &rc);
		pt.x = rc.left; pt.y = rc.top;
		ScreenToClient(hwndDlg, &pt);
		MoveWindow(hwnd, LOWORD(lParam) - RECT_WIDTH(&rc) - 2, pt.y, RECT_WIDTH(&rc), RECT_HEIGHT(&rc), TRUE);

		hwnd = GetDlgItem(hwndDlg, IDC_CMB_LOCATION);
		GetWindowRect(hwnd, &rc);
		pt.x = rc.left; pt.y = rc.top;
		ScreenToClient(hwndDlg, &pt);
		MoveWindow(hwnd, pt.x, pt.y, LOWORD(lParam) - pt.x * 2, RECT_HEIGHT(&rc), TRUE);
		return TRUE;
	}
#endif
	default:
		return FALSE;
	}
}

void COptions::LocationDlgOnInitDialog(HWND hwndDlg)
{
	ShellInitDialog(hwndDlg);
	HWND hwndCmb = GetDlgItem(hwndDlg, IDC_CMB_LOCATION);

	// 儗僕僗僩儕偐傜URL棜楌傪撉傒崬傒捛壛偡傞
	HKEY hKey = 0;
	TCHAR szLocation[MAX_URL], szName[32];
	if (RegOpenKeyEx(HKEY_CURRENT_USER, KEY_LOCATION, 
						0, KEY_READ, &hKey) == ERROR_SUCCESS) {
		DWORD dwType, dwSize;
		for (int i = 0; i < MAX_LOCATION; i++) {
			dwSize = sizeof(szLocation);
			wsprintf(szName, _T("%s%d"), NAME_LOCATION, i);
			if (RegQueryValueEx(hKey, szName, 0, &dwType, (LPBYTE)szLocation, &dwSize) == ERROR_SUCCESS) {
				SendMessage(hwndCmb, CB_ADDSTRING, 0, (LPARAM)szLocation);
			}
		}
		RegCloseKey(hKey);
	}
}

void COptions::LocationDlgOnOK(HWND hwndDlg)
{
	HWND hwndCmb = GetDlgItem(hwndDlg, IDC_CMB_LOCATION);
	int nIndex = SendMessage(hwndCmb, CB_GETCURSEL, 0, 0);
	if (nIndex == CB_ERR) {
		// 擖椡偝傟偨傕偺傪庢摼偡傞
		TCHAR szLocation[MAX_URL], szName[32];
		GetDlgItemText(hwndDlg, IDC_CMB_LOCATION, szLocation, MAX_URL);
		if (!_tcslen(szLocation))
			return;

		if (_tcsncmp(szLocation, HTTP_PREFIX, _tcslen(HTTP_PREFIX)) == 0)
			_tcscpy(m_pszLocation, szLocation);
		else
			wsprintf(m_pszLocation, _T("%s%s"), HTTP_PREFIX, szLocation);
	
		// 棜楌儕僗僩傪曐懚偡傞
		HKEY hKey = 0;
		DWORD dwDisposition;
		if (RegCreateKeyEx(HKEY_CURRENT_USER, KEY_LOCATION, 0, NULL, 
			REG_OPTION_NON_VOLATILE, KEY_WRITE | KEY_READ, NULL, &hKey, &dwDisposition) == ERROR_SUCCESS) {
			DWORD dwType, dwSize;
			for (int i = MAX_LOCATION; i >= 0; i--) {
				wsprintf(szName, _T("%s%d"), NAME_LOCATION, i - 1);
				if (RegQueryValueEx(hKey, szName, 0, &dwType, (LPBYTE)szLocation, &dwSize) == ERROR_SUCCESS) {
					wsprintf(szName, _T("%s%d"), NAME_LOCATION, i);
					RegSetValueEx(hKey, szName, 0, dwType, (LPBYTE)szLocation, dwSize);
				}
			}
			wsprintf(szName, _T("%s%d"), NAME_LOCATION, 0);
			RegSetValueEx(hKey, szName, 0, REG_SZ, (LPBYTE)m_pszLocation, (_tcslen(m_pszLocation) + 1) * sizeof(TCHAR));
		}
	}
	else {
		SendMessage(hwndCmb, CB_GETLBTEXT, nIndex, (LPARAM)m_pszLocation);
	}
	EndDialog(hwndDlg, IDOK);
}

void COptions::AssociateFile(LPCTSTR pszExt, LPCTSTR pszKey, LPCTSTR pszName, UINT uIconID)
{
	TCHAR szModule[MAX_PATH], szTemp[MAX_PATH];
	GetModuleFileName(GetInst(), szModule, MAX_PATH);

	// 僼傽僀儖偺娭楢晅偗
	HKEY hKey, hKeySub;
	DWORD dwDisposition;
	if (RegCreateKeyEx(HKEY_CLASSES_ROOT, pszKey, 0, NULL, 
		REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &hKey, &dwDisposition) == ERROR_SUCCESS) {		
		wsprintf(szTemp, _T("%s"), pszName);
		RegSetValueEx(hKey, NULL, 0, REG_SZ, (LPBYTE)szTemp, (_tcslen(szTemp) + 1) * sizeof(TCHAR));

		// DefaultIcon
		if (RegCreateKeyEx(hKey, _T("DefaultIcon"), 0, NULL, 
			REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &hKeySub, &dwDisposition) == ERROR_SUCCESS) {
			wsprintf(szTemp, _T("%s,-%d"), szModule, uIconID);
			RegSetValueEx(hKeySub, NULL, 0, REG_SZ, (LPBYTE)szTemp, (_tcslen(szTemp) + 1) * sizeof(TCHAR));
			RegCloseKey(hKeySub);
		}

		// Shell-Open-Command
		if (RegCreateKeyEx(hKey, _T("Shell\\Open\\Command"), 0, NULL, 
			REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &hKeySub, &dwDisposition) == ERROR_SUCCESS) {
			wsprintf(szTemp, _T("\"%s\" \"%%1\""), szModule);
			RegSetValueEx(hKeySub, NULL, 0, REG_SZ, (LPBYTE)szTemp, (_tcslen(szTemp) + 1) * sizeof(TCHAR));
			RegCloseKey(hKeySub);
		}
		RegCloseKey(hKey);

		if (RegCreateKeyEx(HKEY_CLASSES_ROOT, pszExt, 0, NULL, 
			REG_OPTION_NON_VOLATILE, KEY_READ | KEY_WRITE, NULL, &hKey, &dwDisposition) == ERROR_SUCCESS) {
		
			TCHAR szBackup[MAX_PATH] = _T("");
			DWORD dwType, dwSize = sizeof(szBackup);
			RegQueryValueEx(hKey, NULL, 0, &dwType, (LPBYTE)szBackup, &dwSize);	
			if (_tcscmp(szBackup, pszKey) != 0)
				RegSetValueEx(hKey, VALUE_BACKUP, 0, REG_SZ, (LPBYTE)szBackup, (_tcslen(szBackup) + 1) * sizeof(TCHAR));

			RegSetValueEx(hKey, NULL, 0, REG_SZ, (LPBYTE)pszKey, (_tcslen(pszKey) + 1) * sizeof(TCHAR));
			RegCloseKey(hKey);
		}
	}
}

void COptions::UnassociateFile(LPCTSTR pszExt, LPCTSTR pszKey)
{
	HKEY hKey;
	if (RegOpenKeyEx(HKEY_CLASSES_ROOT, pszExt, 0, KEY_READ | KEY_WRITE, &hKey) == ERROR_SUCCESS) {
		TCHAR szBackup[MAX_PATH] = _T("");
		TCHAR szValue[MAX_PATH] = _T("");

		DWORD dwType, dwSize = sizeof(szBackup);
		RegQueryValueEx(hKey, VALUE_BACKUP, 0, &dwType, (LPBYTE)szBackup, &dwSize);	

		dwSize = sizeof(szValue);
		RegQueryValueEx(hKey, NULL, 0, &dwType, (LPBYTE)szValue, &dwSize);	
		if (_tcscmp(szValue, pszKey) == 0)
			RegSetValueEx(hKey, NULL, 0, REG_SZ, (LPBYTE)szBackup, (_tcslen(szBackup) + 1) * sizeof(TCHAR));

		RegDeleteValue(hKey, VALUE_BACKUP);
		RegCloseKey(hKey);
	}
}

BOOL COptions::IsAssociatedFile(LPCTSTR pszExt, LPCTSTR pszKey)
{
	HKEY hKey;
	if (RegOpenKeyEx(HKEY_CLASSES_ROOT, pszExt, 0, KEY_READ, &hKey) != ERROR_SUCCESS)
		return FALSE;

	TCHAR szValue[MAX_PATH] = _T("");
	DWORD dwType, dwSize = sizeof(szValue);
	RegQueryValueEx(hKey, NULL, 0, &dwType, (LPBYTE)szValue, &dwSize);
	RegCloseKey(hKey);

	if (_tcscmp(szValue, pszKey) != 0)
		return FALSE;

	return TRUE;
}

BOOL COptions::ShowSleepTimerDlg(HWND hwndParent)
{
	return DialogBoxParam(GetInst(), (LPCTSTR)IDD_SLEEPTIMER_DLG, 
						hwndParent, SleepTimerDlgProc, (LPARAM)this) == IDOK ? TRUE : FALSE;
}

BOOL CALLBACK COptions::SleepTimerDlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	static COptions* pOptions;
	switch (uMsg) {
	case WM_INITDIALOG:
		pOptions = (COptions*)lParam;
		pOptions->SleepTimerDlgOnInitDialog(hwndDlg);
		return TRUE;
	case WM_COMMAND:
		return pOptions->SleepTimerDlgOnCommand(hwndDlg, wParam, lParam);
	case WM_NOTIFY:
		{
			NMHDR* pnmh = (NMHDR*)lParam; 
			if (pnmh->code == UDN_DELTAPOS) {
				pOptions->SleepTimerDlgOnDeltaPos(hwndDlg, (NM_UPDOWN*)pnmh);
				return TRUE;
			}
			return FALSE;
		}
	default:
		return FALSE;
	}
}

void COptions::SleepTimerDlgOnInitDialog(HWND hwndDlg)
{
	TCHAR sz[32];

	SendMessage(GetDlgItem(hwndDlg, IDC_EDIT_TIMER), EM_LIMITTEXT, 3, 0);
	wsprintf(sz, _T("%d"), m_nSleepMinutes);
	SetDlgItemText(hwndDlg, IDC_EDIT_TIMER, sz);

	if (m_nSleepTime != -1) {
		EnableWindow(GetDlgItem(hwndDlg, IDC_EDIT_TIMER), FALSE);
#ifdef _WIN32_WCE
		EnableWindow(GetDlgItem(hwndDlg, IDC_CHECK_POWEROFF), FALSE);
#endif
		EnableWindow(GetDlgItem(hwndDlg, IDOK), FALSE);
		SendMessage(GetDlgItem(hwndDlg, IDC_CHECK_TIMER), BM_SETCHECK, 1, 0);
	}

#ifdef _WIN32_WCE
	if (m_fSleepPowerOff)
		SendMessage(GetDlgItem(hwndDlg, IDC_CHECK_POWEROFF), BM_SETCHECK, 1, 0);
#endif
}

BOOL COptions::SleepTimerDlgOnCommand(HWND hwndDlg, WPARAM wParam, LPARAM lParam)
{
	int n;
	TCHAR szBuf[32];

	switch (LOWORD(wParam)) {
	case IDCANCEL:
		EndDialog(hwndDlg, IDCANCEL);
		return TRUE;
	case IDOK:
		if (!IsWindowEnabled(GetDlgItem(hwndDlg, IDC_EDIT_TIMER)))
			return TRUE;

		GetWindowText(GetDlgItem(hwndDlg, IDC_EDIT_TIMER), szBuf, 32);
		n = _tcstol(szBuf, 0, 10);
		if (n == 0) {
			SetFocus(GetDlgItem(hwndDlg, IDC_EDIT_TIMER));
			return TRUE;
		}
		m_nSleepMinutes = n;

		m_nSleepTime = SendMessage(GetDlgItem(hwndDlg, IDC_CHECK_TIMER), BM_GETCHECK, 0, 0) ? 0 : -1;
#ifdef _WIN32_WCE
		m_fSleepPowerOff = SendMessage(GetDlgItem(hwndDlg, IDC_CHECK_POWEROFF), BM_GETCHECK, 0, 0);
#endif
		EndDialog(hwndDlg, IDOK);
		return TRUE;
	case IDC_CHECK_TIMER:
		if (HIWORD(wParam) == BN_CLICKED) {
			if (!IsWindowEnabled(GetDlgItem(hwndDlg, IDC_EDIT_TIMER))) {
				EnableWindow(GetDlgItem(hwndDlg, IDC_EDIT_TIMER), TRUE);
#ifdef _WIN32_WCE
				EnableWindow(GetDlgItem(hwndDlg, IDC_CHECK_POWEROFF), TRUE);
#endif
				EnableWindow(GetDlgItem(hwndDlg, IDOK), TRUE);
			}
		}
		return FALSE;	
	}
	return FALSE;
}

void COptions::SleepTimerDlgOnDeltaPos(HWND hwndDlg, NM_UPDOWN* pNmud)
{
	TCHAR sz[32];
	GetDlgItemText(hwndDlg, IDC_EDIT_TIMER, sz, 32);

	int n = _tcstol(sz, NULL, 10);
	if (pNmud->iDelta < 0)
		n = min(n + 1, 999);
	else if (pNmud->iDelta > 0)
		n = max(n - 1, 1);
	wsprintf(sz, _T("%d"), n);
	SetDlgItemText(hwndDlg, IDC_EDIT_TIMER, sz);
}

⌨️ 快捷键说明

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