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.
Tópicos relacionados
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de