La classe CScrollView
Avec CView
des fonctionnalités de défilement.
Syntaxe
class CScrollView : public CView
Membres
Constructeurs protégés
Nom | Description |
---|---|
CScrollView::CScrollView |
Construit un objet CScrollView . |
Méthodes publiques
Nom | Description |
---|---|
CScrollView::CheckScrollBars |
Indique si la vue de défilement comporte des barres de défilement horizontales et verticales. |
CScrollView::FillOutsideRect |
Remplit la zone d’une vue en dehors de la zone de défilement. |
CScrollView::GetDeviceScrollPosition |
Obtient la position de défilement actuelle dans les unités d’appareil. |
CScrollView::GetDeviceScrollSizes |
Obtient le mode de mappage actuel, la taille totale et les tailles de ligne et de page de l’affichage à défilement. Les tailles sont en unités d’appareil. |
CScrollView::GetScrollPosition |
Obtient la position de défilement actuelle en unités logiques. |
CScrollView::GetTotalSize |
Obtient la taille totale de la vue de défilement en unités logiques. |
CScrollView::ResizeParentToFit |
Provoque la taille de la vue pour dicter la taille de son cadre. |
CScrollView::ScrollToPosition |
Fait défiler l’affichage vers un point donné, spécifié dans les unités logiques. |
CScrollView::SetScaleToFitSize |
Place la vue de défilement en mode scale-to-fit. |
CScrollView::SetScrollSizes |
Définit le mode de mappage de l’affichage de défilement, la taille totale et les quantités de défilement horizontales et verticales. |
Notes
Vous pouvez gérer le défilement standard dans n’importe quelle classe dérivée en CView
remplaçant les fonctions mappées OnHScroll
et OnVScroll
membres du message. Mais CScrollView
ajoute les fonctionnalités suivantes à ses CView
fonctionnalités :
Il gère les tailles de fenêtre et de fenêtre et de fenêtre et les modes de mappage.
Il défile automatiquement en réponse aux messages de barre de défilement.
Il fait défiler automatiquement la réponse aux messages du clavier, d’une souris qui ne fait pas défiler ou de la roue IntelliMouse.
Pour faire défiler automatiquement la réponse aux messages à partir du clavier, ajoutez un WM_KEYDOWN
message, puis testez VK_DOWN
, VK_PREV
et appelez SetScrollPos
.
Vous pouvez gérer le défilement de la roulette de la souris vous-même en remplaçant les fonctions mappées OnMouseWheel
et OnRegisteredMouseWheel
membres des messages. Comme c’est le cas, CScrollView
ces fonctions membres prennent en charge le comportement recommandé pour WM_MOUSEWHEEL
, le message de rotation de roue.
Pour tirer parti du défilement automatique, dérivez votre classe d’affichage à partir CScrollView
CView
de . Lorsque la vue est créée pour la première fois, si vous souhaitez calculer la taille de l’affichage à défilement en fonction de la taille du document, appelez la SetScrollSizes
fonction membre à partir de votre remplacement de l’un ou CView::OnUpdate
l’autre CView::OnInitialUpdate
des deux. (Vous devez écrire votre propre code pour interroger la taille du document. Pour obtenir un exemple, consultez l’exemple Scribble.)
L’appel à la SetScrollSizes
fonction membre définit le mode de mappage de la vue, les dimensions totales de la vue de défilement et les quantités à faire défiler horizontalement et verticalement. Toutes les tailles sont en unités logiques. La taille logique de la vue est généralement calculée à partir des données stockées dans le document, mais dans certains cas, vous pouvez spécifier une taille fixe. Pour obtenir des exemples des deux approches, consultez CScrollView::SetScrollSizes
.
Vous spécifiez les quantités à faire défiler horizontalement et verticalement dans les unités logiques. Par défaut, si l’utilisateur clique sur un arbre de barre de défilement en dehors de la zone de défilement, CScrollView
fait défiler une « page ». Si l’utilisateur clique sur une flèche de défilement à l’une ou l’autre extrémité d’une barre de défilement, CScrollView
fait défiler une « ligne ». Par défaut, une page est de 1/10 de la taille totale de la vue ; une ligne est de 1/10 de la taille de la page. Remplacez ces valeurs par défaut en passant des tailles personnalisées dans la SetScrollSizes
fonction membre. Par exemple, vous pouvez définir la taille horizontale sur une fraction de la largeur de la taille totale et la taille verticale sur la hauteur d’une ligne dans la police actuelle.
Au lieu de faire défiler, CScrollView
vous pouvez mettre automatiquement à l’échelle la vue vers la taille actuelle de la fenêtre. Dans ce mode, la vue n’a pas de barres de défilement et la vue logique est étirée ou réduite pour s’adapter exactement à la zone cliente de la fenêtre. Pour utiliser cette fonctionnalité d’ajustement à l’échelle, appelez CScrollView::SetScaleToFitSize
. (Appelez ou SetScaleToFitSize
SetScrollSizes
, mais pas les deux.)
Avant que la OnDraw
fonction membre de votre classe de vue dérivée soit appelée, CScrollView
ajuste automatiquement l’origine de la fenêtre d’affichage pour l’objet CPaintDC
de contexte d’appareil auquel elle passe OnDraw
.
Pour ajuster l’origine de la fenêtre de défilement à l’origine de la fenêtre de défilement, CScrollView
remplace CView::OnPrepareDC
. Cet ajustement est automatique pour le contexte de l’appareil CPaintDC
qui CScrollView
passe, OnDraw
mais vous devez vous appeler CScrollView::OnPrepareDC
pour tous les autres contextes d’appareil que vous utilisez, tels qu’un CClientDC
. Vous pouvez remplacer CScrollView::OnPrepareDC
pour définir le stylet, la couleur d’arrière-plan et d’autres attributs de dessin, mais appeler la classe de base pour effectuer une mise à l’échelle.
Les barres de défilement peuvent apparaître à trois endroits par rapport à une vue, comme indiqué dans les cas suivants :
Les barres de défilement de style fenêtre standard peuvent être définies pour l’affichage à l’aide des
WS_HSCROLL
styles Windows etWS_VSCROLL
des styles Windows.Les contrôles de barre de défilement peuvent également être ajoutés au cadre contenant l’affichage, auquel cas l’infrastructure transfère et
WM_VSCROLL
transmet lesWM_HSCROLL
messages de la fenêtre frame à l’affichage actif.L’infrastructure transfère également les messages de défilement d’un
CSplitterWnd
contrôle de fractionnement vers le volet de fractionnement actif (une vue). Lorsqu’il est placé dans uneCSplitterWnd
barre de défilement partagée, unCScrollView
objet utilise les barres de défilement partagées plutôt que de créer ses propres barres.
Pour plus d’informations sur l’utilisation, consultez l’architecture document/vue et les classes de vue dérivées disponibles dans MFC.CScrollView
Hiérarchie d'héritage
CScrollView
Spécifications
En-tête : afxwin.h
CScrollView::CheckScrollBars
Appelez cette fonction membre pour déterminer si la vue de défilement comporte des barres horizontales et verticales.
void CheckScrollBars(
BOOL& bHasHorzBar,
BOOL& bHasVertBar) const;
Paramètres
bHasHorzBar
Indique que l’application a une barre de défilement horizontale.
bHasVertBar
Indique que l’application a une barre de défilement verticale.
CScrollView::CScrollView
Construit un objet CScrollView
.
CScrollView();
Notes
Vous devez appeler soit SetScrollSizes
avant SetScaleToFitSize
que la vue de défilement soit utilisable.
CScrollView::FillOutsideRect
Appelez FillOutsideRect
pour remplir la zone de la vue qui s’affiche en dehors de la zone de défilement.
void FillOutsideRect(
CDC* pDC,
CBrush* pBrush);
Paramètres
pDC
Contexte d’appareil dans lequel le remplissage doit être effectué.
pBrush
Pinceau avec lequel la zone doit être remplie.
Notes
Utilisez FillOutsideRect
la fonction de gestionnaire de votre vue de OnEraseBkgnd
défilement pour empêcher une réinitialisation excessive de l’arrière-plan.
Exemple
BOOL CMyScrollView::OnEraseBkgnd(CDC* pDC)
{
CBrush br(GetSysColor(COLOR_WINDOW));
FillOutsideRect(pDC, &br);
return TRUE; // Erased
}
CScrollView::GetDeviceScrollPosition
Appelez GetDeviceScrollPosition
lorsque vous avez besoin des positions horizontales et verticales actuelles des zones de défilement dans les barres de défilement.
CPoint GetDeviceScrollPosition() const;
Valeur de retour
Positions horizontales et verticales (en unités d’appareil) des zones de défilement sous forme d’objet CPoint
.
Notes
Cette paire de coordonnées correspond à l’emplacement dans le document vers lequel le coin supérieur gauche de la vue a été fait défiler. Cela est utile pour désactiver les positions de l’appareil à la souris pour afficher les positions de l’appareil à défilement.
GetDeviceScrollPosition
retourne des valeurs dans les unités d’appareil. Si vous souhaitez des unités logiques, utilisez GetScrollPosition
plutôt.
CScrollView::GetDeviceScrollSizes
GetDeviceScrollSizes
obtient le mode de mappage actuel, la taille totale et les tailles de ligne et de page de l’affichage défilant.
void GetDeviceScrollSizes(
int& nMapMode,
SIZE& sizeTotal,
SIZE& sizePage,
SIZE& sizeLine) const;
Paramètres
nMapMode
Retourne le mode de mappage actuel pour cette vue. Pour obtenir la liste des valeurs possibles, consultez SetScrollSizes
.
sizeTotal
Retourne la taille totale actuelle de la vue de défilement dans les unités d’appareil.
sizePage
Retourne les quantités horizontales et verticales actuelles à faire défiler dans chaque direction en réponse à un clic de souris dans un arbre de barre de défilement. Le cx
membre contient la quantité horizontale. Le cy
membre contient la quantité verticale.
sizeLine
Retourne les quantités horizontales et verticales actuelles à faire défiler dans chaque direction en réponse à un clic de souris dans une flèche de défilement. Le cx
membre contient la quantité horizontale. Le cy
membre contient la quantité verticale.
Notes
Les tailles sont en unités d’appareil. Cette fonction membre est rarement appelée.
CScrollView::GetScrollPosition
Appelez GetScrollPosition
lorsque vous avez besoin des positions horizontales et verticales actuelles des zones de défilement dans les barres de défilement.
CPoint GetScrollPosition() const;
Valeur de retour
Positions horizontales et verticales (en unités logiques) des zones de défilement sous forme d’objet CPoint
.
Notes
Cette paire de coordonnées correspond à l’emplacement dans le document vers lequel le coin supérieur gauche de la vue a été fait défiler.
GetScrollPosition
retourne des valeurs en unités logiques. Si vous souhaitez des unités d’appareil, utilisez GetDeviceScrollPosition
plutôt.
CScrollView::GetTotalSize
Appelez GetTotalSize
pour récupérer les tailles horizontales et verticales actuelles de l’affichage de défilement.
CSize GetTotalSize() const;
Valeur de retour
Taille totale de la vue de défilement en unités logiques. La taille horizontale se trouve dans le cx
membre de la CSize
valeur de retour. La taille verticale se trouve dans le cy
membre.
CScrollView::ResizeParentToFit
Appelez ResizeParentToFit
pour laisser la taille de votre vue dicter la taille de sa fenêtre frame.
void ResizeParentToFit(BOOL bShrinkOnly = TRUE);
Paramètres
bShrinkOnly
Type de redimensionnement à effectuer. La valeur par défaut, réduit TRUE
la fenêtre frame si nécessaire. Les barres de défilement apparaissent toujours pour les grandes vues ou les petites fenêtres frame. Une valeur des causes de FALSE
la vue est toujours de redimensionner la fenêtre de cadre exactement. Cela peut être un peu dangereux, car la fenêtre de cadre peut être trop grande pour s’adapter à l’intérieur de la fenêtre de cadre MDI (Multiple Document Interface) ou de l’écran.
Notes
Il est recommandé uniquement pour les vues dans les fenêtres d’images enfants MDI. Utilisez ResizeParentToFit
la OnInitialUpdate
fonction de gestionnaire de votre classe dérivée CScrollView
. Pour obtenir un exemple de cette fonction membre, consultez CScrollView::SetScrollSizes
.
ResizeParentToFit
suppose que la taille de la fenêtre d’affichage a été définie. Si la taille de la fenêtre d’affichage n’a pas été définie quand ResizeParentToFit
elle est appelée, vous obtiendrez une assertion. Pour vous assurer que cela ne se produit pas, effectuez l’appel suivant avant d’appeler ResizeParentToFit
:
GetParentFrame()->RecalcLayout();
CScrollView::ScrollToPosition
Appelez ScrollToPosition
pour faire défiler jusqu’à un point donné dans la vue.
void ScrollToPosition(POINT pt);
Paramètres
pt
Point à faire défiler vers, en unités logiques. Le x
membre doit être une valeur positive (supérieure ou égale à 0, jusqu’à la taille totale de la vue). Il en va de même pour le y
membre lorsque le mode de mappage est MM_TEXT
. Le y
membre est négatif dans les modes de mappage autres que MM_TEXT
.
Notes
L’affichage est fait défiler pour que ce point se trouve en haut à gauche de la fenêtre. Cette fonction membre ne doit pas être appelée si la vue est mise à l’échelle pour s’adapter.
CScrollView::SetScaleToFitSize
Appelez SetScaleToFitSize
lorsque vous souhaitez mettre automatiquement à l’échelle la taille de la fenêtre actuelle pour mettre à l’échelle la taille de la fenêtre actuelle.
void SetScaleToFitSize(SIZE sizeTotal);
Paramètres
sizeTotal
Tailles horizontales et verticales auxquelles la vue doit être mise à l’échelle. La taille de la vue de défilement est mesurée en unités logiques. La taille horizontale est contenue dans le cx
membre. La taille verticale est contenue dans le cy
membre. Les deux cx
et cy
doivent être supérieures ou égales à 0.
Notes
Avec les barres de défilement, seule une partie de la vue logique peut être visible à tout moment. Toutefois, avec la fonctionnalité d’ajustement à l’échelle, la vue n’a pas de barres de défilement et la vue logique est étirée ou réduite pour s’adapter exactement à la zone cliente de la fenêtre. Lorsque la fenêtre est redimensionnée, la vue dessine ses données à une nouvelle échelle en fonction de la taille de la fenêtre.
Vous placez généralement l’appel dans SetScaleToFitSize
votre remplacement de la fonction membre de OnInitialUpdate
la vue. Si vous ne souhaitez pas mettre à l’échelle automatiquement, appelez plutôt la SetScrollSizes
fonction membre.
SetScaleToFitSize
peut être utilisé pour implémenter une opération « Zoom avant ajustement ». Permet SetScrollSizes
de réinitialiser le défilement.
SetScaleToFitSize
suppose que la taille de la fenêtre d’affichage a été définie. Si la taille de la fenêtre d’affichage n’a pas été définie quand SetScaleToFitSize
elle est appelée, vous obtiendrez une assertion. Pour vous assurer que cela ne se produit pas, effectuez l’appel suivant avant d’appeler SetScaleToFitSize
:
GetParentFrame()->RecalcLayout();
CScrollView::SetScrollSizes
Appelez SetScrollSizes
quand la vue est sur le point d’être mise à jour.
void SetScrollSizes(
int nMapMode,
SIZE sizeTotal,
const SIZE& sizePage = sizeDefault,
const SIZE& sizeLine = sizeDefault);
Paramètres
nMapMode
Mode de mappage à définir pour cette vue. Valeurs possibles :
Mode de mappage | Unité logique | L’axe y positif s’étend... |
---|---|---|
MM_TEXT |
1 pixel | Inférieur |
MM_HIMETRIC |
0,01 mm | Ascendant |
MM_TWIPS |
1/1440 dans | Ascendant |
MM_HIENGLISH |
0.001 dans | Ascendant |
MM_LOMETRIC |
0,1 mm | Ascendant |
MM_LOENGLISH |
0.01 dans | Ascendant |
Tous ces modes sont définis par Windows. Deux modes de mappage standard et MM_ISOTROPIC
MM_ANISOTROPIC
, ne sont pas utilisés pour CScrollView
. La bibliothèque de classes fournit la fonction membre pour mettre à l’échelle SetScaleToFitSize
la vue en taille de fenêtre. La colonne 3 du tableau ci-dessus décrit l’orientation des coordonnées.
sizeTotal
Taille totale de l’affichage de défilement. Le cx
membre contient l’étendue horizontale. Le cy
membre contient l’étendue verticale. Les tailles sont en unités logiques. Les deux cx
et cy
doivent être supérieures ou égales à 0.
sizePage
La quantité horizontale et verticale à faire défiler dans chaque direction en réponse à un clic de souris dans un arbre de barre de défilement. Le cx
membre contient la quantité horizontale. Le cy
membre contient la quantité verticale.
sizeLine
La valeur horizontale et verticale doit faire défiler chaque direction en réponse à un clic de souris dans une flèche de défilement. Le cx
membre contient la quantité horizontale. Le cy
membre contient la quantité verticale.
Notes
Appelez-le dans votre remplacement de la OnUpdate
fonction membre pour ajuster les caractéristiques de défilement lorsque, par exemple, le document est initialement affiché ou lorsqu’il change de taille.
Vous obtiendrez généralement des informations de taille à partir du document associé de la vue en appelant une fonction membre de document, peut-être appelée GetMyDocSize
, que vous fournissez avec votre classe de document dérivée. Le code suivant montre cette approche :
CMyScrollDoc* pMyDoc = (CMyScrollDoc*)GetDocument();
SetScrollSizes(nMapMode, pMyDoc->GetMyDocSize());
Vous devrez peut-être parfois définir une taille fixe, comme dans le code suivant :
SetScrollSizes(nMapMode, CSize(100, 100));
Vous devez définir le mode de mappage sur l’un des modes de mappage Windows à l’exception MM_ISOTROPIC
ou MM_ANISOTROPIC
. Si vous souhaitez utiliser un mode de mappage non contraint, appelez la SetScaleToFitSize
fonction membre au lieu de SetScrollSizes
.
Exemple
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());
}
Voir aussi
Exemple MFC DIBLOOK
CView
Classe
Graphique hiérarchique
CSplitterWnd
Classe