Freigeben über


Behandeln von Windows-Nachrichten für Eigenschaftenseiten

Wenn ein Geräteeigenschaftenseitenanbieter eine Anforderung zum Erstellen einer Eigenschaftenseite für sein Gerät oder seine Geräteklasse verarbeitet, gibt er die Adresse einer Dialogfeldprozedur für die Eigenschaftenseite zurück. Die Dialogfeldprozedur muss die Eigenschaftenseite initialisieren, wenn sie eine WM_INITDIALOG Nachricht erhält, und sie muss bereit sein, Änderungen an Geräteeigenschaften zu verarbeiten, wenn sie eine WM_NOTIFY Nachricht erhält. Die Prozedur kann auch alle anderen erforderlichen Nachrichten verarbeiten, wie in der Microsoft Windows SDK-Dokumentation beschrieben.

Als Reaktion auf eine WM_INITDIALOG Nachricht initialisiert die Dialogfeldprozedur Informationen auf der Eigenschaftenseite. Diese Informationen können ein Symbol enthalten, das das Gerät, den Anzeigenamen des Geräts und die PnP-Gerätebeschreibung darstellt.

SetupDiLoadClassIcon lädt die Symbole für eine angegebene Geräteklasse und gibt ein Handle an das geladene große Symbol zurück, das in einem nachfolgenden Aufruf von SendDlgItemMessage verwendet werden kann. Beispiel:

if (SetupDiLoadClassIcon(
        &pTestPropPageData->DeviceInfoData->ClassGuid, &ClassIcon, 
        NULL)) {
    OldIcon = (HICON)SendDlgItemMessage(
                        hDlg, 
                        IDC_TEST_ICON,
                        STM_SETICON, (WPARAM)ClassIcon, 0);
    if (OldIcon) {
                DestroyIcon(OldIcon);
    }
}

Das in ClassIcon zurückgegebene Handle kann in das WPARAM umgewandelt werden, das für die SendDlgItemMessage-Funktion erforderlich ist. Im Beispiel identifiziert IDC_TEST_ICON das Steuerelement im Dialogfeld, das die STM_SETICON Nachricht empfängt. Der Wert von IDC_TEST_ICON muss im Anbieter definiert werden. Weitere Funktionen zum Bearbeiten von Symbolen und Bitmaps finden Sie unter Geräteinstallationsfunktionen. Weitere Informationen zu SendDlgItemMessage, DestroyIcon und zur Verwendung von Symbolen in Dialogfeldern finden Sie in der Dokumentation zum Windows SDK.

Zusätzlich zu einem Symbol, das das Gerät darstellt, enthält eine typische Geräteeigenschaftenseite eine Beschreibung oder einen "Anzeigenamen" des Geräts und zeigt die aktuellen Einstellungen der Geräteeigenschaften an. Der Plug & Play-Manager (PnP) speichert die PnP-Eigenschaften jedes Geräts in der Registrierung. Ein Eigenschaftenseitenanbieter kann SetupDiGetDeviceRegistryProperty aufrufen, um den Wert einer solchen Eigenschaft abzurufen. Wenn geräte- oder klassenspezifische Konfigurationsinformationen im Rahmen des Installationsprozesses auch in der Registrierung gespeichert wurden, kann ein Eigenschaftenseitenanbieter andere SetupDiXxx-Funktionen verwenden, um diese Informationen für die Anzeige zu extrahieren. Weitere Informationen finden Sie unter Geräteinstallationsfunktionen.

Wenn bestimmte Arten von Änderungen auf der Seite auftreten, sendet das Eigenschaftenblatt eine WM_NOTIFY Nachricht an die Dialogfeldprozedur. Die Dialogfeldprozedur sollte vorbereitet sein, um den Benachrichtigungscode aus den Nachrichtenparametern zu extrahieren und entsprechend zu reagieren.

Weitere Informationen zu den Benachrichtigungen, die bei einer Dialogfeldprozedur auftreten können, z. B. PSN_APPLY oder PSN_HELP Benachrichtigungen, und zu deren Behandlung durch die Prozedur finden Sie unter Benachrichtigungen in der Windows SDK-Dokumentation.

PSN_APPLY Benachrichtigungen

Das Eigenschaftenblatt sendet eine PSN_APPLY Benachrichtigungsmeldung, wenn der Benutzer auf OK, Schließen oder Anwenden klickt. Als Reaktion auf diese Meldung sollte die Dialogfeldprozedur die vom Benutzer vorgenommenen Änderungen überprüfen und anwenden.

Wenn er die PSN_APPLY-Benachrichtigung empfängt, muss der Anbieter Folgendes tun:

  1. Wenn dies noch nicht geschehen ist, rufen Sie einen Zeiger auf die Geräteinstallationsparameter (SP_DEVINSTALL_PARAMS-Struktur ) für das Gerät ab. Diese Struktur ist verfügbar, indem Sie SetupDiGetDeviceInstallParams aufrufen und die gespeicherten GeräteInfoSet und DeviceInfoData übergeben, die in dem Bereich übergeben wurden, auf den das lParam-Element der PROPSHEETPAGE-Struktur verweist.

  2. Stellen Sie sicher, dass die Änderungen des Benutzers gültig sind.

  3. Wenn der Anbieter es einem Benutzer ermöglicht, eine Eigenschaft festzulegen, für die Windows das Gerät entfernen und neu starten muss, muss der Anbieter das DI_FLAGSEX_PROPCHANGE_PENDING-Flag im Feld FlagsEx der zurückgegebenen SP_DEVINSTALL_PARAMS-Struktur festlegen.

    Wenn der Anbieter jedoch sicherstellen kann, dass die Treiber des Geräts für die Änderungen nicht beendet und dann neu gestartet werden müssen, muss er dieses Flag nicht festlegen.

  4. Rufen Sie SetupDiSetDeviceInstallParams mit der geänderten SP_DEVINSTALL_PARAMS-Struktur auf, um die neuen Parameter festzulegen.

PSN_RESET Benachrichtigungen

Das Eigenschaftenblatt sendet eine PSN_RESET Benachrichtigung, wenn der Benutzer auf Abbrechen klickt. Als Reaktion auf diese Meldung sollte die Dialogfeldprozedur alle Änderungen verwerfen, die vom Benutzer vorgenommen wurden.