Share via


Implementación de CEchoPropPage::Apply

[La característica asociada a esta página, Reproductor multimedia de Windows SDK, es una característica heredada. Se ha reemplazado por MediaPlayer. MediaPlayer se ha optimizado para Windows 10 y Windows 11. Microsoft recomienda encarecidamente que el nuevo código use MediaPlayer en lugar de Reproductor multimedia de Windows SDK, siempre que sea posible. Microsoft sugiere que el código existente que usa las API heredadas se reescriba para usar las nuevas API si es posible.

El método CEchoPropPage::Apply se implementa en EchoPropPage.cpp. Se ejecuta cuando el usuario hace clic en Aplicar en el cuadro de diálogo de la página de propiedades de Reproductor multimedia de Windows. El código de ejemplo del asistente para complementos proporciona una implementación para controlar una sola propiedad. Puede modificar este código para una de las propiedades de ejemplo echo y, a continuación, agregar código para almacenar el otro valor de propiedad.

Declarar las variables de método Apply

En primer lugar, debe quitar la declaración de fScaleFactor. A continuación, agregue declaraciones de variables que necesitará. En el ejemplo siguiente se muestran las declaraciones de variable completadas:

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.

Recuperar los valores de la página de propiedades

Debe implementar código para recuperar y validar la entrada del usuario. En el ejemplo de código siguiente se recupera el valor de tiempo de retraso del cuadro de edición IDC_DELAYTIME y, a continuación, se comprueba que el valor está dentro de un 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;
}

Si la entrada del usuario no está en el intervalo especificado, el código muestra un cuadro de mensaje. Observe el uso del recurso de cadena que creó anteriormente para el mensaje de error.

En el ejemplo siguiente se recupera el nivel de efecto del cuadro de edición IDC_WETMIX y, a continuación, se comprueba que el valor está dentro de un 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;
}

Almacenar los valores de propiedad en el Registro

A continuación, el código debe conservar los nuevos valores de propiedad en el Registro. El código siguiente almacena ambos valores de propiedad:

// 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 );
}

Actualización de los valores de propiedad del complemento Echo

El método Apply debe informar al complemento Echo de que los valores de propiedad han cambiado. El código siguiente llama al método put de propiedad para cada propiedad mediante el puntero de interfaz recuperado en 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 el valor de mezcla húmeda se convierte en punto flotante antes de pasarse al complemento.

Deshabilitar el botón Aplicar

Como último paso, el código debe deshabilitar Aplicar en el cuadro de diálogo de la página de propiedades como señal al usuario de que los valores se han actualizado correctamente. Esto requiere la siguiente línea de código:

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

Modificar la página de propiedades de ejemplo de eco