Partager via


Étape 7. Gérer les messages de fenêtre

[La fonctionnalité associée à cette page, DirectShow, est une fonctionnalité héritée. Il a été remplacé par MediaPlayer, IMFMediaEngine et Audio/Video Capture in Media Foundation. Ces fonctionnalités ont été optimisées pour Windows 10 et Windows 11. Microsoft recommande vivement que le nouveau code utilise MediaPlayer, IMFMediaEngine et Audio/Video Capture dans Media Foundation au lieu de DirectShow, si possible. Microsoft suggère que le code existant qui utilise les API héritées soit réécrit pour utiliser les nouvelles API si possible.]

Remplacez la méthode CBasePropertyPage::OnReceiveMessage pour mettre à jour les contrôles de boîte de dialogue en réponse à l’entrée de l’utilisateur. Si vous ne gérez pas un message particulier, appelez la méthode OnReceiveMessage sur la classe parente. Chaque fois que l’utilisateur modifie une propriété, procédez comme suit :

  • Définissez la variable m_bDirty de la page de propriétés sur TRUE.
  • Appelez la méthode IPropertyPageSite::OnStatusChange du frame de propriété avec l’indicateur PROPPAGESTATUS_DIRTY. Cet indicateur informe le cadre de propriété qu’il doit activer le bouton Appliquer . Le membre CBasePropertyPage::m_pPageSite contient un pointeur vers l’interface IPropertyPageSite .

Pour simplifier cette étape, vous pouvez ajouter la fonction d’assistance suivante à votre page de propriétés :

private:
    void SetDirty()
    {
        m_bDirty = TRUE;
        if (m_pPageSite)
        {
            m_pPageSite->OnStatusChange(PROPPAGESTATUS_DIRTY);
        }
    }

Appelez cette méthode privée dans OnReceiveMessage chaque fois qu’une action utilisateur modifie une propriété, comme illustré dans l’exemple suivant :

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

La page de propriétés de cet exemple comporte deux contrôles, une barre de curseur et un bouton Rétablir la valeur par défaut . Si l’utilisateur fait défiler la barre du curseur, la page de propriétés définit la valeur de saturation sur le filtre. Si l’utilisateur clique sur le bouton, la page de propriétés restaure la valeur de saturation par défaut du filtre. Dans chaque cas, m_lNewVal conserve la valeur actuelle et m_lVal la valeur d’origine. La valeur de m_lVal n’est pas mise à jour tant que l’utilisateur n’a pas validée la modification, ce qui se produit lorsque l’utilisateur clique sur le bouton OK ou Appliquer sur le cadre de propriété.

Suivant : Étape 8. Appliquer les modifications de propriété.

Création d’une page de propriétés de filtre