Condividi tramite


Implementazione di CEchoPropPage::Apply

[La funzionalità associata a questa pagina, Lettore multimediale Windows SDK, è una funzionalità legacy. È stato sostituito da MediaPlayer. MediaPlayer è stato ottimizzato per Windows 10 e Windows 11. Microsoft consiglia vivamente che il nuovo codice usi MediaPlayer invece di Lettore multimediale Windows SDK, quando possibile. Microsoft suggerisce che il codice esistente che usa le API legacy venga riscritto per usare le nuove API, se possibile.

Il metodo CEchoPropPage::Apply viene implementato in EchoPropPage.cpp. Viene eseguito quando l'utente fa clic su Applica nella finestra di dialogo della pagina delle proprietà in Lettore multimediale Windows. Il codice di esempio della procedura guidata plug-in fornisce un'implementazione per gestire una singola proprietà. È possibile modificare questo codice per una delle proprietà di esempio Echo e quindi aggiungere codice per archiviare l'altro valore della proprietà.

Dichiarazione delle variabili del metodo Apply

Prima di tutto, è necessario rimuovere la dichiarazione di fScaleFactor. Aggiungere quindi dichiarazioni di variabili necessarie. L'esempio seguente mostra le dichiarazioni di variabili completate:

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.

Recupero dei valori dalla pagina delle proprietà

È necessario implementare il codice per recuperare e convalidare l'input dell'utente. Nell'esempio di codice seguente viene recuperato il valore del tempo di ritardo dalla casella di modifica IDC_DELAYTIME e quindi viene verificato che il valore si trova all'interno di un intervallo specificato:

// 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 l'input dell'utente non è compreso nell'intervallo specificato, il codice visualizza una finestra di messaggio. Si noti l'uso della risorsa stringa creata in precedenza per il messaggio di errore.

Nell'esempio seguente viene recuperato il livello di effetto dalla casella di modifica IDC_WETMIX e quindi viene verificato che il valore si trova all'interno di un intervallo specificato:

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

Archiviazione dei valori delle proprietà nel Registro di sistema

Successivamente, il codice deve rendere persistenti i nuovi valori delle proprietà nel Registro di sistema. Il codice seguente archivia entrambi i valori delle proprietà:

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

Aggiornamento dei valori delle proprietà plug-in Echo

Il metodo Apply deve informare il plug-in Echo che i valori delle proprietà sono stati modificati. Il codice seguente chiama il metodo put della proprietà per ogni proprietà usando il puntatore all'interfaccia recuperato in 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);
}

Si noti che il valore della combinazione bagnata viene convertito in virgola mobile prima di essere passato al plug-in.

Disabilitazione del pulsante Applica

Come passaggio finale, il codice deve disabilitare Applica nella finestra di dialogo della pagina delle proprietà come segnale all'utente che i valori sono stati aggiornati correttamente. Questa operazione richiede la riga di codice seguente:

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

Modifica della pagina delle proprietà Echo Sample