📄 options.cpp
字号:
(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 6
*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;
(*ppPage)[5].dwSize = sizeof(PROPSHEETPAGE);
(*ppPage)[5].dwFlags = PSP_DEFAULT;
(*ppPage)[5].pszTemplate = MAKEINTRESOURCE(IDD_PAGE_PLUGIN);
(*ppPage)[5].pfnDlgProc = (DLGPROC)PlugInPageProc;
(*ppPage)[5].hInstance = GetInst();
(*ppPage)[5].pszIcon = NULL;
(*ppPage)[5].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);
m_Options.nOutputPrebuffer = n;
m_Options.fFadeIn = SendMessage(GetDlgItem(hwndDlg, IDC_CHECK_OUTPUT_FADE), BM_GETCHECK, 0, 0);
m_Options.fScanMpegCompletely =
SendMessage(GetDlgItem(hwndDlg, IDC_CHECK_SCANCOMPLETELY), BM_GETCHECK, 0, 0);
m_Options.fSuppressZeroSamples = SendMessage(GetDlgItem(hwndDlg, IDC_CHECK_SUPZERO), BM_GETCHECK, 0, 0);
m_Options.fAlwaysOpenDevice = SendMessage(GetDlgItem(hwndDlg, IDC_CHECK_ALWAYSOPENDEV), BM_GETCHECK, 0, 0);
}
void COptions::DecoderPageOnDeltaPos(HWND hwndDlg, NM_UPDOWN* pNmud)
{
TCHAR sz[32];
if (pNmud->hdr.idFrom == IDC_SPIN_OUT_BUFF_LEN) {
GetDlgItemText(hwndDlg, IDC_EDIT_OUT_BUFF_LEN, sz, 32);
int n = _tcstol(sz, NULL, 10);
if (pNmud->iDelta < 0)
n = min(n + 50, OUTPUT_BUFF_MAX);
else if (pNmud->iDelta > 0)
n = max(n - 50, OUTPUT_BUFF_MIN);
wsprintf(sz, _T("%d"), n);
SetDlgItemText(hwndDlg, IDC_EDIT_OUT_BUFF_LEN, sz);
}
else if (pNmud->hdr.idFrom == IDC_SPIN_OUT_PREBUFF) {
GetDlgItemText(hwndDlg, IDC_EDIT_OUT_PREBUFF, sz, 32);
int n = _tcstol(sz, NULL, 10);
if (pNmud->iDelta < 0)
n = min(n + 5, OUTPUT_PREBUFF_MAX);
else if (pNmud->iDelta > 0)
n = max(n - 5, OUTPUT_PREBUFF_MIN);
wsprintf(sz, _T("%d"), n);
SetDlgItemText(hwndDlg, IDC_EDIT_OUT_PREBUFF, sz);
}
}
BOOL CALLBACK COptions::StreamingPageProc(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->StreamingPageOnInitDialog(hwndDlg);
return TRUE;
case WM_NOTIFY:
{
NMHDR* pnmh = (NMHDR*)lParam;
if (pnmh->code == PSN_APPLY) {
pOptions->StreamingPageOnOK(hwndDlg);
return TRUE;
}
else if (pnmh->code == UDN_DELTAPOS) {
pOptions->StreamingPageOnDeltaPos(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::StreamingPageOnInitDialog(HWND hwndDlg)
{
TCHAR sz[MAX_URL];
SendMessage(GetDlgItem(hwndDlg, IDC_EDIT_BUFF), EM_LIMITTEXT, 4, 0);
SendMessage(GetDlgItem(hwndDlg, IDC_EDIT_PREBUFF), EM_LIMITTEXT, 4, 0);
wsprintf(sz, _T("%d"), m_StreamingOptions.nBuf * 2);
SetDlgItemText(hwndDlg, IDC_EDIT_BUFF, sz);
wsprintf(sz, _T("%d"), m_StreamingOptions.nPreBuf * 2);
SetDlgItemText(hwndDlg, IDC_EDIT_PREBUFF, sz);
SetDlgItemText(hwndDlg, IDC_EDIT_PROXY, m_StreamingOptions.szProxy);
if (m_StreamingOptions.fUseProxy)
SendMessage(GetDlgItem(hwndDlg, IDC_CHECK_PROXY), BM_SETCHECK, 1, 0);
}
void COptions::StreamingPageOnDeltaPos(HWND hwndDlg, NM_UPDOWN* pNmud)
{
TCHAR sz[32];
int nEditID = pNmud->hdr.idFrom == IDC_SPIN_BUFF ? IDC_EDIT_BUFF : IDC_EDIT_PREBUFF;
GetDlgItemText(hwndDlg, nEditID, sz, 32);
int n = _tcstol(sz, NULL, 10);
if (pNmud->iDelta < 0)
n = min(n + 2, STREAMING_BUFF_MAX);
else if (pNmud->iDelta > 0)
n = max(n - 2, STREAMING_BUFF_MIN);
wsprintf(sz, _T("%d"), n);
SetDlgItemText(hwndDlg, nEditID, sz);
}
void COptions::StreamingPageOnOK(HWND hwndDlg)
{
TCHAR sz[MAX_URL];
GetDlgItemText(hwndDlg, IDC_EDIT_BUFF, sz, MAX_URL);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -