Sdílet prostřednictvím


Dynamické rozložení

Pomocí knihovny MFC v sadě Visual Studio 2015 můžete vytvořit dialogy, které uživatel může změnit velikost, a můžete řídit způsob, jakým se rozložení přizpůsobí změně velikosti. Můžete například připojit tlačítka v dolní části dialogového okna ke spodnímu okraji, aby vždy zůstaly v dolní části. Můžete také nastavit určité ovládací prvky, jako jsou seznamová pole, pole pro úpravy a textová pole, a rozbalit tak, jak uživatel dialogové okno rozbalí.

Zadání nastavení dynamického rozložení pro dialogové okno MFC

Když uživatel změní velikost dialogového okna, ovládací prvky v dialogovém okně můžou změnit velikost nebo přesunout směry X a Y. Změna velikosti nebo umístění ovládacího prvku, když uživatel změní velikost dialogového okna, se nazývá dynamické rozložení. Například toto je dialogové okno před změnou velikosti:

Dialog before being resized.

Po změně velikosti se oblast seznamu zvýší, aby se zobrazilo více položek a tlačítka se přesunou spolu s pravém dolním rohem:

Dialog after being resized.

Dynamické rozložení můžete řídit zadáním podrobností pro každý ovládací prvek v Editoru prostředků v integrovaném vývojovém prostředí nebo to můžete provést programově tak, že k objektu CMFCDynamicLayout přistupujete pro konkrétní ovládací prvek a nastavíte vlastnosti.

Nastavení vlastností dynamického rozložení v editoru prostředků

Pomocí editoru prostředků můžete nastavit chování dynamického rozložení dialogového okna, aniž byste museli psát jakýkoli kód.

Nastavení vlastností dynamického rozložení v editoru prostředků

  1. V otevřeném projektu MFC otevřete dialogové okno, se kterým chcete pracovat v editoru dialogů.

    Open the dialog in the resource editor.

  2. Vyberte ovládací prvek a v okně Vlastnosti (v zobrazení třídy) nastavte jeho dynamické vlastnosti rozložení. Oddíl Dynamické rozložení v okně Vlastnosti obsahuje vlastnosti Přesunutí typu, Typ velikosti a v závislosti na hodnotách vybraných pro tyto vlastnosti, konkrétní vlastnosti definující, kolik ovládacích prvků se přesune nebo změní velikost. Přesunutí typu určuje, jak se ovládací prvek přesune při změně velikosti dialogového okna; Typ velikosti určuje, jak se mění velikost ovládacího prvku při změně velikosti dialogového okna. Typ přesunutí a typ velikosti můžou být vodorovné, svislé, obě nebo žádné v závislosti na rozměrech, které chcete dynamicky změnit. Vodorovná je dimenze X; Svisle je směr Y.

  3. Pokud chcete, aby ovládací prvek, jako je tlačítko, byl v pevné velikosti a zůstal v pravém dolním rohu, jak je běžné u tlačítek OK nebo Zrušit , nastavte typ velikosti na Žádné a nastavte typ přesunutí na Obě. U hodnot Přesunutí X a Přesunutí Y v části Typ přesunutí nastavte 100 % tak, aby ovládací prvek zůstal pevnou vzdálenost od pravého dolního rohu.

    Dynamic Layout.

  4. Předpokládejme, že máte také ovládací prvek, který chcete rozbalit při rozbalení dialogového okna. Uživatel může obvykle rozbalit dialogové okno, aby rozbalil víceřádkové pole pro úpravy, aby se zvětšila velikost textové oblasti, nebo může rozbalit ovládací prvek seznamu a zobrazit další data. V tomto případě nastavte typ velikosti na Obě a nastavte typ přesunutí na žádný. Potom nastavte hodnoty X a velikost Y na 100.

    Dynamic Layout Settings.

  5. Experimentujte s dalšími hodnotami, které by mohly dávat smysl pro vaše ovládací prvky. Dialogové okno s jednořádkovým textovým polem může mít typ velikosti nastavený jenom na Vodorovně , například.

Programové nastavení vlastností dynamického rozložení

Předchozí postup je užitečný pro určení vlastností dynamického rozložení pro dialogové okno v době návrhu, ale pokud chcete řídit dynamické rozložení za běhu, můžete vlastnosti dynamického rozložení nastavit programově.

Programové nastavení vlastností dynamického rozložení

  1. Najděte nebo vytvořte místo v kódu implementace třídy dialogového okna, kde chcete zadat dynamické rozložení dialogového okna. Můžete například chtít přidat metodu, například AdjustLayout v dialogovém okně, a volat ji z míst, kde je potřeba změnit rozložení. Můžete ho nejdřív zavolat z konstruktoru nebo po provedení změn v dialogovém okně.

  2. Pro dialogové okno, volání GetDynamicLayout, metoda CWnd třídy. GetDynamicLayout vrátí ukazatel na CMFCDynamicLayout objekt.

    CMFCDynamicLayout* dynamicLayout = pDialog->GetDynamicLayout();
    
  3. Pro první ovládací prvek, ke kterému chcete přidat dynamické chování, použijte statické metody třídy dynamického rozložení k vytvoření move Nastavení struktury, která kóduje způsob, jakým má být ovládací prvek upraven. Uděláte to tak, že nejprve zvolíte příslušnou statickou metodu: CMFCDynamicLayout::MoveHorizontal, CMFCDynamicLayout::MoveVertical, CMFCDynamicLayout::MoveNone nebo CMFCDynamicLayout::MoveHorizontalAndVertical. Pro vodorovné a/nebo svislé aspekty přesunu předáte procento. Tyto statické metody vrátí nově vytvořený move Nastavení objekt, který můžete použít k určení chování přesunutí ovládacího prvku.

    Mějte na paměti, že 100 znamená přesunutí přesně tak, jak se změní velikost dialogového okna, což způsobí, že okraj ovládacího prvku zůstane pevnou vzdáleností od nového ohraničení.

    MoveSettings moveSettings = CMFCDynamicLayout::MoveHorizontal(100);
    
  4. Totéž udělejte pro chování velikosti, které používá typ Velikost Nastavení. Pokud chcete například určit, že se ovládací prvek při změně velikosti dialogového okna nezmění, použijte následující kód:

    SizeSettings sizeSettings = CMFCDynamicLayout::SizeNone();
    
  5. Přidejte ovládací prvek do správce dynamického rozložení pomocí CMFCDynamicLayout::AddItem metoda. Existují dvě přetížení pro různé způsoby určení požadovaného ovládacího prvku. Jeden přebírá popisovač okna ovládacího prvku (HWND) a druhý přebírá ID ovládacího prvku.

    dynamicLayout->AddItem(hWndControl,
    moveSettings,
    sizeSettings);
    
  6. Opakujte u každého ovládacího prvku, který je potřeba přesunout nebo změnit jeho velikost.

  7. V případě potřeby můžete použít CMFCDynamicLayout::HasItem metoda určit, zda ovládací prvek je již v seznamu ovládacích prvků vystavených dynamickým změnám rozložení, nebo CMFCDynamicLayout::IsEmpty metoda určit, zda existují nějaké ovládací prvky, které jsou předmětem změn.

  8. Chcete-li povolit rozložení dialogového okna, zavolejte CWnd::EnableDynamicLayout metoda.

    pDialog->EnableDynamicLayout(TRUE);
    
  9. Při příštím změně velikosti dialogového okna se volá metoda CMFCDynamicLayout::Adjust , která skutečně použije nastavení.

  10. Pokud chcete zakázat dynamické rozložení, zavolejte CWnd::EnableDynamicLayout s FALSE jako pro parametr bEnabled .

    pDialog->EnableDynamicLayout(FALSE);
    

Nastavení dynamického rozložení prostřednictvím kódu programu ze souboru prostředků

  1. Pomocí cmFCDynamicLayout::MoveHorizontalAndVertical metoda zadejte název prostředku v příslušném souboru skriptu prostředků (.rc soubor), který určuje dynamické informace rozložení, jako v následujícím příkladu:

    dynamicLayout->LoadResource("IDD_DIALOG1");
    

    Pojmenovaný prostředek musí odkazovat na dialogové okno, které obsahuje informace o rozložení ve formě položky AFX_DIALOG_LAYOUT v souboru prostředků, jako v následujícím příkladu:

    /////////////////////////////////////////////////////////////////////////////
    //
    // 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
    

Viz také

CMFCDynamicLayout – třída
Třídy ovládacích prvků
Třídy dialogových oken
Editor dialogových oken
Dynamické rozložení dialogového okna pro MFC v jazyce Visual C++ 2015