Compartilhar via


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.

Criando uma página de propriedades de filtro