Condividi tramite


TN031: Barre di controllo

Annotazioni

La nota tecnica seguente non è stata aggiornata perché è stata inclusa per la prima volta nella documentazione online. Di conseguenza, alcune procedure e argomenti potrebbero non essere aggiornati o non corretti. Per le informazioni più recenti, è consigliabile cercare l'argomento di interesse nell'indice della documentazione online.

Questa nota descrive le classi della barra dei controlli in MFC: il CControlBar generale, CStatusBar, CToolBar, CDialogBar e CDockBar.

CControlBar

Un ControlBar è una CWndclasse derivata da :

  • È allineato alla parte superiore o inferiore di una finestra cornice.

  • Può contenere elementi figlio che sono controlli basati su HWND (ad esempio, CDialogBar) o elementi non basati su HWND (ad esempio, CToolBar, CStatusBar).

Le barre di controllo supportano gli stili aggiuntivi:

  • CBRS_TOP (l'impostazione predefinita) fissa la barra di controllo in alto.

  • CBRS_BOTTOM Fissare la barra di controllo in basso.

  • CBRS_NOALIGN Non riposizionare la barra di controllo quando l'elemento padre viene ridimensionato.

Le classi derivate da CControlBar forniscono implementazioni più interessanti:

  • CStatusBar Una barra di stato, gli elementi sono riquadri della barra di stato contenenti testo.

  • CToolBar Una barra degli strumenti, gli elementi sono pulsanti bitmap allineati in una riga.

  • CDialogBar Cornice simile a una barra degli strumenti contenente controlli standard delle finestre (creati da un modello di risorsa finestra di dialogo).

  • CDockBar Area di ancoraggio generalizzata per altri CControlBar oggetti derivati. È probabile che le variabili e le funzioni membro specifiche disponibili in questa classe cambino nelle versioni future.

Tutti gli oggetti o le finestre della barra di controllo saranno delle finestre figlio all'interno di una finestra parentale. In genere vengono aggiunti come elemento di pari livello all'area client del frame, ad esempio un client o una visualizzazione MDI. L'ID della finestra figlia di una barra di controllo è importante. Il layout predefinito della barra di controllo funziona solo per le barre di controllo con ID nell'intervallo di AFX_IDW_CONTROLBAR_FIRST da AFX_IDW_CONTROLBAR_LAST. Si noti che, anche se è presente un intervallo di 256 ID barra di controllo, i primi 32 di questi ID barra di controllo sono speciali perché sono supportati direttamente dall'architettura dell'anteprima di stampa.

La CControlBar classe fornisce l'implementazione standard per:

  • Allineare la barra di controllo alla parte superiore, inferiore o su uno dei lati del frame.

  • Allocazione di matrici di elementi di controllo.

  • Supporto dell'implementazione delle classi derivate.

Gli oggetti barra di controllo C++ verranno in genere incorporati come membri di una CFrameWnd classe derivata e verranno puliti quando l'oggetto padre HWND e l'oggetto vengono eliminati definitivamente. Se è necessario allocare un oggetto barra di controllo nell'heap, è sufficiente impostare il membro m_bAutoDestruct su TRUE per richiamare delete this; la barra di controllo quando l'oggetto HWND viene eliminato definitivamente.

Annotazioni

Se si crea una classe derivata dalla propria CControlBar, anziché usare una delle classi derivate di MFC, ad esempio CStatusBar, CToolBar o CDialogBar, sarà necessario impostare il membro dati m_dwStyle. Questa operazione può essere eseguita nell'override di Create:

// CMyControlBar is derived from CControlBar
BOOL CMyControlBar::Create(CWnd* pParentWnd,
    DWORD dwStyle,
    UINT nID)
{
    m_dwStyle = dwStyle;

.
.
.
}

Algoritmo di layout della barra di controllo

L'algoritmo di layout della barra di controllo è molto semplice. La finestra cornice invia un messaggio WM_SIZEPARENT a tutti gli elementi figlio nell'intervallo della barra di controllo. Insieme a questo messaggio, viene passato un puntatore al rettangolo client del genitore. Questo messaggio viene inviato agli elementi figli nell'ordine Z. Gli figli della barra di controllo usano queste informazioni per posizionarsi e ridurre le dimensioni dell'area client del padre. Il rettangolo finale che viene lasciato per l'area client normale (meno barre di controllo) viene usato per posizionare la finestra client principale (in genere un client MDI, una visualizzazione o una finestra di divisione).

Vedere CWnd::RepositionBars e CFrameWnd::RecalcLayout per altri dettagli.

I messaggi di Windows privati MFC, inclusi i WM_SIZEPARENT, sono documentati nella Nota tecnica 24.

CStatusBar

Una barra di stato è una barra di controllo con una riga di finestre di output di testo. Esistono due modi comuni per usare i riquadri di output di testo:

  • Come riga di messaggio

    (ad esempio, la riga del messaggio di aiuto del menu standard). Questi sono in genere accessibili da un indicizzato basato su 0

  • Come indicatori di stato

    (ad esempio, gli indicatori CAP, NUM e SCRL). Questi sono in genere accessibili in base all'ID stringa/comando.

Il tipo di carattere per la barra di stato è MS Sans Serif a 10 punti (dettato dalla Guida alla progettazione dell'applicazione Windows Interface o dalle mappature dei tipi di carattere corrispondenti al tipo di carattere proporzionale svizzero a 10 punti più simile). In alcune versioni di Windows, ad esempio l'edizione giapponese, i tipi di carattere selezionati sono diversi.

I colori usati nella barra di stato sono coerenti anche con la raccomandazione della Guida alla progettazione di applicazioni dell'interfaccia Windows. Questi colori non sono hardcoded e vengono modificati dinamicamente in risposta alla personalizzazione dell'utente nel Pannello di controllo.

Elemento Valore COLOR di Windows RGB predefinito
Sfondo della barra di stato COLOR_BTNFACE RGB(192, 192, 192)
Testo barra di stato COLOR_BTNTEXT RGB(000, 000, 000)
Bordi superiore/sinistro della barra di stato COLOR_BTNHIGHLIGHT RGB(255, 255, 255)
Bordi inferiore/destro della barra di stato COLOR_BTNSHADOW RGB(128, 128, 128)

Supporto CCmdUI per CStatusBar

Il modo in cui gli indicatori vengono in genere aggiornati è tramite il meccanismo di ON_UPDATE_COMMAND_UI. Durante il tempo di inattività, la barra di stato attiverà il gestore ON_UPDATE_COMMAND_UI con l'ID della stringa del riquadro indicatore.

Il gestore ON_UPDATE_COMMAND_UI può chiamare:

  • Enable: per abilitare o disabilitare il riquadro. Un riquadro disabilitato è esattamente simile a un riquadro abilitato, ma il testo è invisibile, ovvero disattiva l'indicatore di testo.

  • SetText: per modificare il testo. Prestare attenzione se si usa questa opzione perché il riquadro non verrà ridimensionato automaticamente.

Per informazioni dettagliate sulla creazione e la personalizzazione delle API, vedere la classe CStatusBar nella CStatusBar di classi. La maggior parte delle personalizzazioni delle barre di stato deve essere eseguita prima che la barra di stato venga inizialmente resa visibile.

La barra di stato supporta un solo riquadro estensibile, di solito il primo riquadro. Le dimensioni di quel riquadro sono veramente una dimensione minima. Se la barra di stato è maggiore della dimensione minima di tutti i riquadri, l'eventuale larghezza aggiuntiva verrà assegnata al riquadro espandibile. L'applicazione predefinita con una barra di stato ha indicatori allineati a destra per CAP, NUM e SCRL poiché il primo riquadro è elastico.

Barra degli strumenti CToolBar

Una barra degli strumenti è una barra di controllo con una riga di pulsanti bitmap che possono includere separatori. Sono supportati due stili di pulsanti: pulsanti a pressione e pulsanti casella di controllo. La funzionalità del gruppo di pulsanti radio può essere creata con pulsanti di casella di controllo e ON_UPDATE_COMMAND_UI.

Tutti i pulsanti bitmap nella barra degli strumenti vengono ricavati da una bitmap. Questa bitmap deve contenere un'immagine o un glifo per ogni pulsante. In genere l'ordine delle immagini/glifi nella bitmap è lo stesso ordine in cui verranno disegnati sullo schermo. Questa operazione può essere modificata usando le API di personalizzazione.

Ogni pulsante deve avere le stesse dimensioni. Il valore predefinito è lo standard 24x22 pixel. Ogni immagine/glifo deve avere le stesse dimensioni e deve essere affiancata nella bitmap. La dimensione predefinita dell'immagine/glifo è 16x15 pixel. Pertanto, per una barra degli strumenti con 10 pulsanti (con dimensioni standard), è necessaria una bitmap con 160 pixel di larghezza e 15 pixel di altezza.

Ogni pulsante ha un'unica immagine o glifo. I diversi stati e stili dei pulsanti (ad esempio, premuti, su, giù, disabilitati, disabilitati giù, indeterminati) vengono generati tramite algoritmi da tale immagine/glifo. Qualsiasi bitmap di colore o DIB può essere usata in teoria. L'algoritmo per generare i diversi stati dei pulsanti funziona meglio se l'immagine originale è in sfumature di grigio. Esaminare i pulsanti standard della barra degli strumenti e la clipart del pulsante della barra degli strumenti forniti nell'esempio generale MFC CLIPART per avere degli esempi.

I colori usati nella barra degli strumenti sono coerenti anche con la raccomandazione della Guida alla progettazione di applicazioni dell'interfaccia Windows. Questi colori non sono hardcoded e vengono modificati dinamicamente in risposta alla personalizzazione dell'utente nel Pannello di controllo.

Elemento Valore COLOR di Windows RGB predefinito
Sfondo della barra degli strumenti COLOR_BTNFACE RGB(192,192,192)
Pulsanti in alto/sinistra della barra degli strumenti COLOR_BTNHIGHLIGHT RGB(255,255,255)
Pulsanti della barra degli strumenti bordi inferiori/destri COLOR_BTNSHADOW RGB(128,128,128)

Inoltre, i pulsanti bitmap della barra degli strumenti vengono ricolorati come se fossero controlli standard dei pulsanti di Windows. Questa ricolorazione si verifica quando la bitmap viene caricata dalla risorsa e in risposta a una modifica dei colori di sistema in risposta alla personalizzazione dell'utente nel Pannello di controllo. I colori seguenti in una bitmap della barra degli strumenti verranno ricolorati automaticamente in modo che vengano usati con cautela. Se non vuoi ricolorare una parte della bitmap, usa un colore che approssima da vicino uno dei valori RGB mappati. Il mapping viene eseguito in base ai valori RGB esatti.

Valore RGB Valore colore mappato dinamicamente
RGB(000, 000, 000) COLOR_BTNTEXT
RGB(128, 128, 128) COLOR_BTNSHADOW
RGB(192, 192, 192) COLOR_BTNFACE
RGB(255, 255, 255) COLOR_BTNHIGHLIGHT

Per informazioni dettagliate sulla creazione e la personalizzazione delle API di creazione e personalizzazione, vedere la classe CToolBar the Class Library Reference (Informazioni di riferimento sulla CToolBar libreria di classi). La maggior parte delle personalizzazioni delle barre degli strumenti deve essere eseguita prima che la barra degli strumenti venga inizialmente resa visibile.

Le API di personalizzazione possono essere usate per regolare gli ID pulsante, gli stili, la larghezza dello spazio e l'immagine/glifo usati per il pulsante. Per impostazione predefinita, non è necessario usare queste API.

Supporto CCmdUI per CToolBar

Il modo in cui i pulsanti della barra degli strumenti vengono sempre aggiornati è tramite il meccanismo di ON_UPDATE_COMMAND_UI. Durante i periodi di inattività, la barra degli strumenti chiamerà il gestore ON_UPDATE_COMMAND_UI con l'ID del comando di quel pulsante. ON_UPDATE_COMMAND_UI non viene chiamato per i separatori, ma viene chiamato per i pulsanti e le caselle di spunta.

Il gestore ON_UPDATE_COMMAND_UI può chiamare:

  • Enable: per abilitare o disabilitare il pulsante. Questo funziona ugualmente per i pulsanti di spinta e le caselle di controllo.

  • SetCheck: per impostare lo stato di controllo di un pulsante. Chiamando questa funzione per un pulsante della barra degli strumenti, lo trasformerà in un pulsante a casella di controllo. SetCheck accetta un parametro che può essere 0 (non controllato), 1 (selezionato) o 2 (indeterminato)

  • SetRadio: abbreviato per SetCheck.

Le caselle di controllo sono caselle di controllo "AUTO"; cioè, quando l'utente le preme, cambiano immediatamente stato. Checked è lo stato inattivo o depresso. Non esiste un modo predefinito dell'interfaccia utente per modificare un pulsante nello stato "indeterminato" ; che deve essere eseguita tramite il codice.

Le API di personalizzazione consentiranno di modificare lo stato di un determinato pulsante della barra degli strumenti, preferibilmente è consigliabile modificare questi stati nel gestore ON_UPDATE_COMMAND_UI per il comando rappresentato dal pulsante della barra degli strumenti. Tenere presente che l'elaborazione inattiva modificherà lo stato dei pulsanti della barra degli strumenti con il gestore ON_UPDATE_COMMAND_UI, quindi eventuali modifiche apportate a questi stati tramite SetButtonStyle potrebbero andare perse dopo il successivo inattività.

I pulsanti della barra degli strumenti invieranno WM_COMMAND messaggi come pulsanti normali o voci di menu e vengono normalmente gestiti da un gestore ON_COMMAND nella stessa classe che fornisce il gestore ON_UPDATE_COMMAND_UI.

Sono disponibili quattro stili di pulsante della barra degli strumenti (valori TBBS_ ) utilizzati per gli stati di visualizzazione.

  • TBBS_CHECKED: la casella di controllo è attualmente selezionata (giù).

  • TBBS_INDETERMINATE: La casella di controllo è attualmente in uno stato intermedio.

  • TBBS_DISABLED: il pulsante è attualmente disabilitato.

  • TBBS_PRESSED: il pulsante è attualmente premuto.

I sei stili ufficiali del pulsante Guida alla progettazione di applicazioni dell'interfaccia Di Windows sono rappresentati dai valori TBBS seguenti:

  • Up = 0

  • Mouse Giù = TBBS_PRESSED (| qualsiasi altro stile)

  • Disabilitato = TBBS_DISABLED

  • Giù = TBBS_CHECKED

  • Down Disabled = TBBS_CHECKED | TBBS_DISABLED

  • Indeterminato = TBBS_INDETERMINATE

CDialogBar

Una barra di dialogo è una barra di controllo che contiene controlli Windows standard. Funge da finestra di dialogo in cui contiene i controlli e supporta la tabulazione tra di essi. Funge anche da finestra di dialogo in cui usa un modello di finestra di dialogo per rappresentare la barra.

Un CDialogBar è utilizzato per la barra degli strumenti dell'anteprima di stampa, che contiene controlli a pulsante standard.

Usare un CDialogBar è come usare un CFormView. È necessario definire un modello di finestra di dialogo per la barra delle finestre di dialogo e rimuovere tutti gli stili tranne WS_CHILD. Si noti che la finestra di dialogo non deve essere visibile.

Le notifiche di controllo per un CDialogBar oggetto verranno inviate all'elemento padre della barra di controllo (proprio come i pulsanti della barra degli strumenti).

Supporto CCmdUI per CDialogBar

I pulsanti della barra di dialogo devono essere aggiornati tramite il meccanismo del gestore ON_UPDATE_COMMAND_UI. In fase di inattività, la barra della finestra di dialogo chiamerà il gestore ON_UPDATE_COMMAND_UI con l'ID comando di tutti i pulsanti con ID >= 0x8000, ovvero nell'intervallo di ID comando.

Il gestore ON_UPDATE_COMMAND_UI può chiamare:

  • Abilita: per abilitare o disabilitare il pulsante.

  • SetText: per modificare il testo del pulsante.

La personalizzazione può essere eseguita tramite le API standard di Gestione finestre.

Vedere anche

Note tecniche per numero
Note tecniche per categoria