2008-09-27 7 views
6

Ich bin auf der Suche nach einer wirklich guten Dialog Resizer-Klasse, die einzelne Elemente wie benötigt dehnen und verkleinern, wie der Bildschirm in der Größe geändert wird. Stephan Keil hat einen guten (DlgResizeHelper), der im Grunde alles um ein festgelegtes Verhältnis ändert, aber ich suche etwas Klügeres.Windows C++ Dialog Resizer-Klasse

Zum Beispiel:

  • Icons sollten nicht

  • Einzeilige Textfelder die Größe sollte nicht vertikal gestreckt werden

  • Buttons sollte wahrscheinlich die gleiche Größe

bleiben

Im Grunde bin ich auf der Suche nach etwas t Sehen Sie sich alle Steuerelemente an, stellen Sie fest, dass ein statisches Textfeld mit einem Steuerelement neben/unter ihm verknüpft ist und verankern Sie beide zusammen, und ändern Sie die Größe von großen Steuerelementen so, dass es gut aussieht.

Gibt es solche Frameworks da draußen? Ich habe an einem gearbeitet, aber etwas Ready-made wäre wahrscheinlich besser.

FOLLOW UP: Ich sehe mir die vorgeschlagenen Lösungen an. Bei vielen von ihnen müssen Sie jedes Steuerelement im Dialogfeld verankern. Ich suche nach etwas klugem, das herausfinden wird, was die Anker sein sollten, mit der Fähigkeit, manuell zu verankern, wenn die Vermutungen falsch sind. Scheint so, als ob es möglich sein sollte - die meisten Menschen würden zustimmen, dass ein statisches Textfeld neben einem Bearbeitungsfeld zusammen verankert werden sollte. Schätze, ich bin fast auf der Suche nach ein wenig AI hier :)

Antwort

1

Sie können wxWidgets verwenden. Es ersetzt vollständig MFC, ist plattformübergreifend und bietet Ihnen einen layoutbasierten Dialogmechanismus.

0

Die Ultimate Toolbox MFC-Bibliothek (here auf CodeProject) enthält eine layout manager. Ich habe es nicht selbst benutzt, aber es sieht so aus, als würde es tun, was du willst.

0

Dies ist eine kostenlose Lösung auch von Codeproject
http://www.codeproject.com/KB/dialog/dlgresizearticle.aspx
Es ist nur eine Reihe von einfachen Makros, die Positionssteuerungen wie der Dialog ändert die Größe.

Bearbeiten - Folgen der Kommentare OP. Ich kenne keine allgemeine Sizer-Unterstützung wie QT/WX für MFC, es scheint auch nicht in neuen Frameworks wie Winforms vorhanden zu sein.
Es ist in QT/WX, weil es für Multiplattform erforderlich ist, wo Widgets eine andere Größe haben können, was erklärt, MS fehlt es. Aber es ist auch wichtig für mehrsprachige Ports, z. wo der deutsche für cancel 30 Zeichen lang ist.

0

Sie können Professional GUI betrachten wir verwenden ihre Klassenbibliothek für die Größe unserer Dialog-Steuerelemente. Ich denke, das ist Teil ihrer kostenlosen Version.

2

Ich verwende ResizableLib (tut auch PropertySheets und Pages) aus Codeprojekt, IIRC. Sie legen Ankerpunkte fest, die bestimmen, wie der Dialog und die Steuerelemente ihre Größe ändern oder verschieben, wenn sich der Dialog bewegt.

Sie können bis zu 2 Anker pro Steuerelement (links, rechts) einrichten, sodass Sie sie verschieben können, während sich der Dialog bewegt, oder die Größe ändern, wenn sie sich bewegt. Es ist sehr einfach zu verstehen, wenn es schwierig ist, vollkommen richtig zu werden :)

0

Wir verwenden CResize-Klasse von CodeGuru, um die Größe aller Steuerelemente automatisch zu ändern. Sie sagen, wie Sie möchten, dass jedes Steuerelement in der Größe geändert wird und es die Aufgabe für Sie erledigt.

Das Resize-Paradigma gibt an, um wie viel sich jede Seite eines Steuerelements bewegt, wenn die Größe des Dialogfelds geändert wird.

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

Sehr praktisch, wenn Sie eine große Anzahl von Dialogsteuerelementen haben.

Source code

2

Ich habe viele versucht, und schließlich ließ sich auf http://www.codeproject.com/KB/dialog/layoutmgr.aspx. Es macht jedoch nicht das "intelligente" Layout, das Sie vorschlagen. Ich habe das noch nie in irgendeiner Bibliothek gesehen, auf keiner Plattform - ich sehe nicht, wie es funktionieren würde, ohne viel Magie unter der Haube zu haben, die sowieso die Hälfte der Zeit hätte außer Kraft gesetzt werden müssen.