Etapa 7. Manipular mensagens de janela
[O recurso associado a esta página, DirectShow, é um recurso herdado. Ele foi substituído por MediaPlayer, IMFMediaEngine e Captura de Áudio/Vídeo na Media Foundation. Esses recursos foram otimizados para Windows 10 e Windows 11. A Microsoft recomenda fortemente que o novo código use MediaPlayer, IMFMediaEngine e Captura de Áudio/Vídeo no Media Foundation em vez de DirectShow, 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.]
Substitua o método CBasePropertyPage::OnReceiveMessage para atualizar os controles de caixa de diálogo em resposta à entrada do usuário. Se você não manipular uma mensagem específica, chame o método OnReceiveMessage na classe pai. Sempre que o usuário alterar uma propriedade, faça o seguinte:
- Defina a variável m_bDirty da página de propriedades como TRUE.
- Chame o método IPropertyPageSite::OnStatusChange do quadro de propriedades com o sinalizador PROPPAGESTATUS_DIRTY. Esse sinalizador informa ao quadro de propriedades que ele deve habilitar o botão Aplicar . O membro CBasePropertyPage::m_pPageSite contém um ponteiro para a interface IPropertyPageSite .
Para simplificar esta etapa, você pode adicionar a seguinte função auxiliar à página de propriedades:
private:
void SetDirty()
{
m_bDirty = TRUE;
if (m_pPageSite)
{
m_pPageSite->OnStatusChange(PROPPAGESTATUS_DIRTY);
}
}
Chame esse método privado dentro de OnReceiveMessage sempre que uma ação do usuário alterar uma propriedade, conforme mostrado no exemplo a seguir:
BOOL CGrayProp::OnReceiveMessage(HWND hwnd,
UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg)
{
case WM_COMMAND:
if (LOWORD(wParam) == IDC_DEFAULT)
{
// User clicked the 'Revert to Default' button.
m_lNewVal = SATURATION_DEFAULT;
m_pGray->SetSaturation(m_lNewVal);
// Update the slider control.
SendDlgItemMessage(m_Dlg, IDC_SLIDER1, TBM_SETPOS, 1,
m_lNewVal);
SetDirty();
return (LRESULT) 1;
}
break;
case WM_HSCROLL:
{
// User moved the slider.
switch(LOWORD(wParam))
{
case TB_PAGEDOWN:
case SB_THUMBTRACK:
case TB_PAGEUP:
m_lNewVal = SendDlgItemMessage(m_Dlg, IDC_SLIDER1,
TBM_GETPOS, 0, 0);
m_pGray->SetSaturation(m_lNewVal);
SetDirty();
}
return (LRESULT) 1;
}
} // Switch.
// Let the parent class handle the message.
return CBasePropertyPage::OnReceiveMessage(hwnd,uMsg,wParam,lParam);
}
A página de propriedades neste exemplo tem dois controles, uma barra deslizante e um botão Reverter para Padrão . Se o usuário rolar a barra de controle deslizante, a página de propriedades definirá o valor de saturação no filtro. Se o usuário clicar no botão, a página de propriedades restaurará o valor de saturação padrão do filtro. Em cada caso, m_lNewVal contém o valor atual e m_lVal contém o valor original. O valor de m_lVal não é atualizado até que o usuário confirme a alteração, o que acontece quando o usuário clica no botão OK ou Aplicar no quadro de propriedades.
Próximo: Etapa 8. Aplicar alterações de propriedade.
Tópicos relacionados