Erstellen benutzerdefinierter Eigenschaftenseiten
Wenn ein Geräteeigenschaftenseitenanbieter eine Anforderung zum Erstellen einer Eigenschaftenseite für sein Gerät oder seine Geräteklasse verarbeitet, sollte der Anbieter die folgenden Schritte ausführen:
Rufen Sie SetupDiGetClassInstallParams auf , um die aktuellen Klasseninstallationsparameter für das Gerät abzurufen. Beispiel:
SP_ADDPROPERTYPAGE_DATA AddPropertyPageData; : ZeroMemory(&AddPropertyPageData, sizeof(SP_ADDPROPERTYPAGE_DATA)); AddPropertyPageData.ClassInstallHeader.cbSize = sizeof(SP_CLASSINSTALL_HEADER); if (SetupDiGetClassInstallParams(DeviceInfoSet, DeviceInfoData, (PSP_CLASSINSTALL_HEADER)&AddPropertyPageData, sizeof(SP_ADDPROPERTYPAGE_DATA), NULL )) { ...
In diesem Beispiel initialisiert der Code null die Struktur, in der die Installationsparameter des Geräts zurückgegeben werden, und legt die Größe des Klasseninstallationsheaders im Feld cbSize fest, wie für SetupDiGetClassInstallParams erforderlich. Der Klasseninstallationsheader ist das erste Element jeder Klasseninstallationsparameterstruktur.
Stellen Sie sicher, dass die maximale Anzahl dynamischer Seiten für das Gerät noch nicht erreicht wurde, indem Sie eine Anweisung wie die folgende verwenden:
if (AddPropertyPageData.NumDynamicPages < MAX_INSTALLWIZARD_DYNAPAGES) ...
Wenn der Test fehlschlägt, initialisieren oder erstellen Sie die Seite nicht. Geben Sie stattdessen NO_ERROR zurück.
Ordnen Sie Arbeitsspeicher zu, in dem gerätespezifische Daten gespeichert werden sollen, die später im Dialogfeldverfahren benötigt werden, und initialisieren Sie diesen Speicher mit den Daten. Der Anbieter muss diesen Arbeitsspeicher in seinem Eigenschaftenseitenrückruf freigeben, wenn die Eigenschaftenseite zerstört wird.
Für Anbieter, die Co-Installer sind, müssen diese gerätespezifischen Daten das DeviceInfoSet und DeviceInfoData enthalten, das mit dem CODE der DIF_ADDPROPERTYPAGE_ADVANCED Device Installation Function (DIF) übergeben wird.
Beispielsweise kann ein Eigenschaftenseitenanbieter eine Struktur definieren und verwenden, wie im folgenden Beispiel gezeigt:
typedef struct _TEST_PROP_PAGE_DATA { HDEVINFO DeviceInfoSet; PSP_DEVINFO_DATA DeviceInfoData; } TEST_PROP_PAGE_DATA, *PTEST_PROP_PAGE_DATA; ... PTEST_PROP_PAGE_DATA pMyPropPageData; ... pMyPropPageData = HeapAlloc(GetProcessHeap(), 0, sizeof(TESTPROP_PAGE_DATA));
Initialisieren Sie eine PROPSHEETPAGE-Struktur mit Informationen zur benutzerdefinierten Eigenschaftenseite:
- Legen Sie in dwFlags das PSP_USECALLBACK-Flag und alle anderen Flags fest, die für die benutzerdefinierte Eigenschaftenseite erforderlich sind. Das flag PSP_USECALLBACK gibt an, dass eine Rückruffunktion bereitgestellt wurde.
- Legen Sie in pfnCallback einen Zeiger auf die Rückruffunktion für die Eigenschaftenseite fest. Verarbeiten Sie im Rückruf die PSPCB_RELEASE-Nachricht, und geben Sie den in Schritt 3 zugewiesenen Arbeitsspeicher frei.
- Legen Sie in pfnDlgProc einen Zeiger auf die Dialogfeldprozedur für die Eigenschaftenseite fest.
- Übergeben Sie in lParam einen Zeiger auf den Speicherbereich, der in Schritt 3 zugeordnet und initialisiert wurde.
- Legen Sie andere Member entsprechend der benutzerdefinierten Eigenschaftenseite fest. Weitere Informationen zur PROPSHEETPAGE-Struktur finden Sie in der Microsoft Windows SDK-Dokumentation.
Rufen Sie CreatePropertySheetPage auf, um die neue Seite zu erstellen.
Fügen Sie die neue Seite der Liste der dynamischen Eigenschaftenseiten im DynamicPages-Member der Installationsparameter der Klasse hinzu, und erhöhen Sie das NumDynamicPages-Element .
Wiederholen Sie die Schritte 2 bis 6 für jede zusätzliche benutzerdefinierte Eigenschaftenseite.
Rufen Sie SetupDiSetClassInstallParams auf, um die neuen Klasseninstallationsparameter festzulegen, die die aktualisierte Eigenschaftenseitenstruktur enthalten.
Gibt NO_ERROR zurück.
Windows fügt die neu erstellten Eigenschaftenseiten dem Eigenschaftenblatt für das Gerät hinzu, und Geräte-Manager führt Microsoft Win32-API-Aufrufe aus, um das Blatt zu erstellen. Wenn die Eigenschaftenseite angezeigt wird, ruft das System die Dialogfeldprozedur auf, die in der PROPSHEETPAGE-Struktur angegeben ist.