📄 options.cpp
字号:
int n = _tcstol(sz, NULL, 10);
if (n >= STREAMING_BUFF_MIN) {
n = max(min(n, STREAMING_BUFF_MAX), STREAMING_BUFF_MIN);
m_StreamingOptions.nBuf = n / 2;
}
GetDlgItemText(hwndDlg, IDC_EDIT_PREBUFF, sz, MAX_URL);
n = _tcstol(sz, NULL, 10);
if (n >= STREAMING_BUFF_MIN) {
n = max(min(n, STREAMING_BUFF_MAX), STREAMING_BUFF_MIN);
m_StreamingOptions.nPreBuf = n / 2;
}
GetDlgItemText(hwndDlg, IDC_EDIT_PROXY, m_StreamingOptions.szProxy, MAX_URL);
m_StreamingOptions.fUseProxy = SendMessage(GetDlgItem(hwndDlg, IDC_CHECK_PROXY), BM_GETCHECK, 0, 0);
}
BOOL CALLBACK COptions::SkinPageProc(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->SkinPageOnInitDialog(hwndDlg);
return TRUE;
case WM_COMMAND:
switch (LOWORD(wParam)) {
case IDC_BROWSE:
pOptions->SkinPageOnBrowse(hwndDlg);
return TRUE;
}
return FALSE;
case WM_NOTIFY:
{
NMHDR* pnmh = (NMHDR*)lParam;
if (pnmh->code == PSN_APPLY) {
pOptions->SkinPageOnOK(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::SkinPageOnInitDialog(HWND hwndDlg)
{
SetDlgItemText(hwndDlg, IDC_EDIT_FILE, m_szSkinFile);
}
void COptions::SkinPageOnBrowse(HWND hwndDlg)
{
TCHAR szFile[MAX_PATH] = {0};
CTempStr strTitle(IDS_TITLE_SKIN_FILE);
CTempStr strFilter(IDS_FILTER_SKIN_FILE);
OPENFILENAME ofn;
memset(&(ofn), 0, sizeof(ofn));
ofn.lStructSize = sizeof(ofn);
ofn.hwndOwner = hwndDlg;
ofn.lpstrFile = szFile;
ofn.nMaxFile = MAX_PATH;
ofn.lpstrTitle = strTitle;
ofn.lpstrFilter = strFilter;
ofn.Flags = OFN_EXPLORER | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY;
ofn.lpstrInitialDir = m_szLastDir;
#ifdef _WIN32_WCE
BOOL (*gsGetOpenFileName)(OPENFILENAME*) = NULL;
HINSTANCE hInst = LoadLibrary(_T("gsgetfile.dll"));
if (hInst) {
(FARPROC&)gsGetOpenFileName = GetProcAddress(hInst, _T("gsGetOpenFileName"));
}
if (gsGetOpenFileName) {
if (!gsGetOpenFileName(&ofn)) return;
}
else {
if (!GetOpenFileName(&ofn)) return;
}
if (hInst) FreeLibrary(hInst);
#else
if (!GetOpenFileName(&ofn)) return;
#endif
SetDlgItemText(hwndDlg, IDC_EDIT_FILE, szFile);
LPTSTR psz = _tcsrchr(szFile, _T('\\'));
if (psz) *psz = NULL;
_tcscpy(m_szLastDir, szFile);
}
void COptions::SkinPageOnOK(HWND hwndDlg)
{
GetDlgItemText(hwndDlg, IDC_EDIT_FILE, m_szSkinFile, MAX_PATH);
}
BOOL CALLBACK COptions::AssociatePageProc(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->AssociatePageOnInitDialog(hwndDlg);
return TRUE;
case WM_NOTIFY:
{
NMHDR* pnmh = (NMHDR*)lParam;
if (pnmh->code == PSN_APPLY) {
pOptions->AssociatePageOnOK(hwndDlg);
return TRUE;
}
return FALSE;
}
case WM_PAINT:
return DefDlgPaintProc(hwndDlg, wParam, lParam);
case WM_CTLCOLORSTATIC:
return DefDlgCtlColorStaticProc(hwndDlg, wParam, lParam);
case WM_COMMAND:
if (LOWORD(wParam) == IDC_CHECK_ALL) {
HWND hwndLV = GetDlgItem(hwndDlg, IDC_LIST_EXT);
for (int i = 0; i < ListView_GetItemCount(hwndLV); i++) {
ListView_SetCheckState(hwndLV, i , TRUE);
}
return TRUE;
}
else if (LOWORD(wParam) == IDC_CLEAR_ALL) {
HWND hwndLV = GetDlgItem(hwndDlg, IDC_LIST_EXT);
for (int i = 0; i < ListView_GetItemCount(hwndLV); i++) {
ListView_SetCheckState(hwndLV, i , FALSE);
}
return TRUE;
}
return FALSE;
#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_EXT);
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_CHECK_ALL);
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);
hwnd = GetDlgItem(hwndDlg, IDC_CLEAR_ALL);
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::AssociatePageOnInitDialog(HWND hwndDlg)
{
RECT rc;
LVCOLUMN lvc;
BOOL fAssociate;
HWND hwndLV = GetDlgItem(hwndDlg, IDC_LIST_EXT);
ListView_SetExtendedListViewStyle(hwndLV, LVS_EX_CHECKBOXES | 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);
LVITEM lvi = {0};
TCHAR szExt[MAX_PATH], szExtDesc[MAX_PATH], szFind[MAX_PATH];
MAP_DEC_PLUGIN* pPlugIn;
int nExt, nIndex;
int nPlugIn = MAP_GetDecoderPlugInCount(m_hMap);
// internal
int i = 0;
while (*s_szDefSupportedExt2[i] != NULL) {
lvi.mask = LVIF_TEXT;
lvi.pszText = (LPTSTR)s_szDefSupportedExt2[i];
nIndex = ListView_InsertItem(hwndLV, &lvi);
if (IsDefSupportedExt((LPTSTR)s_szDefSupportedExt2[i], FALSE))
fAssociate = IsAssociatedFile((LPTSTR)s_szDefSupportedExt2[i], KEY_AUDIOFILE);
else
fAssociate = IsAssociatedFile((LPTSTR)s_szDefSupportedExt2[i], KEY_PLAYLIST);
ListView_SetCheckState(hwndLV, nIndex, fAssociate);
i++;
}
for (i = 0; i < nPlugIn; i++) {
pPlugIn = MAP_GetDecoderPlugIn(m_hMap, i);
if (!pPlugIn)
continue;
nExt = pPlugIn->GetFileExtCount();
for (int j = 0; j < nExt; j++) {
if (pPlugIn->GetFileExt(j, szExt, szExtDesc) && _tcslen(szExt) && !IsDefSupportedExt(szExt, FALSE)) {
BOOL fFind = FALSE;
for (int k = 0; k < ListView_GetItemCount(hwndLV); k++) {
lvi.mask = LVIF_TEXT;
lvi.pszText = szFind;
lvi.cchTextMax = MAX_PATH;
lvi.iItem = k;
if (ListView_GetItem(hwndLV, &lvi) && _tcsicmp(szFind, szExt) == 0) {
fFind = TRUE;
break;
}
}
if (!fFind) {
lvi.mask = LVIF_TEXT;
lvi.pszText = szExt;
nIndex = ListView_InsertItem(hwndLV, &lvi);
fAssociate = IsAssociatedFile((LPTSTR)szExt, KEY_AUDIOFILE);
ListView_SetCheckState(hwndLV, nIndex, fAssociate);
}
}
}
}
}
void COptions::AssociatePageOnOK(HWND hwndDlg)
{
LVITEM lvi = {0};
BOOL fPlayList, fAssociate;
TCHAR szExt[MAX_PATH];
HWND hwndLV = GetDlgItem(hwndDlg, IDC_LIST_EXT);
for (int i = 0; i < ListView_GetItemCount(hwndLV); i++) {
lvi.mask = LVIF_TEXT;
lvi.pszText = szExt;
lvi.cchTextMax = MAX_PATH;
lvi.iItem = i;
ListView_GetItem(hwndLV, &lvi);
fPlayList = IsDefSupportedExt(szExt) && !IsDefSupportedExt(szExt, FALSE);
if (fPlayList)
fAssociate = IsAssociatedFile(szExt, KEY_PLAYLIST);
else
fAssociate = IsAssociatedFile(szExt, KEY_AUDIOFILE);
if (ListView_GetCheckState(hwndLV, i)) {
if (!fAssociate) {
if (fPlayList)
AssociateFile(szExt, KEY_PLAYLIST, NAME_PLAYLIST);
else
AssociateFile(szExt, KEY_AUDIOFILE, NAME_AUDIOFILE);
}
}
else {
if (fAssociate) {
if (fPlayList)
UnassociateFile(szExt, KEY_PLAYLIST);
else
UnassociateFile(szExt, KEY_AUDIOFILE);
}
}
}
}
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)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -