2008-09-27 16 views
6

Poszukuję naprawdę dobrej klasy okna dialogowego okna dialogowego, która będzie rozciągać i zmniejszać poszczególne elementy zgodnie z potrzebą zmiany rozmiaru ekranu. Stephan Keil ma dobry (DlgResizeHelper), który zasadniczo zmienia rozmiar wszystkiego o ustalony stosunek, ale szukam czegoś mądrzejszego.Klasy okien dialogowych okna dialogowego Windows C++

Na przykład:

  • Ikony nie powinien zmienić rozmiar

  • pojedynczej linii pola tekstowe nie powinny być rozciągnięte w pionie

  • Przyciski prawdopodobnie powinien pozostać taki sam rozmiar

Zasadniczo szukam czegoś t o spójrz na wszystkie elementy sterujące, ustal, czy statyczne pole tekstowe jest powiązane z kontrolką znajdującą się obok/pod nim i zakotwicz je razem, a także zmień rozmiar dużych kontrolek w "inteligentny" sposób, aby wyglądało dobrze.

Czy istnieją takie ramy? Pracowałem nad jednym, ale coś gotowego byłoby prawdopodobnie lepsze.

OBSERWUJEMU: Sprawdzam proponowane rozwiązania. Wiele z nich wymaga zakotwiczenia każdej kontrolki w oknie dialogowym. Szukam czegoś sprytnego, co pozwoli ustalić, jakie powinny być kotwice, z możliwością ręcznego zakotwiczenia, jeśli domysły są błędne. Wygląda na to, że powinno być możliwe - większość ludzi zgodziłaby się, że statyczne pole tekstowe obok pola edycji powinno być zakotwiczone razem. Chyba prawie szukam małej AI tutaj :)

Odpowiedz

1

Możesz użyć wxWidgets. Całkowicie zastępuje MFC, jest wieloplatformowy i zapewnia mechanizm dialogowy oparty na układzie.

0

Biblioteka Ultimate Toolbox MFC (here na CodeProject) zawiera layout manager. Nie używałem go sam, ale wygląda na to, że robi to, co chcesz.

0

Jest to bezpłatne rozwiązanie również z CodeProject
http://www.codeproject.com/KB/dialog/dlgresizearticle.aspx
To jest po prostu zbiorem prostych makr, który kontroluje pozycję jako dialogowe zmienia rozmiar.

Edytuj - obserwując komentarze OP. Nie znam żadnej ogólnej obsługi sizerów, takiej jak QT/WX dla MFC, nie wydaje się ona również obecna w nowych frameworkach, takich jak WinForm.
Jest w QT/WX, ponieważ jest to konieczne dla wieloplatformowych, gdzie widżety mogą mieć inny rozmiar, co wyjaśnia brak MS. Jest to również niezbędne w przypadku portów wielojęzycznych, np. gdzie niemiecki do anulowania ma 30 znaków.

0

Możesz obejrzeć Professional GUI używamy ich biblioteki klas do zmiany rozmiaru naszych elementów sterujących okna dialogowego. Myślę, że to część ich bezpłatnej wersji.

2

Używam ResizableLib (również działa PropertySheets i stron) off codeproject, IIRC. Ustawiasz punkty kontrolne, które określają sposób zmiany rozmiaru okna dialogowego i elementów sterujących podczas przesuwania okna dialogowego.

Można ustawić maksymalnie 2 kotwice na element sterujący (lewy i prawy), aby można było przenosić je podczas przesuwania okna dialogowego lub zmieniać ich rozmiar podczas przesuwania. Jest to bardzo łatwe do zrozumienia, jeśli trudno jest uzyskać perfekcyjnie prawidłowe:

0

Używamy klasy CResize z CodeGuru, aby automatycznie zmienić rozmiar wszystkich elementów sterujących. Mówisz, jak chcesz, aby każda z formantów była zmieniana i wykonuje to zadanie za Ciebie.

Paradygmat zmiany rozmiaru ma określać, ile będzie się przesuwać po zmianie rozmiaru okna dialogowego.

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

bardzo przydatne, gdy masz dużą liczbę kontroli dialogowych.

Source code

2

Próbowałem wiele i ostatecznie rozstrzygane na http://www.codeproject.com/KB/dialog/layoutmgr.aspx. Nie sugeruje to jednak "inteligentnego" układu. Nigdy nie widziałem tego w żadnej bibliotece, na żadnej platformie - nie widzę, jak by to działało bez wielkiej magii, która i tak musiałaby zostać zastąpiona przez połowę czasu.

Powiązane problemy