Condividi tramite


Gestione dei messaggi di Windows per le pagine delle proprietà

Quando un provider di pagine delle proprietà del dispositivo gestisce una richiesta per creare una pagina delle proprietà per il dispositivo o la classe del dispositivo, restituisce l'indirizzo di una routine della finestra di dialogo per la pagina delle proprietà. La procedura della finestra di dialogo deve inizializzare la pagina delle proprietà quando riceve un messaggio WM_INITDIALOG e deve essere preparata per gestire le modifiche apportate alle proprietà del dispositivo quando ottiene un messaggio di WM_NOTIFY. La procedura può anche gestire qualsiasi altro messaggio di questo tipo, come descritto nella documentazione di Microsoft Windows SDK.

In risposta a un messaggio di WM_INITDIALOG, la procedura della finestra di dialogo inizializza le informazioni nella pagina delle proprietà. Tali informazioni possono includere un'icona che rappresenta il dispositivo, il nome descrittivo del dispositivo e la relativa descrizione del dispositivo PnP.

SetupDiLoadClassIcon carica le icone per una classe di dispositivo specificata e restituisce un handle all'icona grande caricata che può essere usata in una chiamata successiva a SendDlgItemMessage. Ad esempio:

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

L'handle restituito in ClassIcon può essere sottoposto a cast a WPARAM richiesto dalla funzione SendDlgItemMessage. Nell'esempio IDC_TEST_ICON identifica il controllo nella finestra di dialogo che riceve il messaggio STM_SETICON. Il valore di IDC_TEST_ICON deve essere definito nel provider. Per altre funzioni che modificano icone e bitmap, vedere Funzioni di installazione del dispositivo. Per altre informazioni su SendDlgItemMessage, DestroyIcon e sull'uso delle icone nelle finestre di dialogo, vedere la documentazione di Windows SDK.

Oltre a un'icona che rappresenta il dispositivo, una tipica pagina delle proprietà del dispositivo include una descrizione o un "nome descrittivo" del dispositivo e mostra le impostazioni correnti delle proprietà del dispositivo. Il gestore Plug and Play (PnP) archivia le proprietà PnP di ogni dispositivo nel Registro di sistema. Un provider di pagine delle proprietà può chiamare SetupDiGetDeviceRegistryProperty per ottenere il valore di qualsiasi proprietà di questo tipo. Se le informazioni di configurazione specifiche del dispositivo o della classe sono state archiviate anche nel Registro di sistema come parte del processo di installazione, un provider di pagine delle proprietà può usare altre funzioni SetupDiXxx per estrarre tali informazioni per la visualizzazione. Per altre informazioni, vedere Funzioni di installazione dei dispositivi.

Quando si verificano determinati tipi di modifiche nella pagina, la finestra delle proprietà invia un messaggio WM_NOTIFY alla routine della finestra di dialogo. La procedura della finestra di dialogo deve essere preparata per estrarre il codice di notifica dai parametri del messaggio e rispondere in modo appropriato.

Per altre informazioni sulle notifiche che potrebbero verificarsi in una finestra di dialogo, ad esempio le notifiche di PSN_APPLY o PSN_HELP e su come la procedura deve gestirle, vedere Notifiche nella documentazione di Windows SDK.

Notifiche di PSN_APPLY

La finestra delle proprietà invia un messaggio di notifica PSN_APPLY quando l'utente fa clic su OK, Chiudi o Applica. In risposta a questo messaggio, la procedura della finestra di dialogo deve convalidare e applicare le modifiche apportate dall'utente.

Quando riceve la notifica di PSN_APPLY, il provider deve eseguire le operazioni seguenti:

  1. Se non è già stato fatto, ottenere un puntatore ai parametri di installazione del dispositivo (struttura SP_DEVINSTALL_PARAMS ) per il dispositivo. Questa struttura è disponibile chiamando SetupDiGetDeviceInstallParams, passando i deviceInfoSet salvati e DeviceInfoData passati nell'area a cui fa riferimento il membro lParam della struttura PROPSHEETPAGE.

  2. Verificare che le modifiche dell'utente siano valide.

  3. Se il provider consente a un utente di impostare una proprietà che richiede a Windows di rimuovere e riavviare il dispositivo, il provider deve impostare il flag DI_FLAGSEX_PROPCHANGE_PENDING nel campo FlagsEx della struttura SP_DEVINSTALL_PARAMS restituita.

    Tuttavia, se il provider può assicurarsi che le modifiche non richiedano che i driver del dispositivo vengano arrestati e quindi riavviati, non è necessario impostare questo flag.

  4. Chiamare SetupDiSetDeviceInstallParams con la struttura SP_DEVINSTALL_PARAMS modificata per impostare i nuovi parametri.

notifiche PSN_RESET

La finestra delle proprietà invia un messaggio di notifica PSN_RESET quando l'utente fa clic su Annulla. In risposta a questo messaggio, la procedura della finestra di dialogo deve eliminare tutte le modifiche apportate dall'utente.