Partager via


Disposition dynamique

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 ancrer des boutons au bas d'une boîte de dialogue sur le bord inférieur afin qu'ils restent toujours affichés à cet endroit. Vous pouvez également créer des contrôles, tels que des zones de liste, des zones d’édition et des champs de texte, qui se développent quand l’utilisateur développe la boîte de dialogue.

Spécification des paramètres de disposition dynamique pour une boîte de dialogue MFC

Quand l'utilisateur redimensionne une boîte de dialogue, les contrôles qui y figurent peuvent être redimensionnés ou déplacés dans les directions X et Y. Le changement de la taille ou de l'emplacement d'un contrôle quand l'utilisateur redimensionne une boîte de dialogue est appelé disposition dynamique. Par exemple, voici une boîte de dialogue initiale, avant un redimensionnement :

Dialog before being resized.

Après le redimensionnement de la boîte de dialogue, nous voyons que la zone de liste a été agrandie pour afficher davantage d'éléments et que les boutons ont été déplacés vers le coin inférieur droit :

Dialog after being resized.

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

L'éditeur de ressources vous permet de définir le comportement de disposition dynamique pour une boîte de dialogue sans avoir à écrire de code.

Pour définir les propriétés de disposition dynamique dans l'éditeur de ressources

  1. Dans un projet MFC ouvert, ouvrez la boîte de dialogue à configurer dans l'éditeur de boîtes de dialogue.

    Open the dialog in the resource editor.

  2. 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. Le type Horizontal correspond à la dimension X et le type Vertical, à la dimension Y.

  3. 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éplacement X et Y en déplacement sous Type de déplacement, définissez 100 % pour que le contrôle reste à une distance fixe du coin inférieur droit.

    Dynamic Layout.

  4. Supposons que vous voulez aussi créer un contrôle qui s'agrandit à mesure que la boîte de dialogue elle-même est agrandie. En règle générale, un utilisateur développe une boîte de dialogue pour développer une zone d’édition multiligne et augmenter la taille de la zone de texte, ou il développe un contrôle de liste pour afficher davantage 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.

    Dynamic Layout Settings.

  5. Faites des essais avec d'autres valeurs qui pourraient convenir 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 dynamique par programme

La procédure précédente permet de spécifier les propriétés de disposition dynamique d'une boîte de dialogue au moment du design, mais si vous souhaitez contrôler la disposition dynamique au moment de l'exécution, définissez les propriétés de disposition dynamique par programme.

Pour définir les propriétés de disposition dynamique par programme

  1. Recherchez ou ajoutez un emplacement dans le code d'implémentation de votre classe de boîte de dialogue où vous souhaitez spécifier la disposition dynamique de la boîte de dialogue. Par exemple, vous pouvez ajouter la méthode AdjustLayout dans votre boîte de dialogue et l'appeler à chaque endroit où la disposition doit être modifiée. Vous pouvez l'appeler d'abord à partir du constructeur ou après avoir apporté les modifications à la boîte de dialogue.

  2. Pour la boîte de dialogue, appelez GetDynamicLayout, une méthode de la CWnd classe. GetDynamicLayout retourne un pointeur vers un objet CMFCDynamicLayout .

    CMFCDynamicLayout* dynamicLayout = pDialog->GetDynamicLayout();
    
  3. 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 Move Paramètres 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 ensuite le pourcentage du déplacement horizontal et/ou du déplacement vertical. Toutes ces méthodes statiques retournent un nouvel objet MoveSettings que vous pouvez ensuite utiliser pour spécifier le comportement de déplacement d'un contrôle.

    N'oubliez pas que la valeur 100 signifie que le contrôle sera déplacé autant que nécessaire par rapport à la taille modifiée de la boîte de dialogue. L'un des bords du contrôle restera donc à une distance fixe de la nouvelle bordure.

    MoveSettings moveSettings = CMFCDynamicLayout::MoveHorizontal(100);
    
  4. Faites la même chose pour le comportement de taille, qui utilise le type Size Paramètres. Par exemple, pour spécifier qu'un contrôle ne change pas de taille quand la boîte de dialogue est redimensionnée, utilisez le code suivant :

    SizeSettings sizeSettings = CMFCDynamicLayout::SizeNone();
    
  5. Ajoutez le contrôle au gestionnaire de disposition dynamique à l’aide de la méthode CMFCDynamicLayout ::AddItem . Il existe deux surcharges correspondant aux différentes manières de spécifier le contrôle souhaité. L'une prend le handle de fenêtre (HWND) du contrôle et l'autre prend l'ID du contrôle.

    dynamicLayout->AddItem(hWndControl,
    moveSettings,
    sizeSettings);
    
  6. Répétez l'opération pour chaque contrôle devant être déplacé ou redimensionné.

  7. 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.

  8. Pour activer la disposition de boîte de dialogue, appelez la méthode CWnd ::EnableDynamicLayout .

    pDialog->EnableDynamicLayout(TRUE);
    
  9. 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.

  10. 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 programme à partir d'un fichier de ressources

  1. 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