Реализация CechoPropPage::OnInitDialog

[Функция, связанная с этой страницей, Медиаплеер Windows SDK, является устаревшей функцией. Он был заменен MediaPlayer. MediaPlayer оптимизирован для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует по возможности использовать MediaPlayer вместо пакета SDK для Медиаплеер Windows. Корпорация Майкрософт предлагает переписать существующий код, в котором используются устаревшие API, чтобы по возможности использовать новые API.]

Метод CEchoPropPage::OnInitDialog реализован в EchoPropPage.cpp. Он выполняется при вызове диалогового окна страницы свойств. Код в этом методе должен получить текущие значения свойств и отобразить их в правильном поле ввода. Пример кода мастера подключаемых модулей предоставляет реализацию для одного свойства. Этот код можно изменить для одного из примеров свойств Echo, а затем добавить код, чтобы получить второе значение свойства.

Объявление переменных метода OnInitDialog

Сначала необходимо удалить объявление fScaleFactor и заменить его следующими объявлениями переменных:

DWORD  dwDelayTime = 1000;    // Default delay time.
DWORD  dwWetmix = 50;         // Default wet mix DWORD.
double fWetmix =  0.50;       // Default wet mix double.

Получение текущих значений из подключаемого модуля

Затем код должен попытаться получить текущие значения свойств из подключаемого модуля Echo. В следующем примере предпринимается попытка получить каждое свойство:

if (m_spEcho)
{
    m_spEcho->get_delay(&dwDelayTime);
    m_spEcho->get_wetmix(&fWetmix);
    // Convert wet mix from double to DWORD.
    dwWetmix = (DWORD)(fWetmix * 100);
}

В диалоговом окне для пользователя отображается значение уровня эффектов в виде целого числа, но подключаемый модуль сохраняет значение в виде числа с плавающей запятой. Таким образом, код преобразует значение с плавающей запятой в значение DWORD .

Получение текущих значений из реестра

Если страница свойств не может получить текущие значения из подключаемого модуля, она должна попытаться прочитать их из реестра. Следующий код считывает каждое значение свойства:

else // Otherwise, read values from registry
{
    CRegKey key;
    LONG    lResult;

    lResult = key.Open(HKEY_CURRENT_USER, kszPrefsRegKey, KEY_READ);
    if (ERROR_SUCCESS == lResult)
    {
        DWORD   dwValue = 0;

        // Read the delay time.
        lResult = key.QueryValue(dwValue, kszPrefsDelayTime );
        if (ERROR_SUCCESS == lResult)
        {
            dwDelayTime = dwValue;
        }

        // Read the wet mix value.
        lResult = key.QueryValue(dwValue, kszPrefsWetmix );
        if (ERROR_SUCCESS == lResult)
        {
            dwWetmix = dwValue;
        }
    }
}

Обратите внимание на использование ранее созданных констант реестра.

Отображение значений для пользователя

Наконец, на странице свойств должны отображаться значения в правильных элементах управления "Поле ввода". Это демонстрируется в следующем примере кода:

 TCHAR   szStr[MAXSTRING];

// Display the delay time.
_stprintf_s(szStr, MAXSTRING, _T("%u"), dwDelayTime);
SetDlgItemText(IDC_DELAYTIME, szStr);

// Display the effect level.
_stprintf_s(szStr, MAXSTRING, _T("%u"), dwWetmix);
SetDlgItemText(IDC_WETMIX, szStr);

Изменение страницы свойств echo sample