Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Med MFC i Visual Studio 2015 kan du skapa dialogrutor som användaren kan ändra storlek på och du kan styra hur layouten justeras till storleksändringen. Du kan till exempel koppla knappar längst ned i en dialogruta till den nedre kanten så att de alltid stannar längst ned. Du kan också konfigurera vissa kontroller, till exempel listrutor, redigeringsrutor och textfält som ska expanderas när användaren expanderar dialogrutan.
Ange inställningar för dynamisk layout för en MFC-dialogruta
När användaren ändrar storlek på en dialogruta kan kontrollerna i dialogrutan ändra storlek på eller flytta i X- och Y-riktningarna. Ändringen i storlek eller position för en kontroll när användaren ändrar storlek på en dialogruta kallas dynamisk layout. För exempel, följande är en dialogruta innan den ändras i storlek:
När du har storleksanpassats utökas listrutans område för att visa fler objekt och knapparna flyttas tillsammans med det nedre högra hörnet:
Du kan styra dynamisk layout genom att ange information för varje kontroll i resursredigeraren i IDE, eller så kan du göra det programmatiskt genom att CMFCDynamicLayout komma åt objektet för en viss kontroll och ange egenskaperna.
Ange dynamiska layoutegenskaper i resursredigeraren
Du kan ange det dynamiska layoutbeteendet för en dialogruta utan att behöva skriva någon kod med hjälp av resursredigeraren.
Ange dynamiska layoutegenskaper i resursredigeraren
När ett MFC-projekt är öppet öppnar du den dialogruta som du vill arbeta med i dialogredigeraren.
Välj en kontroll och i fönstret Egenskaper (i klassvyn) anger du dess dynamiska layoutegenskaper. Avsnittet Dynamisk layout i fönstret Egenskaper innehåller egenskaperna Flytttyp, Storlekstyp och, beroende på de värden som valts för dessa egenskaper, specifika egenskaper som definierar hur mycket kontroller som flyttas eller ändrar storlek. Flytttyp avgör hur en kontroll flyttas när dialogrutans storlek ändras. Storlekstyp avgör hur en kontroll ändras när dialogrutans storlek ändras. Flyttyp och Storlekstyp kan vara Vågrät, Lodrät, Båda eller Ingen beroende på de dimensioner som du vill ändra dynamiskt. Vågrätt är X-dimensionen. Lodrätt är Y-riktningen.
Om du vill att en kontroll, till exempel en knapp, ska ha en fast storlek och hålla sig på plats längst ned till höger, vilket är vanligt för knapparna OK eller Avbryt , anger du Storlekstyp till Ingen och anger Flytta typ till Båda. För värdena Flytta X och Flytta Y under Flytttyp anger du 100% så att kontrollen förblir ett fast avstånd från det nedre högra hörnet.
Anta att du också har en kontroll som du vill expandera när dialogrutan expanderas. Vanligtvis kan en användare expandera en dialogruta för att expandera en redigeringsruta med flera rader för att öka storleken på textområdet, eller så kan de expandera en listkontroll för att visa mer data. I det här fallet anger du Storlekstyp till Båda och anger Flytta typ till ingen. Ange sedan värdena Storlek X och Storlek Y till 100.
Experimentera med andra värden som kan vara meningsfulla för dina kontroller. En dialogruta med en enradstextruta kan till exempel ha storlekstypen inställd på Endast vågrät .
Ställa in egenskaper för dynamisk layout programmatiskt
Föregående procedur är användbar för att ange dynamiska layoutegenskaper för en dialogruta vid designtillfället, men om du vill styra den dynamiska layouten vid körning kan du ange dynamiska layoutegenskaper programmatiskt.
Så här anger du dynamiska layoutegenskaper programmatiskt
Hitta eller skapa en plats i dialogklassens implementeringskod där du vill ange den dynamiska layouten för dialogrutan. Du kanske till exempel vill lägga till en metod som
AdjustLayouti dialogrutan och anropa den från platser där layouten måste ändras. Du kommer eventuellt att anropa detta först från konstruktorn, eller efter att du har gjort ändringar i dialogrutan.I dialogrutan anropar du GetDynamicLayout, en metod för
CWndklassen.GetDynamicLayoutreturnerar en pekare till ettCMFCDynamicLayoutobjekt.CMFCDynamicLayout* dynamicLayout = pDialog->GetDynamicLayout();För den första kontrollen som du vill lägga till dynamiskt beteende till använder du statiska metoder i klassen dynamisk layout för att skapa MoveSettings-strukturen som kodar hur kontrollen ska justeras. Det gör du genom att först välja lämplig statisk metod: CMFCDynamicLayout::MoveHorizontal, CMFCDynamicLayout::MoveVertical, CMFCDynamicLayout::MoveNone eller CMFCDynamicLayout::MoveHorizontalAndVertical. Du skickar in en procentandel för de vågräta och/eller lodräta aspekterna av flytten. Dessa statiska metoder returnerar alla ett nyligen skapat MoveSettings-objekt som du kan använda för att ange en kontrolls flyttbeteende.
Tänk på att 100 innebär att flytta exakt lika mycket som dialogrutan ändrar storlek, vilket gör att kontrollens kant förblir ett fast avstånd från den nya kantlinjen.
MoveSettings moveSettings = CMFCDynamicLayout::MoveHorizontal(100);Gör samma sak för storleksbeteendet, som använder typen SizeSettings . Om du till exempel vill ange att en kontroll inte ändrar storlek när dialogrutan ändras använder du följande kod:
SizeSettings sizeSettings = CMFCDynamicLayout::SizeNone();Lägg till kontrollen i den dynamiska layouthanteraren med hjälp av metoden CMFCDynamicLayout::AddItem . Det finns två överbelastningar för olika sätt att ange den önskade kontrollmekanismen. Den ena tar kontrollens fönsterhandtag (HWND) och den andra tar kontroll-ID:t.
dynamicLayout->AddItem(hWndControl, moveSettings, sizeSettings);Upprepa för varje kontroll som måste flyttas eller ändra storlek.
Om det behövs kan du använda metoden CMFCDynamicLayout::HasItem för att avgöra om en kontroll redan finns i listan över kontroller som omfattas av dynamiska layoutändringar, eller metoden CMFCDynamicLayout::IsEmpty för att avgöra om det finns några kontroller som kan ändras.
Om du vill aktivera dialoglayout anropar du metoden CWnd::EnableDynamicLayout .
pDialog->EnableDynamicLayout(TRUE);Nästa gång användaren ändrar storlek på dialogrutan anropas metoden CMFCDynamicLayout::Adjust som faktiskt tillämpar inställningarna.
Om du vill inaktivera dynamisk layout anropar du CWnd::EnableDynamicLayout med FALSE som för parametern bEnabled .
pDialog->EnableDynamicLayout(FALSE);
Så här ställer du in den dynamiska layouten programmatiskt från en resursfil
Använd metoden CMFCDynamicLayout::MoveHorizontalAndVertical för att ange ett resursnamn i relevant resursskriptfil (.rc-fil) som anger dynamisk layoutinformation, som i följande exempel:
dynamicLayout->LoadResource("IDD_DIALOG1");Den namngivna resursen måste referera till en dialogruta som innehåller layoutinformation i form av en AFX_DIALOG_LAYOUT post i resursfilen, som i följande exempel:
///////////////////////////////////////////////////////////////////////////// // // 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
Se även
CMFCDynamicLayout-klass
Kontrollklasser
Dialogruteklasser
Dialogredigeraren
Dynamisk dialoglayout för MFC i Visual C++ 2015