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_DOWN
e 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::OnPrepareDC
di . 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 eWS_VSCROLL
Windows.I controlli barra di scorrimento possono anche essere aggiunti al frame contenente la visualizzazione, nel qual caso il framework inoltra e
WM_VSCROLL
iWM_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 unCSplitterWnd
oggetto con barre di scorrimento condivise, unCScrollView
oggetto userà quelli condivisi anziché crearne uno personalizzato.
Per altre informazioni sull'uso CScrollView
di , vedere Architettura di documenti/viste e classi di viste derivate disponibili in MFC.
Gerarchia di ereditarietà
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 | Ascensionale |
MM_TWIPS |
1/1440 in | Ascensionale |
MM_HIENGLISH |
0.001 in | Ascensionale |
MM_LOMETRIC |
0,1 mm | Ascensionale |
MM_LOENGLISH |
0.01 in | Ascensionale |
Tutte queste modalità sono definite da Windows. Due modalità di mapping standard e MM_ISOTROPIC
MM_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