📄 options.cpp
字号:
_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);
TCHAR szExt[MAX_PATH];
if (*pszExt == _T('.'))
_tcscpy(szExt, pszExt);
else {
_tcscpy(szExt, _T("."));
_tcscat(szExt, pszExt);
}
// 僼傽僀儖偺娭楢晅偗
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, szExt, 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;
TCHAR szExt[MAX_PATH];
if (*pszExt == _T('.'))
_tcscpy(szExt, pszExt);
else {
_tcscpy(szExt, _T("."));
_tcscat(szExt, pszExt);
}
if (RegOpenKeyEx(HKEY_CLASSES_ROOT, szExt, 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;
TCHAR szExt[MAX_PATH];
if (*pszExt == _T('.'))
_tcscpy(szExt, pszExt);
else {
_tcscpy(szExt, _T("."));
_tcscat(szExt, pszExt);
}
if (RegOpenKeyEx(HKEY_CLASSES_ROOT, szExt, 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);
}
BOOL CALLBACK COptions::PlugInPageProc(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->PlugInPageOnInitDialog(hwndDlg);
return TRUE;
case WM_NOTIFY:
{
NMHDR* pnmh = (NMHDR*)lParam;
if (pnmh->code == PSN_APPLY) {
pOptions->PlugInPageOnOK(hwndDlg);
return TRUE;
}
if (pnmh->code == NM_DBLCLK) {
pOptions->PlugInPageOnCommand(hwndDlg, IDC_CONFIG, 0);
return TRUE;
}
else if (pnmh->code == LVN_ITEMCHANGED) {
EnableWindow(GetDlgItem(hwndDlg, IDC_CONFIG),
ListView_GetSelectedCount(GetDlgItem(hwndDlg, IDC_LIST_PLUGIN)) ? TRUE : FALSE);
}
return FALSE;
}
case WM_COMMAND:
return pOptions->PlugInPageOnCommand(hwndDlg, wParam, lParam);
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;
#define BUTTON_HEIGHT 20
#define BUTTON_MARGIN 2
hwnd = GetDlgItem(hwndDlg, IDC_LIST_PLUGIN);
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,
HIWORD(lParam) - pt.y - (BUTTON_HEIGHT + BUTTON_MARGIN * 2), TRUE);
GetWindowRect(hwnd, &rc);
SendMessage(hwnd, LVM_SETCOLUMNWIDTH, 0,
MAKELPARAM(RECT_WIDTH(&rc) - GetSystemMetrics(SM_CXVSCROLL) - GetSystemMetrics(SM_CXBORDER) * 2, 0));
hwnd = GetDlgItem(hwndDlg, IDC_CONFIG);
GetWindowRect(hwnd, &rc);
pt.x = rc.left; pt.y = rc.top;
ScreenToClient(hwndDlg, &pt);
MoveWindow(hwnd, pt.x, HIWORD(lParam) - (BUTTON_HEIGHT + BUTTON_MARGIN), RECT_WIDTH(&rc), BUTTON_HEIGHT, TRUE);
return FALSE;
}
#endif
default:
return FALSE;
}
}
void COptions::PlugInPageOnInitDialog(HWND hwndDlg)
{
RECT rc;
LVCOLUMN lvc;
LVITEM lvi = {0};
TCHAR szName[MAX_PATH];
MAP_DEC_PLUGIN* pPlugIn;
HWND hwndLV = GetDlgItem(hwndDlg, IDC_LIST_PLUGIN);
ListView_SetExtendedListViewStyle(hwndLV, LVS_EX_FULLROWSELECT);
GetClientRect(hwndLV, &rc);
lvc.mask = LVCF_TEXT | LVCF_WIDTH | LVCF_FMT | LVCF_SUBITEM;
lvc.fmt = LVCFMT_LEFT;
lvc.pszText = NULL;
lvc.iSubItem = 0;
lvc.cx = RECT_WIDTH(&rc) - GetSystemMetrics(SM_CXVSCROLL) - 1;
ListView_InsertColumn(hwndLV, 0, &lvc);
int nIndex;
int nPlugIn = MAP_GetDecoderPlugInCount(m_hMap);
for (int i = 0; i < nPlugIn; i++) {
pPlugIn = MAP_GetDecoderPlugIn(m_hMap, i);
if (!pPlugIn)
continue;
pPlugIn->GetPluginName(szName);
lvi.mask = LVIF_TEXT | LVIF_PARAM;
lvi.pszText = szName;
lvi.lParam = i;
lvi.iItem = ListView_GetItemCount(hwndLV);
nIndex = ListView_InsertItem(hwndLV, &lvi);
}
EnableWindow(GetDlgItem(hwndDlg, IDC_CONFIG), FALSE);
}
void COptions::PlugInPageOnOK(HWND hwndDlg)
{
}
BOOL COptions::PlugInPageOnCommand(HWND hwndDlg, WPARAM wParam, LPARAM lParam)
{
if (LOWORD(wParam) == IDC_CONFIG) {
LVITEM lvi = {0};
MAP_DEC_PLUGIN* pPlugIn;
HWND hwndLV = GetDlgItem(hwndDlg, IDC_LIST_PLUGIN);
for (int i = 0; i < ListView_GetItemCount(hwndLV); i++) {
if (ListView_GetItemState(hwndLV, i, LVIS_SELECTED) == LVIS_SELECTED) {
lvi.mask = LVIF_PARAM;
lvi.iItem = i;
ListView_GetItem(hwndLV, &lvi);
pPlugIn = MAP_GetDecoderPlugIn(m_hMap, lvi.lParam);
if (pPlugIn) pPlugIn->ShowConfigDlg(hwndDlg);
break;
}
}
return TRUE;
}
return FALSE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -