CToolBarCtrl: Gestione delle notifiche di personalizzazione

Un controllo comune barra degli strumenti di Windows ha caratteristiche personalizzazione incorporato, tra cui una finestra di dialogo personalizzazione definita dal sistema, che permettono all'utente di inserire, eliminare o riorganizzare i pulsanti della barra degli strumenti. L'applicazione determina se le caratteristiche di personalizzazione sono disponibili e controlla nella misura in cui l'utente può personalizzare la barra degli strumenti.

È possibile rendere queste funzionalità di personalizzazione disponibili per l'utente dando la barra degli strumenti lo stile CCS_ADJUSTABLE . Le caratteristiche di personalizzazione consentono all'utente di trascinare un pulsante in una nuova posizione o di rimuovere un pulsante trascinandolo fuori della barra degli strumenti. Inoltre, l'utente può fare doppio clic per visualizzare la finestra di dialogo Personalizza barra degli strumenti, che permette all'utente di aggiungere, eliminare e riorganizzare i pulsanti della barra degli strumenti barra degli strumenti. L'applicazione può visualizzare nella finestra di dialogo Personalizza la funzione membro.

Controllo toolbar invia i messaggi di notifica alla finestra padre ad ogni passo nel processo di personalizzazione. Se l'utente tiene il tasto Maiusc premuto e inizia a trascinare un pulsante della barra degli strumenti gestisce automaticamente l'operazione di trascinamento. La barra degli strumenti invia il messaggio di notifica TBN_QUERYDELETE alla finestra padre per determinare se il pulsante può essere eliminato. L'operazione di trascinamento termina se la finestra padre restituisce FALSE. In caso contrario, la barra degli strumenti acquisisce l'input del mouse e attende che l'utente di rilasciare il pulsante del mouse.

Quando l'utente rilascia il pulsante del mouse, il controllo toolbar determina la posizione del cursore del mouse. Se il cursore si trova di fuori della barra degli strumenti, viene eliminato il pulsante. Se il cursore si trova su un altro pulsante della barra degli strumenti, la barra degli strumenti invia il messaggio di notifica TBN_QUERYINSERT alla finestra padre per determinare se un pulsante può essere inserito a sinistra del pulsante indicato. Il pulsante è inserito, se la finestra padre restituisce TRUE. in caso contrario, non è. La barra degli strumenti invia il messaggio di notifica TBN_TOOLBARCHANGE per segnalare la fine dell'operazione di trascinamento.

Se l'utente inizia un'operazione di trascinamento senza tenere premuto il tasto MAIUSC, controllo toolbar invia il messaggio di notifica TBN_BEGINDRAG alla finestra del proprietario. Un'applicazione che implementa il proprio codice tasto trascinando può utilizzare questo messaggio come un segnale per iniziare un'operazione di trascinamento. La barra degli strumenti invia il messaggio di notifica TBN_ENDDRAG per segnalare la fine dell'operazione di trascinamento.

Un controllo toolbar invia i messaggi di notifica quando l'utente Personalizza barra degli strumenti utilizzando la finestra di dialogo Personalizza barra degli strumenti. La barra degli strumenti invia il messaggio di notifica TBN_BEGINADJUST dopo che l'utente fa doppio clic la barra degli strumenti, ma prima la finestra di dialogo casella viene creato. Successivamente, la barra degli strumenti inizia l'invio di una serie di messaggi di notifica TBN_QUERYINSERT per determinare se la barra degli strumenti consente di pulsanti da inserire. Quando la finestra padre restituisce TRUE, la barra degli strumenti interrompe l'invio di messaggi di notifica TBN_QUERYINSERT . Se la finestra padre non restituisce TRUE per qualsiasi pulsante, la barra degli strumenti distrugge la finestra di dialogo.

Successivamente, il controllo toolbar determina se inviando un messaggio di notifica TBN_QUERYDELETE per ciascun pulsante della barra degli strumenti possono essere eliminati tutti i pulsanti sulla barra degli strumenti. La finestra padre restituisce TRUE per indicare che un pulsante può essere eliminato; in caso contrario, restituisce FALSE. La barra degli strumenti aggiunge tutti i pulsanti della barra degli strumenti nella finestra di dialogo, ma grigi di quelli che non possono essere cancellati.

Ogni volta che il controllo toolbar ha bisogno di informazioni su un pulsante nella finestra di dialogo Personalizza barra degli strumenti, invia il messaggio di notifica TBN_GETBUTTONINFO , specificando l'indice del pulsante per il quale ha bisogno di informazioni e l'indirizzo di una struttura TBNOTIFY . La finestra padre deve riempire la struttura con le relative informazioni.

Nella finestra di dialogo Personalizza barra degli strumenti include un pulsante aiuto e un pulsante di Reset. Quando l'utente sceglie il pulsante Help, controllo toolbar invia il messaggio di notifica TBN_CUSTHELP . La finestra padre dovrebbe rispondere visualizzando le informazioni della guida. Nella finestra di dialogo Invia il messaggio di notifica TBN_RESET quando l'utente seleziona il pulsante di Reset. Questo messaggio segnala che la barra degli strumenti è circa per reinizializzare la finestra di dialogo.

Questi messaggi sono tutti i messaggi WM_NOTIFY , e possono essere gestiti nella finestra del proprietario aggiungendo voci mappa messaggi il seguente formato alla mappa messaggi della tua finestra proprietario:

ON_NOTIFY ( wNotifyCode, idControl, memberFxn )

wNotifyCode

Codice di identificatore messaggio di notifica, ad esempio TBN_BEGINADJUST.

idControl

L'identificatore del controllo l'invio della notifica.

memberFxn

La funzione membro da chiamare quando viene ricevuta la notifica.

La funzione membro essere dichiarata con il seguente prototipo:

afx_msg void memberFxn( NMHDR * pNotifyStruct, LRESULT * risultato );

Se il gestore del messaggio di notifica restituisce un valore, dovrebbe mettere in LRESULT puntato da risultato.

Per ogni messaggio, pNotifyStruct punta a una struttura NMHDR o una struttura TBNOTIFY . Queste strutture sono descritti di seguito:

La struttura NMHDR contiene i seguenti membri:

typedef struct {tag&NMHDR
HWND hwndFrom; nbsp; / / handle del controllo l'invio messaggio
UINT idFrom; / / identificatore del controllo l'invio messaggio
Codice UINT;  / / codice di notifica; vedi sotto
} NMHDR

hwndFrom

Handle della finestra del controllo che invia la notifica. Per convertire questo handle a un puntatore CWnd , utilizzare CWnd::FromHandle.

idFrom

Identificatore del controllo l'invio della notifica.

codice

Codice di notifica. Questo membro può essere un valore specifico di un tipo di controllo, ad esempio TBN_BEGINADJUST o TTN_NEEDTEXT, oppure può essere uno dei valori di notifica comuni elencati di seguito:

La struttura TBNOTIFY contiene i seguenti membri:

typedef struct {
Hdr &NMHDR; / / informazioni comuni a tutti i messaggi WM_NOTIFY
int iItem; / / indice del pulsante di associati con notifica
TBBUTTON tbButton; / / info su pulsante associato con notifica
int cchText; nbsp;  / / count di caratteri nel testo del pulsante
LPSTR lpszText; / / indirizzo del testo del pulsante
} GRAN LUNGA TBNOTIFY, * LPTBNOTIFY

hdr

Informazioni comuni a tutti i messaggi WM_NOTIFY.

iItem

Indice del pulsante associato di notifica.

tbButton

Struttura TBBUTTON contenente informazioni sul pulsante toolbar connesso con la notifica.

cchText

Numero di caratteri nel testo del pulsante.

lpszText

Puntatore al testo del pulsante.

La barra degli strumenti invia notifiche sono i seguenti:

Index