Procedura dettagliata: inserimento di controlli nelle barre degli strumenti
In questo argomento viene descritto come aggiungere un pulsante della barra degli strumenti contenente un controllo Windows in una barra degli strumenti. In MFC, un pulsante della barra degli strumenti deve essere una classe derivata di Classe CMFCToolBarButton, ad esempio Classe CMFCToolBarComboBoxButton, Classe CMFCToolBarEditBoxButton, Classe CMFCDropDownToolbarButton, o Classe CMFCToolBarMenuButton.
Aggiungere Controlli alla Barra degli Strumenti
Per aggiungere un controllo ad una barra degli strumenti, seguire la seguente procedura:
Riservare un ID di risorsa fittizio per il pulsante nella risorsa della barra degli strumenti padre. Per ulteriori informazioni su come creare pulsanti mediante l'editor della barra degli strumenti in Visual Studio, vedere l'argomento Editor barra degli strumenti.
Riservare un'immagine della barra degli strumenti (icona del pulsante) per il pulsante in tutte le bitmap nella barra degli strumenti padre.
Nel gestore di messaggi che elabora il messaggio AFX_WM_RESETTOOLBAR, effettuare le seguenti operazioni:
Costruire il pulsante utilizzando una classe che deriva da CMFCToolbarButton.
Sostituire il pulsante fittizio con il nuovo controllo mediante CMFCToolBar::ReplaceButton. È possibile creare l'oggetto del pulsante sullo stack, perché ReplaceButton copia l'oggetto del pulsante e mantiene la copia.
Nota
Se è stata attivata la personalizzazione nell'applicazione, è necessario reimpostare la barra degli strumenti mediante il pulsante Reimposta nella scheda Barre degli strumenti della finestra di dialogo Personalizza per cercare il controllo aggiornato nell'applicazione dopo aver ricompilato.Lo stato della barra degli strumenti viene salvato nel registro di sistema di Windows e le informazioni del registro vengono caricate e applicate dopo che il metodo ReplaceButton viene eseguito durante l'avvio dell'applicazione.
Controlli della barra degli strumenti e Personalizzazione
La scheda Comandi della finestra di dialogo Personalizza contiene un elenco di controlli disponibili nell'applicazione. Per impostazione predefinita, la finestra di dialogo Personalizza elabora i menu dell'applicazione e compila un elenco di pulsanti della barra degli strumenti standard in ogni categoria del menu. Per mantenere le funzionalità estese che i controlli della barra degli strumenti offrono, è necessario sostituire il pulsante della barra degli strumenti standard con il controllo personalizzato nella finestra di dialogo Personalizza.
Quando si abilita la personalizzazione, creare la finestra di dialogo Personalizza nel gestore della personalizzazione OnViewCustomize utilizzando la classe Classe CMFCToolBarsCustomizeDialog. Prima di visualizzare la finestra di dialogo Personalizza chiamando CMFCToolBarsCustomizeDialog::Create, chiamare CMFCToolBarsCustomizeDialog::ReplaceButton per sostituire il pulsante standard con il nuovo controllo.
Esempio: Creare una Casella Combinata di Ricerca
In questa sezione viene descritto come creare una casella combinata Find visualizzata su una barra degli strumenti e contenente le stringhe di ricerca utilizzate recentemente. L'utente può immettere una stringa nel controllo e premere il tasto invio per cercare un documento, oppure premere il tasto escape per riportare lo stato attivo alla cornice principale. In questo esempio si presuppone che il documento venga mostrato in una visualizzazione derivata di Classe CEditView.
Creazione del Controllo di Ricerca
Innanzitutto, creare il controllo casella combinata Find :
Aggiungere il pulsante e i relativi comandi alle risorse dell'applicazione:
Nelle risorse dell'applicazione, aggiungere un nuovo pulsante con un ID di comando ID_EDIT_FIND ad una barra degli strumenti dell'applicazione e a tutte le bitmap associate alla barra degli strumenti.
Creare una nuova voce di menu con l'ID di comando ID_EDIT_FIND.
Aggiungere una nuova stringa "Cerca il testo\nCerca" alla tabella di stringhe e assegnare un ID di comando ID_EDIT_FIND_COMBO . Questo ID verrà utilizzato come l'ID di comando del pulsante della casella combinata Find.
Nota
Poiché ID_EDIT_FIND è un comando standard elaborato da CEditView, non è necessario implementare un gestore speciale per questo comando. Tuttavia, è necessario implementare un gestore per il nuovo comando ID_EDIT_FIND_COMBO.
Creare una nuova classe, CFindComboBox, derivata da Classe CComboBox.
Nella classe CFindComboBox, eseguire l'override del metodo virtuale PreTranslateMessage . Questo metodo consente alla casella combinata di elaborare il messaggio di WM_KEYDOWN. Se l'utente preme il tasto escape (VK_ESCAPE), restituisce lo stato attivo alla finestra del frame principale. Se l'utente preme il tasto invio (VK_ENTER), viene inserito nella finestra del frame principale un messaggio WM_COMMAND contenente l'ID di comando ID_EDIT_FIND_COMBO .
Creare una classe per il pulsante della casella combinata Find, derivata da Classe CMFCToolBarComboBoxButton. In questo esempio è chiamato CFindComboButton.
Il costruttore di CMFCToolbarComboBoxButton accetta tre parametri: l'id di comando del pulsante, l'indice dell'immagine del pulsante e lo stile della casella combinata. Impostare questi parametri come segue:
Passare ID_EDIT_FIND_COMBO come ID di comando.
Utilizzare CCommandManager::GetCmdImage con ID_EDIT_FIND per ottenere l'indice dell'immagine.
Per un elenco degli stili disponibili per la casella combinata, vedere Stili casella combinata.
Nella classe CFindComboButton eseguire l'override del metodo CMFCToolbarComboBoxButton::CreateCombo. Qui è necessario creare l'oggetto CFindComboButton e restituire un puntatore ad esso.
Utilizzare la macro IMPLEMENT_SERIAL per rendere il pulsante di una casella combinata persistente. L'amministratore dell'area di lavoro carica e salva automaticamente lo stato del pulsante nel registro di sistema di Windows.
Implementare il gestore ID_EDIT_FIND_COMBO nella visualizzazione del documento. Utilizzare CMFCToolBar::GetCommandButtons con ID_EDIT_FIND_COMBO per recuperare tutti i pulsanti della casella combinata Find. Possono essere presenti più copie di un pulsante con lo stesso ID di comando a causa della personalizzazione.
Nel gestore di messaggi OnFinddi ID_EDIT_FIND, utilizzare CMFCToolBar::IsLastCommandFromButton per determinare se il comando di ricerca è stato inviato dal pulsante della casella combinata Find. In caso affermativo, cercare il testo e aggiungere la stringa di ricerca nella casella combinata.
Aggiungere il Controllo di Ricerca alla barra degli strumenti principale
Per aggiungere il pulsante della casella combinata nella barra degli strumenti, seguire la seguente procedura:
Implementare il gestore di messaggi AFX_WM_RESETTOOLBAR OnToolbarReset nella finestra del frame principale.
Nota
Il framework invia il messaggio alla finestra del frame principale quando una barra degli strumenti viene inizializzata durante l'avvio dell'applicazione, oppure quando una barra degli strumenti viene reimpostata durante la personalizzazione.In entrambi i casi, è necessario sostituire il pulsante della barra degli strumenti standard con il pulsante personalizzato della casella combinata Find .
Nel gestore AFX_WM_RESETTOOLBAR, esaminare la barra degli strumenti ID, ovvero, WPARAM del messaggio AFX_WM_RESETTOOLBAR. Se la barra degli strumenti ID è uguale a quella barra degli strumenti che contiene il pulsante della casella combinata Find, chiamare CMFCToolBar::ReplaceButton per sostituire il pulsante Find (ovvero il pulsante con l'id di comando ID_EDIT_FIND) con un oggetto CFindComboButton.
Nota
È possibile creare un oggetto CFindComboBox sullo stack, perché ReplaceButton copia l'oggetto del pulsante e mantiene la copia.
Aggiungere il Controllo di Ricerca alla Finestra di Dialogo Personalizzata
Nel gestore di personalizzazione OnViewCustomize, chiamare CMFCToolBarsCustomizeDialog::ReplaceButton per sostituire il pulsante Find (ovvero il pulsante con l'ID di comando ID_EDIT_FIND) con un oggetto CFindComboButton.
Vedere anche
Riferimenti
Classe CMFCToolBarComboBoxButton
Classe CMFCToolBarsCustomizeDialog