Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Avec MFC dans Visual Studio 2015, vous pouvez créer des boîtes de dialogue que l’utilisateur peut redimensionner et contrôler la façon dont la disposition s’ajuste à la modification de la taille. Par exemple, vous pouvez attacher des boutons au bas d’une boîte de dialogue au bord inférieur afin qu’ils restent toujours au bas. Vous pouvez également configurer certains contrôles tels que les zones de liste, les zones d’édition et les champs de texte à développer à mesure que l’utilisateur développe la boîte de dialogue.
Spécification des paramètres de disposition dynamique pour une boîte de dialogue MFC
Lorsque l’utilisateur redimensionne une boîte de dialogue, les contrôles de la boîte de dialogue peuvent redimensionner ou se déplacer dans les directions X et Y. La modification de la taille ou de la position d’un contrôle lorsque l’utilisateur redimensionne une boîte de dialogue est appelée disposition dynamique. Par exemple, la boîte de dialogue suivante est une boîte de dialogue avant d’être redimensionnée :
Après avoir été redimensionnée, la zone de zone de liste est augmentée pour afficher plus d’éléments, et les boutons sont déplacés avec le coin inférieur droit :
Vous pouvez contrôler la disposition dynamique en spécifiant les détails de chaque contrôle dans l’Éditeur de ressources de l’IDE, ou vous pouvez le faire par programmation en accédant à l’objet CMFCDynamicLayout pour un contrôle particulier et en définissant les propriétés.
Définition des propriétés de disposition dynamique dans l’éditeur de ressources
Vous pouvez définir le comportement de disposition dynamique d’une boîte de dialogue sans avoir à écrire de code à l’aide de l’éditeur de ressources.
Pour définir des propriétés de disposition dynamique dans l’éditeur de ressources
Avec un projet MFC ouvert, ouvrez la boîte de dialogue avec laquelle vous souhaitez travailler dans l’éditeur de dialogue.
Sélectionnez un contrôle et, dans la fenêtre Propriétés (en mode Classe), définissez ses propriétés de disposition dynamique. La section Disposition dynamique de la fenêtre Propriétés contient les propriétés Type de déplacement, Type de dimensionnement et, en fonction des valeurs sélectionnées pour ces propriétés, des propriétés spécifiques qui définissent la quantité de contrôles qui déplacent ou modifient la taille. Le type de déplacement détermine comment un contrôle est déplacé à mesure que la taille de la boîte de dialogue est modifiée ; Le type de dimensionnement détermine comment un contrôle est redimensionné à mesure que la taille de la boîte de dialogue est modifiée. Le déplacement du type et du dimensionnement peut être Horizontal, Vertical, Both ou None en fonction des dimensions que vous souhaitez modifier dynamiquement. Horizontal est la dimension X ; Vertical est la direction Y.
Si vous souhaitez qu’un contrôle tel qu’un bouton soit à une taille fixe et reste en place en bas à droite, comme c’est le cas pour les boutons OK ou Annuler , définissez le type de dimensionnement sur None et définissez le type de déplacement sur les deux. Pour les valeurs Déplacer X et Y endéplacement sous Type de déplacement, définissez 100% pour que le contrôle reste à une distance fixe du coin inférieur droit.
Supposons que vous disposez également d’un contrôle que vous souhaitez développer à mesure que la boîte de dialogue se développe. En règle générale, un utilisateur peut développer une boîte de dialogue pour développer une zone d’édition multiligne pour augmenter la taille de la zone de texte ou développer un contrôle de liste pour afficher plus de données. Pour ce cas, définissez le type de dimensionnement sur Les deux et définissez le type de déplacement sur aucun. Ensuite, définissez les valeurs Sizing X et Y de dimensionnement sur 100.
Expérimentez avec d’autres valeurs qui peuvent être logiques pour vos contrôles. Une boîte de dialogue avec une zone de texte à une ligne peut avoir le type de dimensionnement défini sur Horizontal uniquement, par exemple.
Définition des propriétés de disposition dynamiques par programmation
La procédure précédente est utile pour spécifier des propriétés de disposition dynamique pour un dialogue au moment du design, mais si vous souhaitez contrôler la disposition dynamique au moment de l’exécution, vous pouvez définir des propriétés de disposition dynamiques par programmation.
Pour définir des propriétés de disposition dynamiques par programmation
Recherchez ou créez un emplacement dans le code d’implémentation de votre classe de dialogue dans lequel vous souhaitez spécifier la disposition dynamique du dialogue. Par exemple, vous pouvez ajouter une méthode telle que
AdjustLayoutdans votre boîte de dialogue et l’appeler à partir d’emplacements où la disposition doit être modifiée. Vous pouvez d’abord l’appeler à partir du constructeur ou après avoir apporté des modifications à la boîte de dialogue.Pour la boîte de dialogue, appelez GetDynamicLayout, une méthode de la
CWndclasse.GetDynamicLayoutretourne un pointeur vers unCMFCDynamicLayoutobjet.CMFCDynamicLayout* dynamicLayout = pDialog->GetDynamicLayout();Pour le premier contrôle auquel vous souhaitez ajouter un comportement dynamique, utilisez les méthodes statiques sur la classe de disposition dynamique pour créer la structure MoveSettings qui encode la façon dont le contrôle doit être ajusté. Pour ce faire, vous devez d’abord choisir la méthode statique appropriée : CMFCDynamicLayout ::MoveHorizontal, CMFCDynamicLayout ::MoveVertical, CMFCDynamicLayout ::MoveNone ou CMFCDynamicLayout ::MoveHorizontalAndVertical. Vous passez un pourcentage pour les aspects horizontaux et/ou verticaux du déplacement. Ces méthodes statiques retournent tous un objet MoveSettings nouvellement créé que vous pouvez utiliser pour spécifier le comportement de déplacement d’un contrôle.
N’oubliez pas que 100 signifie déplacer exactement autant que la taille de la boîte de dialogue change, ce qui entraîne le maintien d’une distance fixe par rapport à la nouvelle bordure d’un contrôle.
MoveSettings moveSettings = CMFCDynamicLayout::MoveHorizontal(100);Faites la même chose pour le comportement de taille, qui utilise le type SizeSettings . Par exemple, pour spécifier qu’un contrôle ne change pas de taille lorsque la boîte de dialogue est redimensionnée, utilisez le code suivant :
SizeSettings sizeSettings = CMFCDynamicLayout::SizeNone();Ajoutez le contrôle au gestionnaire de disposition dynamique à l’aide de la méthode CMFCDynamicLayout ::AddItem . Il existe deux surcharges pour différentes façons de spécifier le contrôle souhaité. L’un prend le handle de fenêtre du contrôle (HWND), et l’autre prend l’ID de contrôle.
dynamicLayout->AddItem(hWndControl, moveSettings, sizeSettings);Répétez pour chaque contrôle qui doit être déplacé ou redimensionné.
Si nécessaire, vous pouvez utiliser la méthode CMFCDynamicLayout ::HasItem pour déterminer si un contrôle figure déjà dans la liste des contrôles soumis à des modifications de disposition dynamiques, ou la méthode CMFCDynamicLayout ::IsEmpty pour déterminer s’il existe des contrôles soumis à des modifications.
Pour activer la disposition de boîte de dialogue, appelez la méthode CWnd ::EnableDynamicLayout .
pDialog->EnableDynamicLayout(TRUE);La prochaine fois que l’utilisateur redimensionne la boîte de dialogue, la méthode CMFCDynamicLayout ::Adjust est appelée qui applique réellement les paramètres.
Si vous souhaitez désactiver la disposition dynamique, appelez CWnd ::EnableDynamicLayout avec FALSE comme pour le paramètre bEnabled .
pDialog->EnableDynamicLayout(FALSE);
Pour définir la disposition dynamique par programmation à partir d’un fichier de ressources
Utilisez la méthode CMFCDynamicLayout ::MoveHorizontalAndVertical pour spécifier un nom de ressource dans le fichier de script de ressources approprié (fichier.rc) qui spécifie des informations de disposition dynamique, comme dans l’exemple suivant :
dynamicLayout->LoadResource("IDD_DIALOG1");La ressource nommée doit référencer une boîte de dialogue qui contient des informations de disposition sous la forme d’une entrée de AFX_DIALOG_LAYOUT dans le fichier de ressources, comme dans l’exemple suivant :
///////////////////////////////////////////////////////////////////////////// // // AFX_DIALOG_LAYOUT // IDD_MFCAPPLICATION1_DIALOG AFX_DIALOG_LAYOUT BEGIN 0x0000, 0x6400, 0x0028, 0x643c, 0x0028 END IDD_DIALOG1 AFX_DIALOG_LAYOUT BEGIN 0x0000, 0x6464, 0x0000, 0x6464, 0x0000, 0x0000, 0x6464, 0x0000, 0x0000 END
Voir aussi
CMFCDynamicLayout, classe
Classes de contrôle
Classes de boîte de dialogue
Éditeur de boîtes de dialogue
Disposition de boîte de dialogue dynamique pour MFC dans Visual C++ 2015