Implementando CEchoPropPage::Apply

[O recurso associado a esta página, Reprodutor Multimídia do Windows SDK, é um recurso herdado. Foi substituído pelo MediaPlayer. O MediaPlayer foi otimizado para Windows 10 e Windows 11. A Microsoft recomenda fortemente que o novo código use o MediaPlayer em vez de Reprodutor Multimídia do Windows SDK, quando possível. A Microsoft sugere que o código existente que usa as APIs herdadas seja reescrito para usar as novas APIs, se possível.]

O método CEchoPropPage::Apply é implementado em EchoPropPage.cpp. Ele é executado quando o usuário clica em Aplicar na caixa de diálogo página de propriedades em Reprodutor Multimídia do Windows. O código de exemplo do assistente de plug-in fornece uma implementação para lidar com uma única propriedade. Você pode modificar esse código para uma das propriedades de exemplo do Echo e, em seguida, adicionar código para armazenar o outro valor de propriedade.

Declarando as variáveis de método Apply

Primeiro, você deve remover a declaração de fScaleFactor. Em seguida, adicione declarações variáveis de que você precisará. O exemplo a seguir mostra as declarações de variável concluídas:

TCHAR   szStr[MAXSTRING] = { 0 };
DWORD   dwDelayTime = 1000;  // Initialize the delay time.
DWORD   dwWetmix = 50;       // Initialize a DWORD for effect level.
double  fWetmix = 0.50;      // Initialize a double for effect level.

Recuperando os valores da página de propriedades

Você deve implementar o código para recuperar e validar a entrada do usuário. O exemplo de código a seguir recupera o valor de tempo de atraso da caixa de edição IDC_DELAYTIME e verifica se o valor está dentro de um intervalo especificado:

// Get the delay time value from the dialog box.
GetDlgItemText(IDC_DELAYTIME, szStr, sizeof(szStr) / sizeof(szStr[0]));

dwDelayTime = atoi(szStr);

// Make sure delay time is valid.
if ((dwDelayTime < 10) || (dwDelayTime > 2000))
{
    if (::LoadString(_Module.GetResourceInstance(), IDS_DELAYRANGEERROR, szStr, sizeof(szStr) / sizeof(szStr[0])))
    {
        MessageBox(szStr);
    }

    return E_FAIL;
}

Se a entrada do usuário não estiver no intervalo especificado, o código exibirá uma caixa de mensagem. Observe o uso do recurso de cadeia de caracteres criado anteriormente para a mensagem de erro.

O exemplo a seguir recupera o nível de efeito da caixa de edição IDC_WETMIX e verifica se o valor está dentro de um intervalo especificado:

// Get the effects level value from the dialog box.
GetDlgItemText(IDC_WETMIX, szStr, sizeof(szStr) / sizeof(szStr[0]));

dwWetmix = atoi(szStr);

// Make sure wet mix value is valid.
if ((dwWetmix < 0) || (dwWetmix > 100))
{
    if (::LoadString(_Module.GetResourceInstance(), IDS_MIXRANGEERROR, szStr, sizeof(szStr) / sizeof(szStr[0])))
    {
        MessageBox(szStr);
    }

    return E_FAIL;
}

Armazenando os valores de propriedade no Registro

Em seguida, seu código deve persistir os novos valores de propriedade para o registro. O código a seguir armazena os dois valores de propriedade:

// update the registry
CRegKey key;
LONG    lResult;

// Write the delay time value to the registry.
lResult = key.Create(HKEY_CURRENT_USER, kszPrefsRegKey);
if (ERROR_SUCCESS == lResult)
{
    lResult = key.SetValue( dwDelayTime , kszPrefsDelayTime );
}

// Write the wet mix value to the registry.
lResult = key.Create(HKEY_CURRENT_USER, kszPrefsRegKey);
if (ERROR_SUCCESS == lResult)
{
    lResult = key.SetValue( dwWetmix , kszPrefsWetmix );
}

Atualizando os valores da propriedade plug-in echo

O método Apply deve informar ao plug-in Echo que os valores da propriedade foram alterados. O código a seguir chama o método property put para cada propriedade usando o ponteiro de interface recuperado em CEchoPropPage::SetObjects:

// update the plug-in
if (m_spEcho)
{
    m_spEcho->put_delay(dwDelayTime);

    // Convert the wet mix value from DWORD to double.
    fWetmix = (double)dwWetmix / 100;
    m_spEcho->put_wetmix(fWetmix);
}

Observe que o valor de mistura molhada é convertido em ponto flutuante antes de ser passado para o plug-in.

Desabilitando o botão Aplicar

Como etapa final, seu código deve desabilitar Aplicar na caixa de diálogo da página de propriedades como um sinal para o usuário de que os valores foram atualizados com êxito. Isso requer a seguinte linha única de código:

m_bDirty = FALSE; // Tell the property page to disable Apply.

Modificando a página de propriedades de exemplo de eco