Schritt 7. Behandeln von Fenstermeldungen

[Das dieser Seite zugeordnete Feature DirectShow ist ein Legacyfeature. Es wurde durch MediaPlayer, IMFMediaEngine und Audio/Video Capture in Media Foundation ersetzt. Diese Features wurden für Windows 10 und Windows 11 optimiert. Microsoft empfiehlt dringend, dass neuer Code nach Möglichkeit MediaPlayer, IMFMediaEngine und Audio/Video Capture in Media Foundation anstelle von DirectShow verwendet. Microsoft schlägt vor, vorhandenen Code, der die Legacy-APIs verwendet, um nach Möglichkeit die neuen APIs zu verwenden.]

Überschreiben Sie die CBasePropertyPage::OnReceiveMessage-Methode , um die Dialogsteuerelemente als Reaktion auf Benutzereingaben zu aktualisieren. Wenn Sie eine bestimmte Nachricht nicht verarbeiten, rufen Sie die OnReceiveMessage-Methode für die übergeordnete Klasse auf. Wenn der Benutzer eine Eigenschaft ändert, gehen Sie wie folgt vor:

  • Legen Sie die m_bDirty Variable der Eigenschaftenseite auf TRUE fest.
  • Rufen Sie die IPropertyPageSite::OnStatusChange-Methode des Eigenschaftenrahmens mit dem flag PROPPAGESTATUS_DIRTY auf. Dieses Flag informiert den Eigenschaftenrahmen darüber, dass er die Schaltfläche Anwenden aktivieren soll. Das CBasePropertyPage::m_pPageSite-Element enthält einen Zeiger auf die IPropertyPageSite-Schnittstelle .

Um diesen Schritt zu vereinfachen, können Sie der Eigenschaftenseite die folgende Hilfsfunktion hinzufügen:

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

Rufen Sie diese private Methode in OnReceiveMessage auf, wenn eine Benutzeraktion eine Eigenschaft ändert, wie im folgenden Beispiel gezeigt:

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

Die Eigenschaftenseite in diesem Beispiel verfügt über zwei Steuerelemente, einen Schieberegler und eine Schaltfläche Zum Standard zurücksetzen . Wenn der Benutzer den Schieberegler scrollt, legt die Eigenschaftenseite den Sättigungswert für den Filter fest. Wenn der Benutzer auf die Schaltfläche klickt, stellt die Eigenschaftenseite den Standardsättigungswert des Filters wieder her. In jedem Fall enthält m_lNewVal den aktuellen Wert und m_lVal den ursprünglichen Wert. Der Wert von m_lVal wird erst aktualisiert, wenn der Benutzer die Änderung committet. Dies geschieht, wenn der Benutzer auf die Schaltfläche OK oder Anwenden im Eigenschaftenrahmen klickt.

Weiter: Schritt 8. Übernehmen sie Eigenschaftenänderungen.

Erstellen einer Filtereigenschaftenseite