📄 options.cpp
字号:
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 + -