Question

Je recherche une très bonne classe de resizer pour les dialogues, qui permet d’élargir et de réduire les éléments individuels en fonction des besoins lorsque l’écran est redimensionné. Stephan Keil en a un bon (DlgResizeHelper) qui redimensionne le tout selon un ratio défini, mais je cherche quelque chose de plus intelligent.

Par exemple:

  • Les icônes ne doivent pas être redimensionnées

  • Les zones de texte sur une ligne ne doivent pas être étirées verticalement

  • Les boutons devraient probablement rester de la même taille

En gros, je cherche quelque chose à regarder dans tous les contrôles, comprendre qu'un champ de texte statique est lié à un contrôle suivant / inférieur, d'ancrer les deux ensemble et de redimensionner les grands contrôles de manière "intelligente". donc ça a l'air bien.

Existe-t-il de tels cadres? Je travaille sur un projet, mais quelque chose de prêt à l'emploi serait probablement mieux.

SUIVI: Je regarde les solutions suggérées. Beaucoup d'entre eux nécessitent que vous alliez ancrer chaque contrôle de la boîte de dialogue. Je cherche quelque chose d'intelligent qui déterminera ce que devraient être les ancres, avec la possibilité d'ancrer manuellement si les suppositions sont fausses. On dirait que cela devrait être possible - la plupart des humains conviendraient qu'un champ de texte statique à côté d'un champ d'édition devrait être ancré ensemble. Je suppose que je suis presque à la recherche d’une petite IA ici:)

Était-ce utile?

La solution

Vous pouvez utiliser wxWidgets. Il remplace complètement MFC, est multi-plateforme et vous offre un mécanisme de dialogue basé sur la disposition.

Autres conseils

J'utilise ResizableLib (fait également PropertySheets et Pages) hors codeproject, IIRC. Vous définissez des points d'ancrage qui déterminent le redimensionnement ou le déplacement de la boîte de dialogue et des commandes à mesure que la boîte de dialogue se déplace.

Vous pouvez définir jusqu'à 2 ancres par contrôle (gauche, droite) pour pouvoir les déplacer au fur et à mesure que la boîte de dialogue se déplace ou les redimensionner au fur et à mesure de leur déplacement. C'est très facile à comprendre, si difficile à comprendre parfaitement:)

J'en ai essayé beaucoup et je me suis finalement décidé sur http: //www.codeproject. com / KB / dialog / layoutmgr.aspx . Cela ne fait pas la mise en page "intelligente" que vous suggérez cependant. Je ne l'ai jamais vu dans aucune bibliothèque, ni plate-forme. Je ne vois pas comment cela fonctionnerait sans beaucoup de magie cachée qu'il faudrait de toute façon remplacer la moitié du temps.

La bibliothèque Ultimate Toolbox MFC ( ici sur CodeProject) inclut un < a href = "http://www.codeproject.com/KB/MFC/UltimateToolbox_Layout.aspx" rel = "nofollow noreferrer"> gestionnaire de disposition . Je ne l'ai pas utilisé moi-même, mais on dirait que c'est ce que vous voulez.

Vous pouvez consulter interface graphique professionnelle pour utiliser leur bibliothèque de classes afin de redimensionner nos contrôles de boîte de dialogue. Je pense que cela fait partie de leur version gratuite.

Nous utilisons la classe CResize de CodeGuru pour redimensionner automatiquement tous les contrôles. Vous indiquez comment vous souhaitez redimensionner chaque contrôle et le travail est fait pour vous.

Le paradigme de redimensionnement consiste à spécifier le degré de déplacement de chaque côté d’un contrôle lors du redimensionnement de la boîte de dialogue.

SetResize(IDC_EDIT1, 0,   0,   0.5, 1);
SetResize(IDC_EDIT2, 0.5, 0,   1,   1);

Très pratique lorsque vous avez un grand nombre de commandes de dialogue.

code source

Ceci est une solution gratuite également de CodeProject
http://www.codeproject.com/KB/dialog/dlgresizearticle.aspx
C’est juste un ensemble de macros simples qui positionnent les contrôles lorsque la boîte de dialogue est redimensionnée.

Modifier - en suivant les commentaires sur les PO. Je ne connais aucun support de calibreur général comme QT / WX pour MFC, il ne semble pas non plus être présent dans les nouveaux frameworks tels que Winforms.
Il s’agit de QT / WX car il est nécessaire pour la multiplateforme où les widgets peuvent avoir une taille différente, ce qui explique le manque de MS dans celui-ci. Mais il est également vital pour les ports multilingues, par exemple. où l'allemand pour annuler comporte 30 caractères.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top