Procedura dettagliata: Inserire i controlli sulle barre degli strumenti
In questo argomento viene descritto come aggiungere un pulsante della barra degli strumenti che contiene un controllo Windows a una barra degli strumenti.In MFC, un pulsante della barra degli strumenti deve essere Classe CMFCToolBarButtonnella classe derivata da, ad esempio Classe CMFCToolBarComboBoxButton, Classe CMFCToolBarEditBoxButton, Classe CMFCDropDownToolbarButton, o Classe CMFCToolBarMenuButton.
Aggiunta di controlli alle barre degli strumenti
Per aggiungere un controllo a una barra degli strumenti, attenersi alla seguente procedura:
Prenotare un ID di risorsa fittizio al pulsante nella risorsa padre della barra degli strumenti.Per ulteriori informazioni su come creare i pulsanti mediante l'editor barra degli strumenti in Visual Studio, vedere l'argomento di Editor barra degli strumenti .
Riservare un'immagine della barra degli strumenti (icona del pulsante) al pulsante in tutte le bitmap nella barra degli strumenti padre.
Nel gestore di messaggi che elabora il messaggio di AFX_WM_RESETTOOLBAR , effettuare le operazioni seguenti:
Costruire il pulsante utilizzando CMFCToolbarButtonclasse derivata da.
Sostituire il pulsante fittizio con il nuovo controllo utilizzando CMFCToolBar::ReplaceButton.È possibile creare l'oggetto del pulsante sullo stack, poiché ReplaceButton copia l'oggetto del pulsante e gestisce la copia.
[!NOTA]
Se personalizzazione attivata nell'applicazione, è possibile che sia necessario reimpostare la barra degli strumenti mediante il pulsante Reimposta nella scheda Barre degli strumenti della finestra di dialogo Personalizza per visualizzare 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 di sistema vengono caricate e applicati dopo che il metodo di ReplaceButton viene eseguito durante l'avvio dell'applicazione.
Controlli della barra degli strumenti e la 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 dei pulsanti della barra degli strumenti standard in ogni categoria di 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 OnViewCustomize di personalizzazione utilizzando la classe di 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: Per creare una casella combinata di ricerca
In questa sezione viene descritto come creare un controllo casella combinata di Find visualizzata una barra degli strumenti e contiene le stringhe di ricerca utilizzate recentemente.L'utente può immettere una stringa nel controllo e premere il tasto leave per trovare un documento, oppure premere il tasto escape per restituire lo stato attivo sulla cornice principale.In questo esempio si presuppone che il documento venga visualizzato in Classe CEditView- visualizzazione derivata.
Creare il controllo di ricerca
Innanzitutto, creare il controllo casella combinata di Find :
Aggiungere il pulsante e i relativi controlli delle risorse dell'applicazione:
Nelle risorse dell'applicazione, aggiungere un nuovo pulsante con un ID di comando di ID_EDIT_FIND a 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 del comando di ID_EDIT_FIND
Aggiungere una nuova stringa “per cercare il testo \ nFind„ della tabella di stringhe e di assegnare un ID di comando di ID_EDIT_FIND_COMBOQuesto ID verrà utilizzato come l'ID di comando del pulsante della casella combinata di Find .
[!NOTA]
Poiché ID_EDIT_FIND è un comando standard che viene elaborata 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, derivato da Classe CComboBox.
Nella classe di CFindComboBox , eseguire l'override del metodo virtuale di PreTranslateMessage .Questo metodo consente alla casella combinata per elaborare il messaggio di WM_KEYDOWN .Se l'utente preme il tasto escape (VK_ESCAPE), ripristinare lo stato attivo alla finestra cornice principale.Se l'utente preme il tasto di inserire (VK_ENTER), inserire alla finestra cornice principale un messaggio di WM_COMMAND contenente l'id del comando di ID_EDIT_FIND_COMBO
Creare una classe per il pulsante della casella combinata di Find , derivata da Classe CMFCToolBarComboBoxButton.In questo esempio, viene denominato CFindComboButton.
Il costruttore di CMFCToolbarComboBoxButton accetta tre parametri: l'ID di comando del pulsante, indice di immagine del pulsante e lo stile della casella combinata.Impostare questi parametri come segue:
Passare ID_EDIT_FIND_COMBO come l'id di comando
Utilizzare CCommandManager::GetCmdImage con ID_EDIT_FIND per ottenere l'indice di immagine.
Per un elenco degli stili disponibili casella combinata, vedere Stili casella combinata.
Nella classe CFindComboButton eseguire l'override del metodo CMFCToolbarComboBoxButton::CreateCombo.È consigliabile creare l'oggetto di CFindComboButton e restituire un puntatore.
Utilizzare la macro di IMPLEMENT_SERIAL per rendere il pulsante combinato persistente.L'amministratore dell'area di lavoro carica automaticamente e salvare lo stato del pulsante nel registro di sistema di Windows.
Implementare il gestore di ID_EDIT_FIND_COMBO nella visualizzazione del documento.Utilizzare CMFCToolBar::GetCommandButtons con ID_EDIT_FIND_COMBO per recuperare tutti i pulsanti della casella combinata di Find .Possono essere presenti più copie di un pulsante con lo stesso ID di comando a causa di personalizzazione.
Nel gestore di messaggi OnFinddi ID_EDIT_FIND, utilizzare CMFCToolBar::IsLastCommandFromButton determinare se il comando di ricerca è stato inviato dal pulsante della casella combinata di Find .In caso affermativo, la ricerca di testo e aggiungere la stringa di ricerca nella casella combinata.
Aggiunta del controllo di ricerca alla barra degli strumenti principale
Per aggiungere il pulsante della casella combinata nella barra degli strumenti, attenersi alla seguente procedura:
Implementare un gestore di messaggi OnToolbarReset di AFX_WM_RESETTOOLBAR la finestra cornice principale.
[!NOTA]
Il framework invia il messaggio alla finestra cornice 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 della casella combinata di Find personalizzate.
Nel gestore di AFX_WM_RESETTOOLBAR , esaminare la barra degli strumenti l'ID, ovvero, WPARAM del messaggio di AFX_WM_RESETTOOLBAR .Se la barra degli strumenti ID è uguale a quella della barra degli strumenti che contiene il pulsante della casella combinata di Find , chiamare CMFCToolBar::ReplaceButton per sostituire il pulsante di Find ovvero il pulsante con l'ID di comando ID_EDIT_FIND) con un oggetto di CFindComboButton .
[!NOTA]
È possibile creare un oggetto di CFindComboBox nello stack, perché ReplaceButton copia l'oggetto del pulsante e gestisce la copia.
Aggiunta del controllo di ricerca alla finestra di dialogo personalizza
Nel gestore OnViewCustomizedi personalizzazione, chiamata CMFCToolBarsCustomizeDialog::ReplaceButton per sostituire il pulsante di Find ovvero il pulsante con l'ID di comando ID_EDIT_FIND) con un oggetto di CFindComboButton .
Vedere anche
Riferimenti
Classe CMFCToolBarComboBoxButton
Classe CMFCToolBarsCustomizeDialog