Procedura dettagliata: inserimento di controlli nelle barre degli strumenti

Questo articolo descrive 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 una classe derivata dalla classe CMFCToolBarButton, 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:

  1. Riservare un ID di risorsa fittizio per il pulsante nella risorsa della barra degli strumenti padre. Per altre informazioni su come creare pulsanti tramite Editor barra degli strumenti in Visual Studio, vedere l'articolo Editor barra degli strumenti.

  2. Riservare un'immagine della barra degli strumenti (icona del pulsante) per il pulsante in tutte le bitmap nella barra degli strumenti padre.

  3. Nel gestore di messaggi che elabora il AFX_WM_RESETTOOLBAR messaggio seguire questa procedura:

    1. Costruire il controllo pulsante utilizzando una classe derivata da CMFCToolbarButton.

    2. Sostituire il pulsante fittizio con il nuovo controllo usando CMFCToolBar::ReplaceButton. È possibile creare l'oggetto pulsante nello stack, perché ReplaceButton copia l'oggetto pulsante e mantiene la copia.

Nota

Se è stata abilitata la personalizzazione nell'applicazione, potrebbe essere necessario reimpostare la barra degli strumenti usando il pulsante Reimposta nella scheda Barre degli strumenti della finestra di dialogo Personalizza per visualizzare il controllo aggiornato nell'applicazione dopo la ricompilazione. 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 comandi 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 di menu. Per mantenere le funzionalità estese fornite dai controlli della barra degli strumenti, è necessario sostituire il pulsante della barra degli strumenti standard con il controllo personalizzato nella finestra di dialogo Personalizza .

Quando si abilita la personalizzazione, si crea la finestra di dialogo Personalizza nel gestore OnViewCustomize di personalizzazione usando la 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: creazione di una casella combinata Find

Questa sezione descrive come creare un controllo Casella combinata Trova visualizzato su una barra degli strumenti e contiene stringhe di ricerca usate di recente. L'utente può immettere una stringa nel controllo e premere il tasto INVIO per cercare un documento, oppure premere il tasto ESC per riportare lo stato attivo sulla cornice principale. In questo esempio si presuppone che il documento venga visualizzato in una vista derivata dalla classe CEditView.

Creazione del controllo Find

Creare prima di tutto il controllo Casella combinata Trova :

  1. Aggiungere il pulsante e i relativi comandi alle risorse dell'applicazione:

    1. Nelle risorse dell'applicazione, aggiungere un nuovo pulsante con un ID di comando ID_EDIT_FIND a una barra degli strumenti dell'applicazione e a tutte le bitmap associate alla barra degli strumenti.

    2. Creare una nuova voce di menu con l'ID ID_EDIT_FIND comando.

    3. Aggiungere una nuova stringa "Trova il testo\nTrova" alla tabella di stringhe e assegnarle un ID di comando ID_EDIT_FIND_COMBO . Questo ID verrà usato come ID comando del pulsante Trova casella combinata.

      Nota

      Poiché ID_EDIT_FIND è un comando standard che viene 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.

  2. Creare una nuova classe, , CFindComboBoxderivata dalla classe CComboBox.

  3. Nella classe CFindComboBox eseguire l'override del metodo virtuale PreTranslateMessage. Questo metodo consentirà alla casella combinata di elaborare il messaggio di WM_KEYDOWN . Se l'utente preme il tasto ESC (VK_ESCAPE), restituisce lo stato attivo alla finestra cornice principale. Se l'utente preme il tasto INVIO (VK_ENTER), viene inserito nella finestra cornice principale un messaggio WM_COMMAND contenente l'ID di comando ID_EDIT_FIND_COMBO.

  4. Creare una classe per il pulsante Trova casella combinata, derivata dalla classe CMFCToolBarComboBoxButton. In questo esempio è denominato CFindComboButton.

  5. 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:

    1. Passare ID_EDIT_FIND_COMBO come ID di comando.

    2. Usare CCommandManager::GetCmdImage con ID_EDIT_FIND per ottenere l'indice dell'immagine.

    3. Per un elenco degli stili delle caselle combinate disponibili, vedere Stili casella combinata.

  6. Nella classe CFindComboButton eseguire l'override del metodo CMFCToolbarComboBoxButton::CreateCombo. A questo punto è necessario creare l'oggetto CFindComboButton e restituire un puntatore ad esso.

  7. Utilizzare la macro IMPLEMENT_edizione Standard RIAL per rendere persistente il pulsante combinato. Il gestore dell'area di lavoro carica e salva automaticamente lo stato del pulsante nel Registro di sistema di Windows.

  8. Implementare il gestore ID_EDIT_FIND_COMBO nella visualizzazione del documento. Usare CMFCToolBar::GetCommandButtons con ID_EDIT_FIND_COMBO per recuperare tutti i pulsanti Trova casella combinata. Possono essere presenti più copie di un pulsante con lo stesso ID di comando a causa della personalizzazione.

  9. ID_EDIT_FIND Nel gestore OnFindmessaggi usare CMFCToolBar::IsLastCommandFromButton per determinare se il comando find è stato inviato dal pulsante Trova casella combinata. In caso affermativo, cercare il testo e aggiungere la stringa di ricerca nella casella combinata.

Aggiunta del controllo Find alla barra degli strumenti principale

Per aggiungere il pulsante della casella combinata alla barra degli strumenti, attenersi alla seguente procedura:

  1. Implementare il gestore di messaggi AFX_WM_RESETTOOLBAROnToolbarReset nella 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 personalizzato Trova casella combinata.

  2. AFX_WM_RESETTOOLBAR Nel gestore esaminare l'ID della barra degli strumenti, ovvero WPARAM del messaggio AFX_WM_REedizione Standard TTOOLBAR. Se l'ID della barra degli strumenti è uguale a quello della barra degli strumenti che contiene il pulsante Trova casella combinata, chiamare CMFCToolBar::ReplaceButton per sostituire il pulsante Trova ( ovvero il pulsante con l'ID ID_EDIT_FIND) comando con un CFindComboButton oggetto .

    Nota

    È possibile creare un oggetto CFindComboBox nello stack, perché ReplaceButton copia l'oggetto pulsante e mantiene la copia.

Aggiunta del controllo Find alla finestra di dialogo Personalizza

Nel gestore OnViewCustomizedi personalizzazione chiamare CMFCToolBarsCustomizeDialog::ReplaceButton per sostituire il pulsante Trova (ovvero il pulsante con l'ID ID_EDIT_FINDcomando ) con un CFindComboButton oggetto .

Vedi anche

Grafico della gerarchia
Classi
Classe CMFCToolBar
Classe CMFCToolBarButton
Classe CMFCToolBarComboBoxButton
Classe CMFCToolBarsCustomizeDialog