Schritt 7. Verarbeiten von Fenstermeldungen
Überschreiben Sie die CBasePropertyPage::OnReceiveMessage-Methode, um die Dialogsteuerelemente als Reaktion auf Benutzereingaben zu aktualisieren. Wenn Sie eine bestimmte Nachricht nicht behandeln, 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 Variable m _ bDirty der Eigenschaftenseite auf TRUE fest.
- Rufen Sie die IPropertyPageSite::OnStatusChange-Methode des Eigenschaftsrahmens mit dem PROPPAGESTATUS _ DIRTY-Flag auf. Dieses Flag informiert den Eigenschaftenrahmen darüber, dass die Schaltfläche Anwenden aktiviert werden soll. Der CBasePropertyPage::m _ pPageSite-Member 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 die Schaltfläche Auf Standard zurücksetzen. Wenn der Benutzer auf der Schiebereglerleiste 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 im Eigenschaftenframe auf die Schaltfläche OK oder Übernehmen klickt.
Weiter: Schritt 8. Eigenschaftenänderungen anwenden.