Classe CScrollView

Oggetto CView con funzionalità di scorrimento.

Sintassi

class CScrollView : public CView

Membri

Costruttori protetti

Nome Descrizione
CScrollView::CScrollView Costruisce un oggetto CScrollView.

Metodi pubblici

Nome Descrizione
CScrollView::CheckScrollBars Indica se la visualizzazione di scorrimento ha barre di scorrimento orizzontali e verticali.
CScrollView::FillOutsideRect Riempie l'area di una visualizzazione all'esterno dell'area di scorrimento.
CScrollView::GetDeviceScrollPosition Ottiene la posizione di scorrimento corrente nelle unità dispositivo.
CScrollView::GetDeviceScrollSizes Ottiene la modalità di mapping corrente, le dimensioni totali e le dimensioni di riga e pagina della visualizzazione scorrevole. Le dimensioni sono in unità dispositivo.
CScrollView::GetScrollPosition Ottiene la posizione di scorrimento corrente in unità logiche.
CScrollView::GetTotalSize Ottiene le dimensioni totali della visualizzazione di scorrimento in unità logiche.
CScrollView::ResizeParentToFit Determina la dimensione della visualizzazione per determinare le dimensioni del frame.
CScrollView::ScrollToPosition Scorre la visualizzazione fino a un determinato punto, specificato in unità logiche.
CScrollView::SetScaleToFitSize Inserisce la visualizzazione di scorrimento in modalità scale-to-fit.
CScrollView::SetScrollSizes Imposta la modalità di mapping della visualizzazione di scorrimento, le dimensioni totali e gli importi dello scorrimento orizzontale e verticale.

Osservazioni:

È possibile gestire lo scorrimento standard in qualsiasi classe derivata da CView eseguendo l'override delle funzioni membro e OnVScroll mappate OnHScroll ai messaggi. Ma CScrollView aggiunge le funzionalità seguenti alle relative CView funzionalità:

  • Gestisce le dimensioni e le modalità di mapping delle finestre e del riquadro di visualizzazione.

  • Scorre automaticamente in risposta ai messaggi della barra di scorrimento.

  • Scorre automaticamente in risposta ai messaggi dalla tastiera, da un mouse non scorrevole o dalla rotellina IntelliMouse.

Per scorrere automaticamente in risposta ai messaggi dalla tastiera, aggiungere un WM_KEYDOWN messaggio e testare per VK_DOWNe VK_PREV chiamare SetScrollPos.

È possibile gestire lo scorrimento della rotellina del mouse eseguendo l'override delle funzioni membro e OnRegisteredMouseWheel mappate OnMouseWheel ai messaggi. Poiché sono per CScrollView, queste funzioni membro supportano il comportamento consigliato per WM_MOUSEWHEEL, il messaggio di rotazione della rotellina.

Per sfruttare i vantaggi dello scorrimento automatico, derivare la classe di visualizzazione da CScrollView anziché da CView. Quando la visualizzazione viene creata per la prima volta, se si desidera calcolare le dimensioni della visualizzazione scorrevole in base alle dimensioni del documento, chiamare la SetScrollSizes funzione membro dall'override di CView::OnInitialUpdate o CView::OnUpdate. È necessario scrivere codice personalizzato per eseguire una query sulle dimensioni del documento. Per un esempio, vedere l'esempio Scribble.

La chiamata alla SetScrollSizes funzione membro imposta la modalità di mapping della visualizzazione, le dimensioni totali della visualizzazione di scorrimento e gli importi da scorrere orizzontalmente e verticalmente. Tutte le dimensioni sono in unità logiche. Le dimensioni logiche della vista vengono in genere calcolate dai dati archiviati nel documento, ma in alcuni casi è consigliabile specificare una dimensione fissa. Per esempi di entrambi gli approcci, vedere CScrollView::SetScrollSizes.

Specificare gli importi da scorrere orizzontalmente e verticalmente in unità logiche. Per impostazione predefinita, se l'utente fa clic su un albero barra di scorrimento all'esterno della casella di scorrimento, CScrollView scorre una "pagina". Se l'utente fa clic su una freccia di scorrimento alla fine di una barra di scorrimento, CScrollView scorre una "riga". Per impostazione predefinita, una pagina è 1/10 delle dimensioni totali della visualizzazione; una riga è 1/10 delle dimensioni della pagina. Eseguire l'override di questi valori predefiniti passando dimensioni personalizzate nella SetScrollSizes funzione membro. Ad esempio, è possibile impostare le dimensioni orizzontali su una frazione della larghezza della dimensione totale e della dimensione verticale sull'altezza di una linea nel tipo di carattere corrente.

Invece di scorrere, CScrollView è possibile ridimensionare automaticamente la visualizzazione in base alle dimensioni correnti della finestra. In questa modalità, la visualizzazione non dispone di barre di scorrimento e la visualizzazione logica viene estesa o compattata per adattarsi esattamente all'area client della finestra. Per usare questa funzionalità adatta alla scalabilità, chiamare CScrollView::SetScaleToFitSize. Chiamare SetScaleToFitSize o SetScrollSizes, ma non entrambi.

Prima che venga chiamata la OnDraw funzione membro della classe di visualizzazione derivata, CScrollView regola automaticamente l'origine del riquadro di visualizzazione per l'oggetto CPaintDC contesto dispositivo passato a OnDraw.

Per modificare l'origine del riquadro di visualizzazione per la finestra di scorrimento, CScrollView esegue l'override CView::OnPrepareDCdi . Questa regolazione è automatica per il contesto di CPaintDC dispositivo che CScrollView passa a OnDraw, ma è necessario chiamare CScrollView::OnPrepareDC se stessi per qualsiasi altro contesto di dispositivo usato, ad esempio .CClientDC È possibile eseguire l'override CScrollView::OnPrepareDC per impostare la penna, il colore di sfondo e altri attributi di disegno, ma chiamare la classe di base per eseguire il ridimensionamento.

Le barre di scorrimento possono essere visualizzate in tre posizioni rispetto a una visualizzazione, come illustrato nei casi seguenti:

  • Le barre di scorrimento standard in stile finestra possono essere impostate per la visualizzazione utilizzando gli WS_HSCROLL stili e WS_VSCROLLWindows.

  • I controlli barra di scorrimento possono anche essere aggiunti al frame contenente la visualizzazione, nel qual caso il framework inoltra e WM_VSCROLL i WM_HSCROLL messaggi dalla finestra cornice alla visualizzazione attualmente attiva.

  • Il framework inoltra inoltre i messaggi di scorrimento da un CSplitterWnd controllo splitter al riquadro di divisione attualmente attivo (una visualizzazione). Se posizionata in un CSplitterWnd oggetto con barre di scorrimento condivise, un CScrollView oggetto userà quelli condivisi anziché crearne uno personalizzato.

Per altre informazioni sull'uso CScrollViewdi , vedere Architettura di documenti/viste e classi di viste derivate disponibili in MFC.

Gerarchia di ereditarietà

CObject

CCmdTarget

CWnd

CView

CScrollView

Requisiti

Intestazione:afxwin.h

CScrollView::CheckScrollBars

Chiamare questa funzione membro per determinare se la visualizzazione di scorrimento dispone di barre orizzontali e verticali.

void CheckScrollBars(
    BOOL& bHasHorzBar,
    BOOL& bHasVertBar) const;

Parametri

bHasHorzBar
Indica che l'applicazione ha una barra di scorrimento orizzontale.

bHasVertBar
Indica che l'applicazione ha una barra di scorrimento verticale.

CScrollView::CScrollView

Costruisce un oggetto CScrollView.

CScrollView();

Osservazioni:

È necessario chiamare SetScrollSizes o SetScaleToFitSize prima che la visualizzazione di scorrimento sia utilizzabile.

CScrollView::FillOutsideRect

Chiamare FillOutsideRect per riempire l'area della visualizzazione visualizzata all'esterno dell'area di scorrimento.

void FillOutsideRect(
    CDC* pDC,
    CBrush* pBrush);

Parametri

pDC
Contesto del dispositivo in cui deve essere eseguita la compilazione.

pBrush
Pennello con cui deve essere riempita l'area.

Osservazioni:

Usare FillOutsideRect nella funzione del gestore della OnEraseBkgnd visualizzazione di scorrimento per evitare un'eccessiva riproduzione dello sfondo.

Esempio

BOOL CMyScrollView::OnEraseBkgnd(CDC* pDC)
{
   CBrush br(GetSysColor(COLOR_WINDOW));
   FillOutsideRect(pDC, &br);
   return TRUE;                   // Erased
}

CScrollView::GetDeviceScrollPosition

Chiamare GetDeviceScrollPosition quando sono necessarie le posizioni orizzontali e verticali correnti delle caselle di scorrimento nelle barre di scorrimento.

CPoint GetDeviceScrollPosition() const;

Valore restituito

Posizioni orizzontali e verticali (in unità dispositivo) delle caselle di scorrimento come CPoint oggetto .

Osservazioni:

Questa coppia di coordinate corrisponde alla posizione del documento in cui è stato eseguito lo scorrimento dell'angolo superiore sinistro della visualizzazione. Ciò è utile per sfalsare le posizioni del dispositivo del mouse per visualizzare le posizioni dei dispositivi di scorrimento.

GetDeviceScrollPosition restituisce valori in unità dispositivo. Se si desiderano unità logiche, usare GetScrollPosition invece .

CScrollView::GetDeviceScrollSizes

GetDeviceScrollSizes ottiene la modalità di mapping corrente, le dimensioni totali e le dimensioni di riga e pagina della visualizzazione scorrevole.

void GetDeviceScrollSizes(
    int& nMapMode,
    SIZE& sizeTotal,
    SIZE& sizePage,
    SIZE& sizeLine) const;

Parametri

nMapMode
Restituisce la modalità di mapping corrente per questa visualizzazione. Per un elenco dei valori possibili, vedere SetScrollSizes.

sizeTotal
Restituisce le dimensioni totali correnti della visualizzazione di scorrimento nelle unità dispositivo.

sizePage
Restituisce gli importi orizzontali e verticali correnti da scorrere in ogni direzione in risposta a un clic del mouse in un albero a barre di scorrimento. Il cx membro contiene la quantità orizzontale. Il cy membro contiene la quantità verticale.

sizeLine
Restituisce gli importi orizzontali e verticali correnti da scorrere in ogni direzione in risposta a un clic del mouse in una freccia di scorrimento. Il cx membro contiene la quantità orizzontale. Il cy membro contiene la quantità verticale.

Osservazioni:

Le dimensioni sono in unità dispositivo. Questa funzione membro viene raramente chiamata.

CScrollView::GetScrollPosition

Chiamare GetScrollPosition quando sono necessarie le posizioni orizzontali e verticali correnti delle caselle di scorrimento nelle barre di scorrimento.

CPoint GetScrollPosition() const;

Valore restituito

Posizioni orizzontali e verticali (in unità logiche) delle caselle di scorrimento come CPoint oggetto .

Osservazioni:

Questa coppia di coordinate corrisponde alla posizione del documento in cui è stato eseguito lo scorrimento dell'angolo superiore sinistro della visualizzazione.

GetScrollPosition restituisce valori in unità logiche. Se si vogliono unità di dispositivo, usare GetDeviceScrollPosition invece.

CScrollView::GetTotalSize

Chiamare GetTotalSize per recuperare le dimensioni orizzontali e verticali correnti della visualizzazione di scorrimento.

CSize GetTotalSize() const;

Valore restituito

Dimensioni totali della visualizzazione di scorrimento in unità logiche. La dimensione orizzontale è nel cx membro del valore restituito CSize . La dimensione verticale è nel cy membro.

CScrollView::ResizeParentToFit

Chiamare ResizeParentToFit per consentire alle dimensioni della visualizzazione di determinare le dimensioni della finestra cornice.

void ResizeParentToFit(BOOL bShrinkOnly = TRUE);

Parametri

bShrinkOnly
Tipo di ridimensionamento da eseguire. Il valore predefinito, TRUE, riduce la finestra cornice, se appropriato. Le barre di scorrimento verranno comunque visualizzate per le visualizzazioni di grandi dimensioni o le finestre cornice di piccole dimensioni. Un valore di FALSE fa sì che la visualizzazione ridimensiona sempre la finestra cornice esattamente. Questo può essere un po 'pericoloso perché la finestra cornice potrebbe diventare troppo grande per adattarsi all'interno della finestra cornice MDI (Multiple Document Interface) o dello schermo.

Osservazioni:

Questa opzione è consigliata solo per le visualizzazioni nelle finestre cornice figlio MDI. Usare ResizeParentToFit nella OnInitialUpdate funzione del gestore della classe derivata CScrollView . Per un esempio di questa funzione membro, vedere CScrollView::SetScrollSizes.

ResizeParentToFit presuppone che le dimensioni della finestra di visualizzazione siano state impostate. Se le dimensioni della finestra di visualizzazione non sono state impostate quando ResizeParentToFit viene chiamato, si otterrà un'asserzione. Per assicurarsi che ciò non accada, effettuare la chiamata seguente prima di chiamare ResizeParentToFit:

GetParentFrame()->RecalcLayout();

CScrollView::ScrollToPosition

Chiamare ScrollToPosition per scorrere fino a un punto specificato nella visualizzazione.

void ScrollToPosition(POINT pt);

Parametri

pt
Punto a cui scorrere, in unità logiche. Il x membro deve essere un valore positivo (maggiore o uguale a 0, fino alle dimensioni totali della visualizzazione). Lo stesso vale per il y membro quando la modalità di mapping è MM_TEXT. Il y membro è negativo nelle modalità di mapping diverse da MM_TEXT.

Osservazioni:

La visualizzazione verrà scorrevole in modo che questo punto si trova nell'angolo superiore sinistro della finestra. Questa funzione membro non deve essere chiamata se la visualizzazione viene ridimensionata per adattarsi.

CScrollView::SetScaleToFitSize

Chiamare SetScaleToFitSize quando si desidera ridimensionare automaticamente le dimensioni del riquadro di visualizzazione alle dimensioni correnti della finestra.

void SetScaleToFitSize(SIZE sizeTotal);

Parametri

sizeTotal
Dimensioni orizzontali e verticali in base alle quali deve essere ridimensionata la visualizzazione. Le dimensioni della visualizzazione di scorrimento sono misurate in unità logiche. La dimensione orizzontale è contenuta nel cx membro. La dimensione verticale è contenuta nel cy membro. Sia cx che cy devono essere maggiori o uguali a 0.

Osservazioni:

Con le barre di scorrimento, solo una parte della visualizzazione logica può essere visibile in qualsiasi momento. Ma con la funzionalità scale-to-fit, la visualizzazione non ha barre di scorrimento e la visualizzazione logica è estesa o ridotta per adattarsi esattamente all'area client della finestra. Quando la finestra viene ridimensionata, la vista disegna i dati a una nuova scala in base alle dimensioni della finestra.

In genere si inserisce la chiamata a SetScaleToFitSize nell'override della funzione membro della OnInitialUpdate visualizzazione. Se non si vuole ridimensionare automaticamente, chiamare invece la SetScrollSizes funzione membro.

SetScaleToFitSize può essere usato per implementare un'operazione "Zoom su adatta". Usare SetScrollSizes per reinizializzare lo scorrimento.

SetScaleToFitSize presuppone che le dimensioni della finestra di visualizzazione siano state impostate. Se le dimensioni della finestra di visualizzazione non sono state impostate quando SetScaleToFitSize viene chiamato, si otterrà un'asserzione. Per assicurarsi che ciò non accada, effettuare la chiamata seguente prima di chiamare SetScaleToFitSize:

GetParentFrame()->RecalcLayout();

CScrollView::SetScrollSizes

Chiamare SetScrollSizes quando la visualizzazione sta per essere aggiornata.

void SetScrollSizes(
    int nMapMode,
    SIZE sizeTotal,
    const SIZE& sizePage = sizeDefault,
    const SIZE& sizeLine = sizeDefault);

Parametri

nMapMode
Modalità di mapping da impostare per questa visualizzazione. I valori possibili includono:

Modalità mapping Unità logica Asse y positivo estende...
MM_TEXT 1 pixel Arrotondamento per difetto
MM_HIMETRIC 0,01 mm Ascendente
MM_TWIPS 1/1440 in Ascendente
MM_HIENGLISH 0.001 in Ascendente
MM_LOMETRIC 0,1 mm Ascendente
MM_LOENGLISH 0.01 in Ascendente

Tutte queste modalità sono definite da Windows. Due modalità di mapping standard e MM_ISOTROPICMM_ANISOTROPIC, non vengono usate per CScrollView. La libreria di classi fornisce la SetScaleToFitSize funzione membro per ridimensionare la visualizzazione alle dimensioni della finestra. La colonna 3 della tabella precedente descrive l'orientamento delle coordinate.

sizeTotal
Dimensioni totali della visualizzazione di scorrimento. Il cx membro contiene l'extent orizzontale. Il cy membro contiene l'extent verticale. Le dimensioni sono in unità logiche. Sia cx che cy devono essere maggiori o uguali a 0.

sizePage
Gli importi orizzontali e verticali per scorrere in ogni direzione in risposta a un clic del mouse in un albero a barre di scorrimento. Il cx membro contiene la quantità orizzontale. Il cy membro contiene la quantità verticale.

sizeLine
L'oggetto orizzontale e verticale consente di scorrere in ogni direzione in risposta a un clic del mouse in una freccia di scorrimento. Il cx membro contiene la quantità orizzontale. Il cy membro contiene la quantità verticale.

Osservazioni:

Chiamalo nell'override della OnUpdate funzione membro per regolare le caratteristiche di scorrimento quando, ad esempio, il documento viene inizialmente visualizzato o quando cambia le dimensioni.

In genere si otterranno informazioni sulle dimensioni dal documento associato alla visualizzazione chiamando una funzione membro del documento, forse denominata GetMyDocSize, fornita con la classe documento derivata. Il codice seguente illustra questo approccio:

CMyScrollDoc* pMyDoc = (CMyScrollDoc*)GetDocument();
SetScrollSizes(nMapMode, pMyDoc->GetMyDocSize());

In alternativa, a volte potrebbe essere necessario impostare una dimensione fissa, come nel codice seguente:

SetScrollSizes(nMapMode, CSize(100, 100));

È necessario impostare la modalità di mapping su una delle modalità di mapping di Windows ad eccezione MM_ISOTROPIC di o MM_ANISOTROPIC. Se si vuole usare una modalità di mapping senza vincoli, chiamare la SetScaleToFitSize funzione membro anziché SetScrollSizes.

Esempio

void CMyScrollView::OnUpdate(CView* /*pSender*/, LPARAM /*lHint*/,
   CObject* /*pHint*/)
{
   // Implement a GetMyDocSize() member function in 
   // your document class; it returns a CSize.
   CMyScrollDoc* pMyDoc = (CMyScrollDoc*)GetDocument();
   SetScrollSizes(MM_LOENGLISH, pMyDoc->GetMyDocSize());
   ResizeParentToFit();   // Default bShrinkOnly argument
}

 

void CMyScrollView::OnInitialUpdate()
{
   CScrollView::OnInitialUpdate();

   // The GetMyDocSize() member function is implemented in 
   // your document class. The return type is CSize.
   CMyScrollDoc* pMyDoc = (CMyScrollDoc*)GetDocument();
   SetScrollSizes(MM_TEXT, pMyDoc->GetMyDocSize());
}

Vedi anche

Esempio MFC DIBLOOK
CView Classe
Grafico della gerarchia
CSplitterWnd Classe