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, aby se zvětšovaly, jakmile uživatel dialogové okno zvětší.

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:

Dialogové okno před změnou velikosti

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:

Dialogové okno po změně velikosti

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ů.

    Otevřete dialogové okno v editoru prostředků.

  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. Způsob přesunu určuje, jak se ovládací prvek přesune při změně velikosti dialogového okna; Způsob změny velikosti určuje, jak se mění velikost ovládacího prvku při změně velikosti dialogového okna. Typ pohybu a typ rozměření mohou být vodorovné, svislé, obě nebo žádné podle rozměrů, které chcete dynamicky změnit. Vodorovně je osa X; Svisle je osa 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 hodnotu 100%, aby ovládací prvek zůstal pevnou vzdálenost od pravého dolního rohu.

    Dynamické rozložení

  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.

    Nastavení dynamického rozložení

  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 pouze 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 dialog volejte metodu GetDynamicLayout třídy CWnd. 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 ve třídě dynamického rozložení k vytvoření struktury MoveSettings , 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 zadáte procento. Tyto statické metody vrátí nově vytvořený objekt MoveSettings, 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 u chování velikosti, které používá typ SizeSettings . 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);
    

K nastavení dynamického rozložení programově ze souboru prostředků

  1. Pomocí metody CMFCDynamicLayout::MoveHorizontalAndVertical zadejte název prostředku v příslušném skriptu prostředků (.rc soubor), který určuje dynamické informace o rozvržení, jak je uvedeno 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ředku, 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é

třída CMFCDynamicLayout
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