Dynamisches Layout

Mit MFC in Visual Studio 2015 können Sie Dialogfelder erstellen, die der Benutzer ändern kann, und Sie können steuern, wie das Layout an die Größenänderung angepasst wird. Beispielsweise können Sie Schaltflächen am unteren Rand eines Dialogfelds anfügen, sodass sie sich immer am unteren Rand befinden. Sie können auch bestimmte Steuerelemente einrichten, wie z. B. Textfelder, Listenfelder und Bearbeitungsfelder, die erweitert werden, wenn der Benutzer das Dialogfeld erweitert.

Angeben dynamischer Layouteinstellungen für ein MFC-Dialogfeld

Wenn der Benutzer die Größe eines Dialogfelds ändert, können die Steuerelemente im Dialogfeld in der Größe verändert oder in X- und Y-Richtung verschoben werden. Die Änderung in der Größe oder Position eines Steuerelements, wenn der Benutzer die Größe eines Dialogfelds ändert, wird als dynamisches Layout bezeichnet. Folgendes ist z. B. ein Dialogfeld vor dem Ändern der Größe:

Dialog before being resized.

Nach dem Ändern der Größe ist der Listenfeldbereich vergrößert, um weitere Elemente anzuzeigen, und die Schaltflächen wurden entlang der rechten unteren Ecke verschoben:

Dialog after being resized.

Sie können das dynamische Layout steuern, indem Sie die Details für jedes Steuerelement im Ressourcen-Editor in der IDE angeben, oder Sie können dies programmgesteuert tun, indem Sie auf das CMFCDynamicLayout Objekt für ein bestimmtes Steuerelement zugreifen und die Eigenschaften festlegen.

Festlegen der Eigenschaften für das dynamische Layout im Ressourcen-Editor

Sie können das dynamische Layoutverhalten für ein Dialogfeld festlegen, ohne Code schreiben zu müssen, nämlich mit dem Ressourcen-Editor.

So legen Sie Eigenschaften für das dynamische Layout im Ressourcen-Editor fest

  1. Öffnen Sie bei einem geöffneten MFC-Projekt das Dialogfeld, das Sie im Dialog-Editor bearbeiten möchten.

    Open the dialog in the resource editor.

  2. Wählen Sie ein Steuerelement aus, und legen Sie im Eigenschaftenfenster (in der Klassenansicht) seine dynamischen Layouteigenschaften fest. Der Abschnitt "Dynamisches Layout " im Eigenschaftenfenster enthält die Eigenschaften "Move Type", "Sizing Type" und, je nachdem, welche Werte für diese Eigenschaften ausgewählt wurden, bestimmte Eigenschaften, die definieren, wie viele Steuerelemente verschoben oder die Größe ändern. Beim Verschieben des Typs wird bestimmt, wie ein Steuerelement verschoben wird, während die Größe des Dialogfelds geändert wird. Die Größe des Typs bestimmt, wie die Größe eines Steuerelements geändert wird, wenn die Größe des Dialogfelds geändert wird. Der Verschiebungstyp und der Größentyp können je nach den Dimensionen, die Sie dynamisch ändern möchten, horizontal, vertikal, beide oder Keine sein. Horizontal ist die X-Dimension. Vertikal ist die Y-Richtung.

  3. Wenn sie möchten, dass ein Steuerelement, z. B. eine Schaltfläche mit fester Größe, an der unteren rechten Ecke bleibt, wie es für die Schaltflächen "OK" oder "Abbrechen" üblich ist, legen Sie den Größentyp auf "Keine" fest, und legen Sie den Verschiebungstyp auf "Beide" fest. Legen Sie für die Werte "Moving X " und "Moving Y " unter "Bewegungstyp" 100 % fest, damit das Steuerelement einen festen Abstand von der unteren rechten Ecke hat.

    Dynamic Layout.

  4. Angenommen, Sie haben auch ein Steuerelement, das erweitert werden soll, wenn das Dialogfeld erweitert wird. In der Regel kann ein Benutzer ein Dialogfeld erweitern, um ein mehrzeiliges Bearbeitungsfeld zu erweitern und die Größe des Textbereichs zu erhöhen, oder er erweitert möglicherweise ein Listensteuerelement, um mehr Daten anzuzeigen. Legen Sie für diesen Fall den Größentyp auf "Beide" fest, und legen Sie den Verschiebungstyp auf "Keine" fest. Legen Sie dann die Werte für die Größenanpassung X und Y auf 100 fest.

    Dynamic Layout Settings.

  5. Experimentieren Sie mit anderen Werten, die möglicherweise für Ihre Steuerelemente sinnvoll sind. Ein Dialogfeld mit einem einzeiligen Textfeld kann z. B. den Schrifttyp "Horizontal" festlegen.

Programmgesteuertes Festlegen von Eigenschaften für das dynamische Layout

Das vorherige Verfahren eignet sich für das Angeben der Einstellungen für das dynamische Layout für einen Dialog zur Entwurfszeit, aber wenn Sie das dynamische Layout zur Laufzeit steuern möchten, können Sie Eigenschaften für das dynamische Layout programmgesteuert festlegen.

So legen Sie Eigenschaften für das dynamische Layout programmgesteuert fest

  1. Suchen oder erstellen Sie eine Position im Implementierungscode der Dialogfeldklasse, an dem Sie das dynamische Layout für den Dialog angeben möchten. Sie können z. B. eine Methode wie AdjustLayout im Dialogfeld hinzufügen und von Positionen aus aufrufen, an denen das Layout geändert werden muss. Sie können dies zuerst vom Konstruktor aus oder nach dem Vornehmen von Änderungen am Dialog aufrufen.

  2. Rufen Sie für das Dialogfeld GetDynamicLayout, eine Methode der CWnd Klasse, auf. GetDynamicLayout gibt einen Zeiger auf ein CMFCDynamicLayout -Objekt zurück.

    CMFCDynamicLayout* dynamicLayout = pDialog->GetDynamicLayout();
    
  3. Verwenden Sie für das erste Steuerelement, dem Sie dynamisches Verhalten hinzufügen möchten, die statischen Methoden für die dynamische Layoutklasse, um die Move Einstellungen-Struktur zu erstellen, die die Art und Weise codiert, wie das Steuerelement angepasst werden soll. Dazu wählen Sie zuerst die entsprechende statische Methode aus: CMFCDynamicLayout::MoveHorizontal, CMFCDynamicLayout::MoveVertical, CMFCDynamicLayout::MoveNone oder CMFCDynamicLayout::MoveHorizontalAndVertical. Sie übergeben eine Prozentzahl für die horizontalen bzw. vertikalen Aspekte der Verschiebung. Diese statischen Methoden geben alle ein neu erstelltes „MoveSettings“-Objekt zurück, mit dem Sie das Verschiebeverhalten eines Steuerelements angeben können.

    Beachten Sie, dass 100 eine exakte Verschiebung gemäß der Größenänderung des Dialogs bedeutet, wodurch der Rand eines Steuerelement in einem festen Abstand zum neuen Rahmen bleibt.

    MoveSettings moveSettings = CMFCDynamicLayout::MoveHorizontal(100);
    
  4. Führen Sie dieselbe Aktion für das Größenverhalten aus, das den Typ "Size Einstellungen" verwendet. Um beispielsweise anzugeben, dass die Größe eines Steuerelements nicht geändert wird, wenn sich die Größe des Dialogfelds ändert, verwenden Sie folgenden Code:

    SizeSettings sizeSettings = CMFCDynamicLayout::SizeNone();
    
  5. Fügen Sie das Steuerelement mithilfe der CMFCDynamicLayout::AddItem-Methode dem dynamischen Layout-Manager hinzu. Es gibt zwei Überladungen für verschiedene Möglichkeiten zum Angeben des gewünschten Steuerelements. Eine verwendet den Fensterhandle (HWND) des Steuerelements, und die andere die Steuerelement-ID.

    dynamicLayout->AddItem(hWndControl,
    moveSettings,
    sizeSettings);
    
  6. Wiederholen Sie den Vorgang für jedes Steuerelement, das verschoben oder dessen Größe geändert werden muss.

  7. Bei Bedarf können Sie mithilfe der CMFCDynamicLayout::HasItem-Methode ermitteln, ob ein Steuerelement bereits in der Liste der Steuerelemente enthalten ist, die dynamischen Layoutänderungen unterliegen, oder die CMFCDynamicLayout::IsEmpty-Methode , um zu bestimmen, ob Steuerelemente vorhanden sind, die Änderungen unterliegen.

  8. Rufen Sie zum Aktivieren des Dialogfeldlayouts die CWnd::EnableDynamicLayout-Methode auf.

    pDialog->EnableDynamicLayout(TRUE);
    
  9. Beim nächsten Ändern der Größe des Dialogfelds wird die CMFCDynamicLayout::Adjust-Methode aufgerufen, die tatsächlich die Einstellungen anwendet.

  10. Wenn Sie das dynamische Layout deaktivieren möchten, rufen Sie CWnd::EnableDynamicLayout mit FALSE auf, wie für den bEnabled-Parameter .

    pDialog->EnableDynamicLayout(FALSE);
    

So legen Sie das dynamische Layout programmgesteuert aus einer Ressourcendatei fest

  1. Verwenden Sie die CMFCDynamicLayout::MoveHorizontalAndVertical-Methode , um einen Ressourcennamen in der relevanten Ressourcenskriptdatei (RC-Datei) anzugeben, die dynamische Layoutinformationen angibt, wie im folgenden Beispiel gezeigt:

    dynamicLayout->LoadResource("IDD_DIALOG1");
    

    Die benannte Ressource muss auf ein Dialogfeld verweisen, das Layoutinformationen in Form eines AFX_DIALOG_LAYOUT Eintrags in der Ressourcendatei enthält, wie im folgenden Beispiel gezeigt:

    /////////////////////////////////////////////////////////////////////////////
    //
    // AFX_DIALOG_LAYOUT
    //
    
    IDD_MFCAPPLICATION1_DIALOG AFX_DIALOG_LAYOUT
    BEGIN
    0x0000,
    0x6400,
    0x0028,
    0x643c,
    0x0028
    END
    
    IDD_DIALOG1 AFX_DIALOG_LAYOUT
    BEGIN
    0x0000,
    0x6464,
    0x0000,
    0x6464,
    0x0000,
    0x0000,
    0x6464,
    0x0000,
    0x0000
    
    END
    

Siehe auch

CMFCDynamicLayout-Klasse
Steuerelementklassen
Dialogfeldklassen
Dialog-Editor
Dynamisches Dialogfeldlayout für MFC in Visual C++ 2015