Cette note décrit la classe MFC CSplitterWnd , qui est utilisée pour fournir des fractionnements de fenêtre et de gérer le redimensionnement des autres fenêtres volet.
&Notenbsp ; Veuillez vous assurer de lire 20 de Note technique concernant l'utilisation de l'ID et les plages d'ID valides.
Styles de diviseur
Un CSplitterWnd prend en charge deux différents styles de partage windows.
Dans « répartiteurs statiques », les volets sont créés lorsque la fenêtre fractionnée est créée, et l'ordre et le nombre de vitres ne changent jamais. Séparateur barres sont utilisées pour redimensionner les volets différents, et les différents volets sont habituellement des classes de point de vue différent. L'éditeur de graphiques de Visual C++ et le gestionnaire de fichiers Windows sont des exemples de programmes qui utilisent ce style de séparateur. Boîtes de séparateur ne sont pas utilisés par ce style de diviseur.
Dans « Dynamiques répartiteurs, » volets supplémentaires sont créés et détruits comme les vues nouvelles d'utilisateur fendus et ONU-fentes. Ce séparateur commence avec une vue unique, et boîtes de séparateur sont fournis pour lancer le partage. Si la vue est divisée en un sens, un objet d'affichage supplémentaire est créé dynamiquement pour représenter le nouveau volet. Si l'affichage est divisé dans deux directions (possible avec l'interface de clavier), trois nouveaux points de vue sont créés pour représenter les trois volets de nouveau. Lorsque la scission est active, la zone séparateur est dessinée comme une barre de fractionnement entre les vitres. Affichage supplémentaire, les objets sont détruits lorsque l'utilisateur supprime une scission, mais la vue originale (ligne 0, colonne 0) reste jusqu'à ce que la fenêtre fractionnée en lui-même est détruite. Microsoft Excel ou Microsoft Word sont des exemples du style séparateur dynamique.
Lors de la création ou l'autre type de fenêtre fractionnée, vous devez spécifier le nombre maximal de lignes et de colonnes qui gérera le séparateur. Pour un séparateur statique, les volets doivent être créées pour remplir toutes les lignes et les colonnes. Pour un séparateur dynamique, le premier volet est créé automatiquement lors de la création du CSplitterWnd.
Le nombre maximal de volets, que vous pouvez spécifier pour SEPARATEURS statiques est 16 lignes par 16 colonnes. Les configurations recommandées sont:
Le nombre maximum de vitres, que vous pouvez spécifier pour séparateurs dynamiques est de 2 lignes par 2 colonnes. Les configurations recommandées sont:
Exemples de diviseur
Beaucoup des exemples de programmes MFC utilisent les fenêtres directement ou indirectement. Étape 4 du tutoriel MFC GRIFFONNAGE ajoute une fenêtre fractionnée dynamique de diviser la CScribView en plusieurs volets. Comme le montre cette étape, l'ajout de qu'une nouvelle fenêtre d'image splitter est très facile avec la fonctionnalité ajouter une classe de ClassWizard. Cet exemple est une fenêtre fractionnée dynamique par défaut.
L'exemple MFC général VIEWEX illustre plusieurs utilisations de répartiteurs statiques, y compris la façon de placer un séparateur dans un séparateur.
ClassWizard créera une nouvelle classe interface multidocument (MDI) enfant cadre fenêtre qui contient une fenêtre fractionnée. Veuillez vous référer à Splitter Windows dans le Guide du programmeur Visual C++.
Terminologie utilisée par la mise en œuvre
Terminologie des parties d'un CSplitterWnd et objets liés.
CSplitterWnd:
C'est une fenêtre qui fournit des contrôles de volet de fractionnement et des barres de défilement sont partagés entre tous les volets sur une ligne ou une colonne. Lignes et colonnes sont spécifiés avec des nombres de base zéro [le premier volet est rangée = 0 et la colonne = 0]
Volet:
U&ne fenêtre d'application spécifique qui est gérée par un CSplitterWnd. Un volet est habituellement un CView-objet dérivé, mais en fait peut être tout objet CWnd a la fenêtre enfant approprié ID.nbsp;
Pour cela, transmettez simplement le RU&NTIME_CLASS de votre CWnd classe dérivée comme vous le feriez si vous utilisiez un CView dérivé class.nbsp ; Votre classe doit utiliser DECLARE_DYNCREATE et IMPLEMENT_DYNCREATE --le framework utilise création dynamique lors de l'exécution. Bien qu'il y a beaucoup de code qui est CView spécifique dans CSplitterWnd, CObject::IsKindOf est toujours utilisé avant que ces actions sont exécutées. Certes, il est plus facile d'utiliser CSplitterWnd avec les classes de CView dérivées de classes dérivées de CWnd.
Barre de fractionnement:
Un contrôle qui est placé entre les lignes et les colonnes de vitres. Il peut être utilisé pour ajuster la taille des lignes ou des colonnes de vitres.
Splitter Box:
Un petit contrôle en haut à gauche les barres de défilement horizontale dans une dynamique CSplitterWndou les barres de défilement verticale. Utilisé pour créer de nouvelles lignes ou colonnes de vitres.
Intersection de diviseur:
L'intersection d'une barre de fractionnement verticale et une barre de fractionnement horizontale. Peut faire glisser pour ajuster la taille d'une ligne et une colonne de volets simultanément.
Les barres de défilement partagé
La classe CSplitterWnd prend également en charge les barres de défilement partagée. Ces contrôles de barres de défilement sont des enfants de la CSplitterWnd et sont partagés avec les différents volets de la fendeuse.
Par exemple, dans une fenêtre de colonne de 1 ligne x 2, vous pouvez spécifier WS_VSCROLL lors de la création du CSplitterWnd. Un contrôle de barre de défilement spécial sera créé qui est partagée entre les deux vitres.
[  ; ][ ][^]
[pane00][pane01][|]
[ ][ ][v]
Lorsque l'utilisateur déplace la barre de défilement, WM_VSCROLL messages seront envoyés aux deux points de vue. Lorsque le point de vue la position de barre de défilement, la barre de défilement partagé sera définie.
Notez que les barres de défilement partagé sont plus utiles avec les fractionnements dynamiques ou statiques, dédoublement des objets dans le même sens. Si vous mélangez des vues de différents types dans un séparateur, puis vous devrez écrire un code spécial pour coordonner leurs positions de défilement. Tout CView-classe dérivée qui utilise la barre de défilement de CWnd API va déléguer à la barre de défilement partagée si elle existe. La mise en œuvre CScrollView est un exemple d'une classe CView que prend en charge partagée des barres de défilement. Non -CView dérivées des classes, les classes qui s'appuient sur les barres de défilement sous ou des classes qui utilisent Windows standard implémentations (par exemple, CEditView) ne fonctionnera pas avec la fonctionnalité de barre de défilement partagée de CSplitterWnd.
Tailles minimales
Pour chaque ligne il y a une hauteur de ligne minimale, et de même pour chaque colonne il y a une largeur minimale de colonne. Ce minimum est utilisé pour décider si le volet est à petit être montré en détail complète.
Pour une fenêtre fractionnée statique, la largeur de colonne et la hauteur de ligne minimum initial est de 0. Pour une fenêtre fractionnée dynamique, la largeur de colonne et la hauteur de ligne minimum initial sont définies par le paramètre sizeMin à la fonction CSplitterWnd::Create.
Ces tailles minimums peuvent être modifiés avec les SetRowInfo et les SetColumnInfo API.
Réelle par rapport à la taille idéale
La disposition des volets dans la fenêtre fractionnée dépend de la taille du cadre contenant (qui à son tour redimensionne la CSplitterWnd. CSplitterWnd repositionne et redimensionne les volets afin qu'ils s'insèrent comme idéalement possible).
Les tailles de largeur par ligne colonne et la hauteur, définie par l'utilisateur, soit par la CSplitterWnd API, représentent la taille idéale. La taille réelle peut être plus petite que la taille idéale (s'il n'y a pas assez de place pour faire de ce volet de la taille idéale) ou plus grand que la taille idéale (si ce volet doit être fait plu pour remplir l'espace de gauche sur la droite ou le bas de la fenêtre fractionnée).
Interface protégé
Ce qui suit décrit certaines de l'overridables de mise en œuvre de la fenêtre séparateur qui peut être utilisé par des utilisateurs avancés de CSplitterWnd pour personnaliser les fonctionnalités et l'interface utilisateur de cette classe. Ces API est officiellement sans papiers et est susceptibles de changer dans les futures versions de MFC. Veuillez vous référer au code source pour plus de détails sur ces API de mise en oeuvre mise en oeuvre.
Les barres de fractionnement, les boîtes et les trackers de dessin:
enum ESplitType nbsp ; {splitBox, splitBar, splitIntersection, splitBorder} ;
OnDrawSplitter void virtuelle (CDC * pDC, ESplitType nType, CRect const & rect) ;
OnInvertTracker void virtuelle (const CRect & rect)
Ces fonction virtuelle peut être substituée pour fournir des images de remplaçant pour les différentes composantes graphiques d'une fenêtre fractionnée. Les images par défaut sont similaire à la fendeuse dans Microsoft Works pour Windows : seulement les intersections des barres de fractionnement sont mélangées ensemble. L'imagerie est également très différente lorsque le cadre détecte Windows 4.0--afin de correspondre les visuels dans la coquille de ce système d'exploitation (futur).
Création de contrôles et vues:
virtual BOOL CreateScrollBarCtrl(DWORD dwStyle, UINT nID)
Ceci est appelé pour créer un contrôle de barre de défilement partagée. Elle peut être substituée pour inclure des contrôles supplémentaires à côté d'une barre de défilement. Le comportement par défaut consiste à simplement créer des contrôles de barre de défilement Windows normales.
deleteView void virtuelle (int row, int col) ;
Virtual BOOL SplitRow(int cyBefore) ;
Virtual BOOL SplitColumn(int cxBefore) ;
virtual void DeleteRow (int row) ;
virtual void DeleteColumn (int row)
Ces fonctions sont appelées à mettre en œuvre la logique de la fenêtre fractionnée dynamique (c'est-à-dire, si la fenêtre fractionnée a le style SPLS_DYNAMIC_SPLIT ). Ils peuvent être personnalisés, avec la fonction virtuelle Create, pour mettre en œuvre des séparateurs dynamiques plus avancés.
Voici les commandes de haut niveau qui sont utilisées par la classe CView de déléguer à l'implémentation de CSplitterWnd . Ils sont virtuels, afin que l'implémentation de la classe CView standard ne nécessitera pas la mise en œuvre de CSplitterWnd ensemble lié à. Pour les applications qui utilisent la classe CView mais pas CSplitterWnd, la mise en œuvre de CSplitterWnd ne sera pas lié à l'application.
virtual BOOL CanActivateNext(BOOL bPrev = FALSE);
Vérifie si la commande « Prochaine volet » ou « précédent » est actuellement possible.
activateNext void virtuelle (BOOL bPrev = FALSE);
Exécute la commande « Prochaine volet » ou « précédent ».
virtual BOOL DoKeyboardSplit();
Effectue le clavier split commande, généralement « Split Window ».
&Notes techniques par le numéro |nbsp ; Notes techniques par catégorie