Wie werden mehrere Optionsfeldgruppen für die ordnungsgemäße Anordnung der Registerkartenreihenfolge und der Tastatur (WIN32) eingerichtet?

8

Zuerst ist das nicht MFC.
Hier ist eine beschnittene Version der GUI, an der ich gearbeitet habe:

Wie Sie sehen können, habe ich (versucht) zwei verschiedene Gruppen, Icon und Button, mit dem Code:

zu erstellen %Vor%

Das Problem, das ich habe und was Sie wahrscheinlich sehen können, ist, dass es nur einen Radio-Button für das Fenster gibt. Dies bedeutet, dass der Benutzer möglicherweise keinen Radio-Button aus der Icon-Gruppe und einen aus der Button-Gruppe auswählen konnte. Ich habe jeden Radio-Button wie folgt initialisiert:

%Vor%

Ich möchte irgendwie die "Icon" Gruppe von Radio-Buttons von der "Button" Gruppe von Radio-Buttons trennen, wenn das Sinn macht, und deshalb wird für jede Gruppe ein Radiobutton verfügbar sein. Wie wird das möglich sein? Muss ich ein neues Fenster und ein neues Callback-Verfahren erstellen, nur um einen zusätzlichen Radioknopf zu haben? Es muss eine andere Möglichkeit geben, untergeordnete Elemente wie folgt zu gruppieren.

2 separate Gruppen von Optionsfeldern in der gleichen Form WINAPI (No MFC) Die Verbindung war für meinen Zweck nicht von Nutzen.

Ich habe die Programmierung für Windows Fifth Edition, von Charles Petzold als Referenz neben mir, und er sagt im Abschnitt Gruppenrahmen "Gruppenfelder werden oft verwendet, um andere Schaltflächensteuerelemente einzuschließen", aber es gibt kein reales Beispiel dafür.

    
James 25.11.2012, 10:17
quelle

1 Antwort

12

Entgegen der landläufigen Meinung brauchen Sie kein GROUPBOX-Steuerelement oder irgendeinen anderen äußeren "Container" (was eine Groupbox sowieso nicht ist, es ist nur ein Button-Artefakt). Im Folgenden wird beschrieben, wie Sie dies mit der no Anforderung einer Gruppenbox tun können. Wenn Sie eine Gruppenbox möchten, die das hier beschriebene Layout funktional unterstützt, gehen Sie weiter zum Abschnitt BEARBEITEN dieser Antwort, in dem ich darlege, wie die spezifischen Wünsche des OP erreicht werden können.

Die Auto-Radio-Schaltfläche "Bänke" funktioniert mit zwei Attributen für die Fensterattribute, WS_GROUP und WS_TABSTOP . Tun Sie folgendes für Ihre zwei "Banken", die ich liebevoll Bank1 und Bank2 nennen werde:

  1. Bank 1: Der erste Radiobutton sollte beide WS_GROUP | haben WS_TABSTOP im Steuerelementformat. die übrigen Optionsfelder sollten keine haben und in der gleichen Reihenfolge sein (dh im DIALOG-Skript folgen sie einander sofort; bei der dynamischen Erstellung werden sie sequenziell erstellt).

  2. Das erste untergeordnete Steuerelement nach sollte das letzte Optionsfeld in Bank1 mindestens den WS_GROUP-Stil und WS_GROUP | WS_TABSTOP, wenn es ein tab-gestopptes Steuerelement ist.

  3. Bank 2: Der erste Radiobutton sollte beide WS_GROUP | WS_TABSTOP im Steuerelementformat. die übrigen Optionsfelder sollten keine haben und in der gleichen Reihenfolge sein (dh im DIALOG-Skript folgen sie einander sofort; bei der dynamischen Erstellung werden sie sequenziell erstellt).

  4. Das erste untergeordnete Steuerelement nach sollte das letzte Optionsfeld in Bank2 mindestens WS_GROUP style und WS_GROUP | WS_TABSTOP, wenn es ein tab-gestopptes Steuerelement ist.

Layout wie oben beschrieben ermöglicht es Ihnen, zu einer Optionsfeldbank zu "Tab" zu gehen und die Pfeiltasten zu verwenden, um die Auswahl zu ändern. Sie "Tab" erneut, um diese Bank zu verlassen und zum nächsten Tabstopp zu gehen. Denken Sie daran, dass der Dialogmanager immer zum nächsten untergeordneten WS_TABTOP-Steuerelement wechselt, wenn Sie auf Tab drücken (oder vorher mit Umschalt-Tab). Wenn das Steuerelement, auf das gesprungen wird, ein Auto-Typ ist, wird das ausgewählte Steuerelement das "ausgewählte" Steuerelement innerhalb der letzten WS_GROUP sein.

Wenn es hilft, nimm einen Skizzenblock, zeichne ihn auf Papier und klebe ein "T" auf die Tabstopps und ein "G" auf die Gruppenattribute, wie oben beschrieben. Es wird wahrscheinlich viel klarer, sobald es visualisiert wird. Sehen Sie sich ein Dialogressourcen-Skript an, um zu sehen, wie diese zusammenarbeiten, um mehr Einblick zu erhalten.

Hinweise: Wenn Sie Gruppenrahmen um diese herum verwenden möchten, können Sie das tun. Der Dialogmanager arbeitet, indem er Steuerelemente zu Gruppen basierend auf dem letzten Steuerelement verknüpft, das mit WS_GROUP gekennzeichnet wurde, und das erste Steuerelement, das WS_TABSTOP danach hat, wird als den Tab-Einsprungpunkt für diese Gruppe betrachtet. Das Einfügen einer Groupbox zuerst (die kein Tabstopp sein kann), gefolgt von den Optionsfeldsteuerelementen mit WS_TABSTOP auf der ersten Optionsschaltfläche (diesmal keine WS_GROUP) funktioniert ebenfalls. Im Allgemeinen finde ich es einfacher, meine Optionsfelder einfach anzuordnen, ohne auf Gruppenboxen angewiesen zu sein.

BEARBEITEN Ein Bild spricht tausend Worte

Für Ihr Bild würde ich wahrscheinlich die folgenden Kinder in der folgenden Reihenfolge erstellen:

  1. "Icon" -Groupbox, einschließlich WS_GROUP-Stil.
  2. Schaltfläche "Informationen", einschließlich WS_TABSTOP
  3. Alle anderen Optionsfelder der Gruppe "Symbol". Fügen Sie WS_TABSTOP oder WS_GROUP NICHT hinzu.
  4. "Button" -Groupbox, einschließlich WS_GROUP-Stil. Dies schließt die aktuelle Kontrollgruppe und startet die nächste.
  5. "Auto-Radio-Schaltfläche" AbortretryIgnore ", einschließlich WS_TABSTOP
  6. Alle anderen Optionsfelder der Gruppe "Schaltfläche". Fügen Sie WS_TABSTOP oder WS_GROUP NICHT hinzu.
  7. Das nächste Steuerelement nach den Optionsschaltflächen "Button" muss WS_GROUP enthalten. Dies schließt die aktuelle Kontrollgruppe und startet die nächste.

Offensichtlich müssen alle anderen Kinderkontrollstile, Sichtbarkeit usw. ebenfalls korrekt verwendet werden, und natürlich sollten die Kinder alle eindeutige IDs haben. Ich nehme an, Sie haben den Rest davon schon abgedeckt.

    
WhozCraig 25.11.2012, 10:33
quelle