Condividi tramite


Creazione di una finestra delle proprietà non modale

In genere, le finestre delle proprietà create saranno modali. Quando si usa una finestra delle proprietà modale, l'utente deve chiudere la finestra delle proprietà prima di utilizzare qualsiasi altra parte dell'applicazione. Questo articolo descrive i metodi che è possibile utilizzare per creare una finestra delle proprietà senza modalità che consente all'utente di mantenere aperta la finestra delle proprietà durante l'utilizzo di altre parti dell'applicazione.

Per visualizzare una finestra di proprietà come finestra di dialogo senza modalità anziché come finestra di dialogo modale, chiamare CPropertySheet::Create anziché DoModal. È inoltre necessario implementare alcune attività aggiuntive per supportare una finestra delle proprietà senza modalità.

Una delle attività aggiuntive consiste nello scambio di dati tra la finestra delle proprietà e l'oggetto esterno che sta modificando quando la finestra delle proprietà è aperta. Questa è in genere la stessa attività di per le finestre di dialogo senza modalità standard. Parte di questa attività sta implementando un canale di comunicazione tra la finestra delle proprietà modeless e l'oggetto esterno a cui si applicano le impostazioni delle proprietà. Questa implementazione è molto più semplice se si deriva una classe da CPropertySheet per la finestra delle proprietà senza modalità. Questo articolo presuppone che sia stato fatto.

Un metodo per la comunicazione tra la finestra delle proprietà senza modalità e l'oggetto esterno (la selezione corrente in una visualizzazione, ad esempio) consiste nel definire un puntatore dalla finestra delle proprietà all'oggetto esterno. Definire una funzione (denominata simile SetMyExternalObjecta ) nella CPropertySheetclasse derivata da per modificare il puntatore ogni volta che lo stato attivo passa da un oggetto esterno a un altro. La SetMyExternalObject funzione deve reimpostare le impostazioni per ogni pagina delle proprietà per riflettere l'oggetto esterno appena selezionato. A tale scopo, la SetMyExternalObject funzione deve essere in grado di accedere agli oggetti CPropertyPage appartenenti alla CPropertySheet classe .

Il modo più pratico per fornire l'accesso alle pagine delle proprietà all'interno di una finestra delle proprietà consiste nell'incorporare gli CPropertyPage oggetti nell'oggetto CPropertySheetderivato da . L'incorporamento di CPropertyPage oggetti nell'oggetto CPropertySheetderivato da è diverso dalla progettazione tipica per le finestre di dialogo modali, in cui il proprietario della finestra delle proprietà crea gli CPropertyPage oggetti e li passa alla finestra delle proprietà tramite CPropertySheet::AddPage.

Esistono molte alternative dell'interfaccia utente per determinare quando le impostazioni della finestra delle proprietà modeless devono essere applicate a un oggetto esterno. Un'alternativa consiste nell'applicare le impostazioni della pagina delle proprietà corrente ogni volta che l'utente modifica qualsiasi valore. Un'altra alternativa consiste nel fornire un pulsante Applica, che consente all'utente di accumulare modifiche nelle pagine delle proprietà prima di eseguirne il commit nell'oggetto esterno. Per informazioni su come gestire il pulsante Applica, vedere l'articolo Gestione del pulsante Applica.

Vedi anche

Finestre delle proprietà
Scambio di dati
Utilizzo delle finestre di dialogo in MFC