Condividi tramite


TN029: finestre con separatore

Questa nota descrive MFC Classe CSplitterWnd, che fornisce le divisioni della finestra e gestire il ridimensionamento di altre finestre del riquadro.

Stili della barra di divisione

CSplitterWnd supporta due stili diversi di suddividere le finestre.

In “contenitori di separatori statici,„ la finestra con separatore crea i riquadri quando viene creata.L'ordine e il numero dei riquadri non cambiano mai.Le barre di divisione vengono utilizzate per ridimensionare i riquadri diversi.È possibile utilizzare questo stile per visualizzare una classe di visualizzazione diversa in ciascun riquadro.L'editor grafico di Visual C++ e il File Manager windows sono esempi di programmi che utilizzano questo stile del separatore.Questo stile della finestra con separatore non utilizza i contenitori della barra di divisione.

In “separatori dinamici,„ i riquadri aggiuntivi vengono creati e vengono eliminati come le divisioni utente e visualizzazioni di non-divisioni nuove.Questo barra di divisione viene avviato da con un'unica visualizzazione e fornisce contenitori di separatore per l'utente alla divisione avviato.La finestra con separatore crea dinamicamente un nuovo oggetto visualizzato quando la visualizzazione viene suddivisa in una direzione.Questo nuovo oggetto visualizzazione rappresenta il nuovo riquadro.Se la visualizzazione viene suddivisa in due direzioni mediante l'interfaccia della tastiera, la finestra con separatore creati tre nuovi oggetti visualizzazione per i tre nuovi riquadri.Mentre la divisione è attiva, le finestre viene visualizzato il contenitore della barra di divisione come barra di divisione tra riquadri.Le finestre elimina gli oggetti visualizzazione aggiuntivi quando l'utente rimuove una divisione, ma la visualizzazione di originale rimane fino a eliminare la finestra con separatore stessa.Microsoft Excel e Microsoft Word sono esempi di applicazioni che utilizzano lo stile del separatore dinamico.

Quando si crea un qualsiasi tipo di finestra con separatore, è necessario specificare il numero massimo di righe e colonne che la barra di divisione gestirà.Un separatore statico creerà i riquadri per compilare tutte le righe e colonne.Un separatore dinamico creerà solo il primo riquadro quando CSplitterWnd viene creato.

Il numero massimo dei riquadri che è possibile specificare per i contenitori di separatori statici è 16 righe da 16 colonne.Configurazioni consigliate sono:

  • Riga 1 x 2 colonne: in genere con i riquadri inoltre

  • 2 righe x 1 colonne: in genere con i riquadri inoltre

  • 2 righe x 2 colonne: in genere con i riquadri simili

Il numero massimo dei riquadri che è possibile specificare per i separatori dinamici è 2 righe da 2 colonne.Configurazioni consigliate sono:

  • Riga 1 x 2 colonne: per i dati in formato colonna

  • 2 righe x 1 colonne: per dati testuali o altri

  • 2 righe x 2 colonne: per la griglia o la tabella è orientato i dati

Esempi della barra di divisione

Molti dei programmi di esempio MFC utilizzano direttamente o indirettamente le finestre con separatore.In generale VIEWEX MFC vengono illustrati diversi utilizzi di contenitori di separatori statici, tra cui come inserire un separatore in una barra di divisione.

È inoltre possibile utilizzare ClassWizard per creare una classe figlio (MDI) della finestra cornice della nuova interfaccia a documenti multipli che contiene una finestra con separatore.Per ulteriori informazioni sulle finestre con separatore, vedere Tipi di documento multiple, visualizzazioni e applicazioni utilizzano.

Terminologia utilizzata dall'implementazione

Di seguito è riportato un elenco di termini che sono specifici delle finestre con separatore:

  • CSplitterWnd:
    Una finestra che fornisce riquadro-suddividere i controlli e le barre di scorrimento condivisi tra tutti i riquadri nella riga o la colonna.Specificare le righe e le colonne con i numeri in base zero (il primo riquadro è riga = 0 e colonna = 0).

  • Riquadro:
    Una finestra specifica dell'applicazione CSplitterWnd gestisce.Un riquadro è in genere un oggetto derivato da Classe CView, ma può essere qualsiasi oggetto di CWnd con l'id appropriata della finestra figlio

    Per utilizzare CWndoggetto derivato da, passare RUNTIME_CLASS oggetto alla funzione di CreateView come se si utilizza CViewclasse derivata da.La classe deve utilizzare DECLARE_DYNCREATE e IMPLEMENT_DYNCREATE poiché il framework utilizza la creazione dinamica di runtime.Nonostante sia molto codice in CSplitterWnd specifico alla classe di CView , CObject::IsKindOf viene sempre utilizzato prima che le azioni vengano eseguite.

  • Barra di divisione:
    Un controllo che si trova tra le righe e le colonne di riquadri.Può essere utilizzato per regolare le dimensioni di righe o colonne di riquadri.

  • Contenitore della barra di divisione:
    Un controllo in CSplitterWnd dinamico che è possibile utilizzare per creare nuove righe o colonne di riquadri.Si trova nella parte superiore delle barre di scorrimento verticale o a sinistra delle barre di scorrimento orizzontale.

  • Intersezione della barra di divisione:
    l'intersezione di una barra di divisione verticale e di una barra di divisione orizzontale.È possibile trascinarlo per modificare contemporaneamente la dimensione di una riga e di una colonna di riquadri.

Barre di scorrimento condivise

La classe di CSplitterWnd supporta anche le barre di scorrimento condivise.Questi controlli barra di scorrimento sono elementi figlio di CSplitterWnd e condivisi con i riquadri diversi nella barra di divisione.

Ad esempio, in una riga 1 x una finestra di 2 colonne, è possibile specificare WS_VSCROLL quando si crea CSplitterWnd.Le finestre crea un controllo barra di scorrimento speciale condiviso tra i due riquadri.

[      ][      ][^]
[pane00][pane01][|]
[      ][      ][v]

Quando l'utente sposta la barra di scorrimento, i messaggi di WM_VSCROLL saranno inviati a entrambe le visualizzazioni.Quando una visualizzazione imposta la posizione della barra di scorrimento, la barra di scorrimento condivisa verrà impostata.

Si noti che le barre di scorrimento condivise sono più utili con analoghi oggetti visualizzazione.Se si combinano le visualizzazioni di tipi diversi in una barra di divisione, è possibile che sia necessario scrivere codice speciale per coordinare le relative posizioni di scorrimento.Qualsiasi CViewnella classe derivata da che utilizza la barra di scorrimento API di CWnd delegherà la barra di scorrimento condivisa se esiste.L'implementazione di CScrollView è un esempio di una classe di CView che supporti condiviso le barre di scorrimento.Le classi che non sono derivate da CView, classi basate sulle barre di scorrimento non controllo, o classi che utilizzano le implementazioni standard di windows (ad esempio, CEditView) non funzioneranno con la funzionalità condivisa barra di scorrimento di CSplitterWnd.

Dimensione minima

Per ogni riga è altezza della riga minima e per ogni colonna esiste una larghezza della colonna minima.Questo minimo garantisce che un riquadro non è troppo piccolo per essere visualizzato in modo completo.

Per una finestra con separatore statico, l'altezza della riga e la larghezza della colonna minima iniziali è 0.Per una finestra con separatore dinamico, l'altezza della riga e la larghezza della colonna minima iniziali vengono impostate dal parametro di sizeMin della funzione di CSplitterWnd::Create .

È possibile modificare queste dimensioni minime tramite le funzioni di CSplitterWnd::SetColumnInfo e di CSplitterWnd::SetRowInfo .

Il contatoreDimensioni ottimali

Il layout dei riquadri nella finestra con separatore dipende dalle dimensioni del frame che li contiene.Quando l'utente ridimensiona il frame contenitore, CSplitterWnd riposizionare e ridimensiona i riquadri in modo da poter di adattarsi al meglio possibile.

L'utente può impostare manualmente le dimensioni della larghezza della colonna e di altezza delle righe, o il programma possibile impostare la dimensione ideale utilizzando la classe di CSplitterWnd .Dimensione effettiva può essere più piccola o più grande dell'ideale.Le finestre regolati dimensione effettiva se lo spazio disponibile non è sufficiente per visualizzare la dimensione ideale o se c " è troppo spazio vuoto a destra o inferiore della finestra con separatore.

Controlli personalizzati

È possibile eseguire l'override di molte funzioni per fornire un comportamento personalizzato e un'interfaccia.È possibile eseguire l'override del primo set per fornire immagini alternative per i vari componenti grafici di una finestra con separatore.

  • virtual void OnDrawSpltter(CDC* pDC, ESplitType nType, const CRect& rect);

  • virtual void OnInvertTracker(const CRect& rect);

Chiamate a questa funzione per creare un controllo barra di scorrimento condiviso.È possibile eseguirne l'override per creare controlli aggiuntivi accanto alla barra di scorrimento.

  • virtual BOOL CreateScrollBarCtrl(DWORD dwStyle, UINT nID);

Queste funzioni implementano la logica della finestra con separatore dinamico.È possibile eseguire l'override di questi per fornire la logica più avanzata del separatore.

  • virtual void DeleteView(int row, int col);

  • virtual BOOL SplitRow(int cyBefore);

  • virtual BOOL SplitColumn(int cxBefore);

  • virtual void DeleteRow(int rowDelete);

  • virtual void DeleteColumn(int colDelete);

Funzionalità di modello CView

La classe di CView vengono utilizzati i seguenti controlli di alto livello delegati CSplitterWnd l'implementazione.Poiché questi controlli sono virtuali, l'implementazione standard di CView non è l'intera implementazione di CSplitterWnd di essere collegata in.Per le applicazioni che utilizzano CView ma non CSplitterWnd, l'implementazione di CSplitterWnd non sarà collegato con l'applicazione.

  • virtual BOOL CanActivateNext(BOOL bPrev = FALSE);
    Controlla se ID_NEXT_PANE o ID_PREV_PANE sia attualmente possibile.

  • virtual void ActivateNext(BOOL bPrev = FALSE);
    Esegue “il comando del riquadro precedente “o„ del riquadro successivo„.

  • virtual BOOL DoKeyboardSplit();
    Esegue il comando spaccati della tastiera, generalmente “finestra divisa„.

Vedere anche

Altre risorse

Note tecniche del numero

Note tecniche per categoria