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

📄 win32preferencewindow.cpp

📁 FreeAMP(MP3播放)程序源代码-用来研究MP3解码
💻 CPP
📖 第 1 页 / 共 5 页
字号:
    {
        bufferSize = size;
        buffer = (char*)realloc(buffer, bufferSize);
        m_prefs->GetPrefString(kUsersPortablePlayersPref, buffer, &size);
    }

    size = bufferSize;

    char* cp = buffer;
    char* name = cp;

    while(cp = strchr(cp, ';'))
    {
        *cp = 0x00;
        values->portablePlayers.insert(string(name));

        cp++;
        name = cp;
    }

    if(*name)
    {
        values->portablePlayers.insert(string(name));
    }

    size = bufferSize;

    if(kError_BufferTooSmall == m_prefs->GetPrefString(kWatchThisDirectoryPref, buffer, &size))
    {
        bufferSize = size;
        buffer = (char*)realloc(buffer, bufferSize);
        m_prefs->GetPrefString(kWatchThisDirectoryPref, buffer, &size);
    }

    cp = buffer;
    name = cp;

    while(cp = strchr(cp, ';'))
    {
        *cp = 0x00;
        values->watchDirectories.insert(string(name));

        cp++;
        name = cp;
    }

    if(*name)
    {
        values->watchDirectories.insert(string(name));
    }

    int32 timeOut;

    m_prefs->GetPrefInt32(kWatchThisDirTimeoutPref, &timeOut);
    values->watchForNewMusic = (timeOut != 0);


    size = bufferSize;
    m_pThemeMan->GetCurrentTheme(values->currentTheme);

    // get the other m_prefs
    m_prefs->GetPrefInt32(kDecoderThreadPriorityPref, &values->decoderThreadPriority);
    m_prefs->GetPrefInt32(kInputBufferSizePref, &values->inputBufferSize);
    m_prefs->GetPrefInt32(kOutputBufferSizePref, &values->outputBufferSize);
    m_prefs->GetPrefInt32(kPreBufferPref, &values->preBufferLength);
    m_prefs->GetPrefBoolean(kStayOnTopPref, &values->stayOnTop);
    m_prefs->GetPrefBoolean(kLiveInTrayPref, &values->liveInTray);
    m_prefs->GetPrefBoolean(kSaveStreamsPref, &values->saveStreams);
    m_prefs->GetPrefBoolean(kUseProxyPref, &values->useProxyServer);
    m_prefs->GetPrefBoolean(kUseAlternateNICPref, &values->useAlternateIP);
    m_prefs->GetPrefBoolean(kUseDebugLogPref, &values->enableLogging);
    m_prefs->GetPrefBoolean(kLogMainPref, &values->logMain);
    m_prefs->GetPrefBoolean(kLogDecodePref, &values->logDecoder);
    m_prefs->GetPrefBoolean(kLogInputPref, &values->logInput);
    m_prefs->GetPrefBoolean(kLogOutputPref, &values->logOutput);
    m_prefs->GetPrefBoolean(kLogPerformancePref, &values->logPerformance);
    m_prefs->GetPrefBoolean(kCheckForUpdatesPref, &values->checkForUpdates);
    m_prefs->GetPrefBoolean(kAskToReclaimFiletypesPref, &values->askReclaimFiletypes);
    m_prefs->GetPrefBoolean(kReclaimFiletypesPref, &values->reclaimFiletypes);
    m_prefs->GetPrefBoolean(kShowToolbarTextLabelsPref, &values->useTextLabels);
    m_prefs->GetPrefBoolean(kShowToolbarImagesPref, &values->useImages);
    m_prefs->GetPrefBoolean(kSaveCurrentPlaylistOnExitPref, &values->savePlaylistOnExit);
    m_prefs->GetPrefBoolean(kPlayImmediatelyPref, &values->playImmediately);
    m_prefs->GetPrefBoolean(kConvertUnderscoresToSpacesPref, &values->convertUnderscores);
    m_prefs->GetPrefBoolean(kCheckCDAutomaticallyPref, &values->updateCDAutomatically);

    free(buffer);
}

void Win32PreferenceWindow::SavePrefsValues(PrefsStruct* values)
{
    m_prefs->SetPrefString(kPMOPref, values->defaultPMO.c_str());
    m_prefs->SetPrefString(kUIPref, values->defaultUI.c_str());
    m_prefs->SetPrefInt32(kDecoderThreadPriorityPref, values->decoderThreadPriority);
    m_prefs->SetPrefInt32(kInputBufferSizePref, values->inputBufferSize);
    m_prefs->SetPrefInt32(kOutputBufferSizePref, values->outputBufferSize);
    m_prefs->SetPrefInt32(kPreBufferPref, values->preBufferLength);
    m_prefs->SetPrefBoolean(kStayOnTopPref, values->stayOnTop);
    m_prefs->SetPrefBoolean(kLiveInTrayPref, values->liveInTray);

    m_prefs->SetPrefBoolean(kSaveStreamsPref, values->saveStreams);
    m_prefs->SetPrefString(kSaveStreamsDirPref, values->saveStreamsDirectory.c_str());
    m_prefs->SetPrefString(kProxyHostPref, values->proxyServer.c_str());
    m_prefs->SetPrefBoolean(kUseProxyPref, values->useProxyServer);
    m_prefs->SetPrefString(kAlternateNICAddressPref, values->alternateIP.c_str());
    m_prefs->SetPrefBoolean(kUseAlternateNICPref, values->useAlternateIP);

    m_prefs->SetPrefBoolean(kUseDebugLogPref, values->enableLogging);
    m_prefs->SetPrefBoolean(kLogMainPref, values->logMain);
    m_prefs->SetPrefBoolean(kLogDecodePref, values->logDecoder);
    m_prefs->SetPrefBoolean(kLogInputPref, values->logInput);
    m_prefs->SetPrefBoolean(kLogOutputPref, values->logOutput);
    m_prefs->SetPrefBoolean(kLogPerformancePref, values->logPerformance);

    m_prefs->SetPrefString(kThemeDefaultFontPref, values->defaultFont.c_str());
    if (m_oThemeList[values->currentTheme].length() > 0)
       m_pThemeMan->UseTheme(m_oThemeList[values->currentTheme]);

    m_prefs->SetPrefBoolean(kCheckForUpdatesPref, values->checkForUpdates);
    m_prefs->SetPrefString(kSaveMusicDirPref, values->saveMusicDirectory.c_str());
    m_prefs->SetPrefString(kPlaylistHeaderColumnsPref, values->playlistHeaderColumns.c_str());
    m_prefs->SetPrefBoolean(kAskToReclaimFiletypesPref, values->askReclaimFiletypes);
    m_prefs->SetPrefBoolean(kReclaimFiletypesPref, values->reclaimFiletypes);

    set<string>::const_iterator i;
    string portableList;

    for(i = values->portablePlayers.begin(); 
        i != values->portablePlayers.end(); 
        i++)
    {
        portableList += *i;
        portableList += ";";
    }

    m_prefs->SetPrefString(kUsersPortablePlayersPref, portableList.c_str());

    m_prefs->SetPrefBoolean(kShowToolbarTextLabelsPref, values->useTextLabels);
    m_prefs->SetPrefBoolean(kShowToolbarImagesPref, values->useImages);

    m_prefs->SetPrefBoolean(kSaveCurrentPlaylistOnExitPref, values->savePlaylistOnExit);
    m_prefs->SetPrefBoolean(kPlayImmediatelyPref, values->playImmediately);
    m_prefs->SetPrefBoolean(kConvertUnderscoresToSpacesPref, values->convertUnderscores);

    string dirList;

    for(i = values->watchDirectories.begin(); 
        i != values->watchDirectories.end(); 
        i++)
    {
        dirList += *i;
        dirList += ";";
    }

    m_prefs->SetPrefString(kWatchThisDirectoryPref, dirList.c_str());
    m_prefs->SetPrefInt32(kWatchThisDirTimeoutPref, (values->watchForNewMusic ? kDefaultWatchThisDirTimeout : 0));
    m_prefs->SetPrefBoolean(kCheckCDAutomaticallyPref, values->updateCDAutomatically);
    m_prefs->SetPrefString(kMBServerPref, values->MBServerURL.c_str());

    m_pContext->target->AcceptEvent(new Event(INFO_PrefsChanged));
    m_currentValues = m_proposedValues = *values;
}

bool Win32PreferenceWindow::MainProc(HWND hwnd, 
						             UINT msg, 
						             WPARAM wParam, 
						             LPARAM lParam)
{
	bool result = false;

	switch(msg)
	{
		case WM_INITDIALOG:
		{
            m_hwndPref = hwnd;

            SetWindowText(hwnd, BRANDING" Preferences");

            m_caption = "Testing...1...2...3...";

            InitializePrefDialog();

            HWND hwndList = GetDlgItem(hwnd, IDC_LIST);

            HTREEITEM item = TreeView_GetRoot(hwndList);

            for(uint32 i = 0; i < m_startPage; i++)
            {
                HTREEITEM child = TreeView_GetChild(hwndList, item);

                if(child)
                    item = child;
                else
                {
                    HTREEITEM sibling = TreeView_GetNextSibling(hwndList, item);

                    if(sibling)
                        item = sibling;
                    else
                    {
                        item = TreeView_GetNextSibling(hwndList, 
                                                       TreeView_GetParent(hwndList, 
                                                                          item));
                    }
                }
            }

            TreeView_Select(hwndList, item, TVGN_CARET);

            HWND hwndApply = GetDlgItem(hwnd, IDC_APPLY);

            EnableWindow(hwndApply, FALSE);

			//result = true;

			break;
		}

        case WM_PAINT:
        {
            RECT fadeRect;
            HWND hwndFade = GetDlgItem(hwnd, IDC_FADE);
            GetClientRect(hwndFade, &fadeRect);

            MapWindowPoints(hwndFade, hwnd, (LPPOINT)&fadeRect, 2);

            PAINTSTRUCT ps;
            HDC hdc = BeginPaint(hwnd, &ps);
            COLORREF c1, c2, textColor;

            c1 = GetSysColor(COLOR_ACTIVECAPTION);
            c2 = GetSysColor(COLOR_3DFACE);
            textColor = GetSysColor(COLOR_CAPTIONTEXT);

            float r1 = GetRValue(c1);
            float g1 = GetGValue(c1);
            float b1 = GetBValue(c1);

            float r2 = GetRValue(c2);
            float g2 = GetGValue(c2);
            float b2 = GetBValue(c2);

            float r3, g3, b3;

            int dx = fadeRect.right - fadeRect.left;
            float dt = 1/(float)dx;
            float t = 1;

            for(int x = 0; x < dx; x++)
            {
                r3 = r1*t + r2*(1-t);
                g3 = g1*t + g2*(1-t);
                b3 = b1*t + b2*(1-t);

                RECT rect = fadeRect;

                rect.left += x;
                rect.right = rect.left + 1;

                HBRUSH brush = CreateSolidBrush(RGB(r3, g3, b3));
                FillRect(hdc, &rect, brush);
                DeleteObject(brush);

                t -= dt;
            }

            RECT textRect = fadeRect;

            textRect.left += 5;

            SetTextColor(hdc, textColor);
            SetBkMode(hdc, TRANSPARENT);

            DrawText(hdc, m_caption.c_str(), m_caption.size(), &textRect, 
                        DT_VCENTER|DT_SINGLELINE|DT_LEFT);
       
            EndPaint(hwnd, &ps);
            break;
        }

        case WM_CLOSE:
		{
            //PostQuitMessage(0);
            EndDialog(hwnd, FALSE);
			result = TRUE;
			break;
		}

        case WM_NOTIFY:
        {
            LPNMTREEVIEW pnmtv = (LPNMTREEVIEW) lParam;

            if(pnmtv->hdr.idFrom == IDC_LIST)
            {
                if(pnmtv->hdr.code == TVN_SELCHANGED)
                {
                    ShowPrefPage((PrefPage*)pnmtv->itemOld.lParam, false);

                    ShowPrefPage((PrefPage*)pnmtv->itemNew.lParam, true);
                }
            }

            break;
        }

        case PSM_UNCHANGED:
        {
            HWND hwndApply = GetDlgItem(hwnd, IDC_APPLY);

            EnableWindow(hwndApply, FALSE);
            break;
        }
        case PSM_CHANGED:
        {
            HWND hwndApply = GetDlgItem(hwnd, IDC_APPLY);

            EnableWindow(hwndApply, TRUE);
            break;
        }
       
        case WM_HELP:
        {
            if(m_currentPage)
                SendMessage(m_currentPage->hwnd, UWM_HELP, 0, 0);
            break;
        }

        case WM_COMMAND:
        {
            switch(LOWORD(wParam))
            {
                case IDCANCEL:
                    //PostQuitMessage(0);

					// 
					//  No changed message needs to be broadcast, really.
                    //
					//SavePrefsValues(&m_originalValues);
                    EndDialog(hwnd, FALSE);
                    break;

                case IDOK:
                    //PostQuitMessage(0);
                    SavePrefsValues(&m_proposedValues);
                    EndDialog(hwnd, TRUE);
                    break;

                case IDC_HELPME:
                    if(m_currentPage)
                        SendMessage(m_currentPage->hwnd, UWM_HELP, 0, 0);
                    break;

                case IDC_APPLY:
                {
                    SavePrefsValues(&m_proposedValues);
                    HWND hwndApply = GetDlgItem(hwnd, IDC_APPLY);

                    EnableWindow(hwndApply, FALSE);
                    break;
                }
            }

            break;
        }
	
	}

	return result;
}

bool Win32PreferenceWindow::PrefGeneralProc(HWND hwnd, 
                                            UINT msg, 
                                            WPARAM wParam, 
                                            LPARAM lParam)      
{
    bool result = false;    

    switch(msg)
    {
        case WM_INITDIALOG:
        {
            // get the handles to all our controls
            HWND hwndStayOnTop = GetDlgItem(hwnd, IDC_STAYONTOP);
            HWND hwndLiveInTray = GetDlgItem(hwnd, IDC_TRAY);
            HWND hwndAskReclaimFiletypes = GetDlgItem(hwnd, IDC_ASKRECLAIM);
            HWND hwndReclaimFiletypes = GetDlgItem(hwnd, IDC_RECLAIMFILETYPES);
            HWND hwndTextOnly = GetDlgItem(hwnd, IDC_TEXTONLY);
            HWND hwndImagesOnly = GetDlgItem(hwnd, IDC_IMAGESONLY);
            HWND hwndTextAndImages = GetDlgItem(hwnd, IDC_TEXTANDIMAGES);
            HWND hwndSavePlaylistOnExit = GetDlgItem(hwnd, IDC_SAVECURRENTLIST);
            HWND hwndDefaultAction = GetDlgItem(hwnd, IDC_DEFAULTACTION);
            HWND hwndConvertUnderscores = GetDlgItem(hwnd, IDC_UNDERSCORES);


            Button_SetCheck(hwndStayOnTop, m_originalValues.stayOnTop);
            Button_SetCheck(hwndLiveInTray, m_originalValues.liveInTray);

            Button_SetCheck(hwndReclaimFiletypes, m_originalValues.reclaimFiletypes);
            Button_SetCheck(hwndAskReclaimFiletypes, m_originalValues.askReclaimFiletypes);

⌨️ 快捷键说明

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