2008-09-27 3 views
6

Je suis à la recherche d'une très bonne classe de resizer de dialogue qui va étirer et rétrécir les éléments individuels au fur et à mesure que l'écran est redimensionné. Stephan Keil en a un bon (DlgResizeHelper) qui fondamentalement redimensionne tout par un ratio fixe, mais je cherche quelque chose de plus intelligent.Classe de resizer de dialogue Windows C++

Par exemple:

  • Les icônes ne doivent pas redimensionner

  • zones de texte unique ligne ne doit pas être étirées verticalement

  • boutons devrait probablement rester la même taille

Fondamentalement, je cherche quelque chose t o regardez tous les contrôles, déterminez qu'un champ de texte statique est lié à un contrôle suivant/inférieur et ancrez les deux ensemble, et redimensionnez les contrôles volumineux d'une manière «intelligente» pour que cela soit bien.

Existe-t-il de tels cadres? J'ai travaillé sur un, mais quelque chose de prêt à l'emploi serait probablement mieux. SUIVANT: Je regarde les solutions suggérées. Beaucoup d'entre eux exigent que vous alliez dans une ancre chaque contrôle sur la boîte de dialogue. Je cherche quelque chose d'intelligent qui va comprendre ce que les ancres devraient être, avec la possibilité de mouiller manuellement si les estimations sont fausses. On dirait que cela devrait être possible - la plupart des humains seraient d'accord 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 :)

Répondre

1

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

0

La bibliothèque MFC Ultimate Toolbox (here sur CodeProject) inclut un layout manager. Je ne l'ai pas utilisé moi-même, mais on dirait qu'il fait ce que vous voulez.

0

Ceci est une solution gratuite aussi de CodeProject
http://www.codeproject.com/KB/dialog/dlgresizearticle.aspx
Il est juste un ensemble de macros simples que les contrôles de position comme la boîte de dialogue redimensionne.

Édition - suite aux commentaires OPs. Je ne connais pas de support de calibrage général comme QT/WX pour MFC, il ne semble pas non plus être présent dans les nouveaux frameworks comme Winforms.
Il est dans QT/WX car il est nécessaire pour multiplateforme où les widgets peuvent être d'une taille différente, ce qui explique l'absence de MS. Mais il est également essentiel pour les ports multilingues, par exemple. où l'allemand pour l'annulation est de 30 caractères.

0

Vous pouvez regarder Professional GUI, nous utilisons leur bibliothèque de classes pour redimensionner nos contrôles de dialogue. Je pense que cela fait partie de leur version gratuite.

2

J'utilise ResizableLib (fait aussi PropertySheets et Pages) sur codeproject, IIRC. Vous définissez des points d'ancrage qui déterminent la manière dont le dialogue et les contrôles se redimensionnent ou se déplacent au fur et à mesure que la boîte de dialogue se déplace.

Vous pouvez définir jusqu'à 2 ancres par contrôle, (gauche, droite) afin de pouvoir les déplacer au fur et à mesure du déplacement de la boîte de dialogue ou les redimensionner en cours de déplacement. Il est très facile à comprendre, si difficile à obtenir parfaitement droit :)

0

Nous utilisons la classe CResize de CodeGuru pour redimensionner tous les contrôles automatiquement. Vous dites comment vous voulez que chaque contrôle soit redimensionné et il fait le travail pour vous. Le paradigme de redimensionnement est de spécifier combien chaque côté d'un contrôle se déplacera lorsque le dialogue est redimensionné.

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 contrôles de dialogue.

Source code

2

J'ai essayé beaucoup et finalement réglé sur http://www.codeproject.com/KB/dialog/layoutmgr.aspx. Il ne fait pas la mise en page «intelligente» que vous suggérez si. Je n'ai jamais vu ça dans une bibliothèque, sur une plate-forme quelconque - je ne vois pas comment cela fonctionnerait sans avoir beaucoup de magie sous le capot qui devrait être annulée la moitié du temps quand même.