Automatic Dialog Resizing



Click here for a larger image.

Environment: VC.NET, VC6, Win32, MFC, WTL

Every GUI developer uses dialogs. Sometimes, dialogs should support resizing to make the user's life easier. To create a resizable dialog, you just need to handle a WM_SIZE message and resize/move child controls. But, when a dialog contains many controls, resizing it would be a pain for the developer, and the OnSize function will look like a monster!

When I ran into this problem, I wrote a simple resizer that could help significantly in making resizable dialogs. All you have to do now is:

  1. Create a dialog resource and position the controls as you wish.
  2. Make CResizer m_resizer a member of your dialog class.
  3. Initialize the resizer in OnInitDialog (m_resizer.Init(...)).
  4. Move controls in OnSize simply by calling m_resizer.Move()!

Let's consider the implementation of CResizer class in detail.

The main idea is the following: Each side of a child window (left, top, right, and bottom) is connected to a side of another window, the so-called relative window. The dialog window that owns the children also can be a relative window. When the dialog window is resized, the child window sides are moved after the relative window, thus preserving the connections.

There are several types of connections:

Connection Type Constant Name Description
Fixed CResizer::eFixed Preserves the distance between the side of the child window and the specified side of the relative window
Proportional CResizer::eProportional Preserves the ratio of distance between the side of the child window and left (top) side of the relative window to width (height) of the relative window.
Preserving width CResizer::eWidth An auxiliary connection that preserves the width of the specified child window. It also can be implemented with a fixed connection.
Preserving height CResizer::eHeight An auxiliary connection that preserves the height of the specified child window. It also can be implemented with a fixed connection.

The connections for child windows are specified in a static array of the CResizer::CBorderInfo structures. The format is as follows:

{IDC_CTRL_ID, {(conn type), (rel id), (rel side)}, //Left side
              {(conn type), (rel id), (rel side)}, //Top side
              {(conn type), (rel id), (rel side)}, //Right side
              {(conn type), (rel id), (rel side)}, //Bottom side

Here, (conn type) is one of the connection types listed above, (rel id) is an identifier of the relative window or IDC_MAIN if you want to reference parent dialog, and (rel side) is the side of the relative window to which a connection is bound.

Each child window has four sides, so it has four connections—for left, top, right, and bottom. They are listed subsequently in the CResizer::CBorderInfo initialization above.

Let's consider the connection format (CResizer::CBorder structure) in more detail.

 {(conn type)            , (rel id)    , (rel side)         }

  CResizer::eFixed                       CResizer::eLeft
  CResizer::eProportional  IDC_MAIN      CResizer::eTop
 {CResizer::eWidth       , IDC_CTRL_ID , CResizer::eRight   }
  CResizer::eHeight                      CResizer::eBottom
                                         CResizer::eXCenter
                                         CResizer::eYCenter

A fixed connection can bind the child window side not only to a side of the relative window, but also to its horizontal (CResizer::eXCenter) or vertical (CResizer::eYCenter) center line.

A proportional connection needs only the width or height as relative window side. To specify width, use one of the horizontal sides (eLeft, eRight, or eXCenter); to specify height, use one of vertical sides (eTop, eBottom, or eYCenter).

Connections preserving width or height don't require relative window info. So, there can be any.

Typical Usage

  1. Make CResizer m_resizer a member variable of your dialog class.

  2. Add the following code to OnInitDialog(), replacing the control IDs to your specific ones and adjusting connections as you wish (described above).

    static const CResizer::CBorderInfo s_bi[] = {
     {IDC_CTRL1, {CResizer::eFixed, IDC_MAIN, CResizer::eLeft},   //l
                 {CResizer::eFixed, IDC_MAIN, CResizer::eTop},    //t
                 {CResizer::eFixed, IDC_MAIN, CResizer::eRight},  //r
                 {CResizer::eFixed, IDC_MAIN, CResizer::eBottom}},//b
     {IDC_CTRL2, {CResizer::eFixed, IDC_MAIN, CResizer::eLeft},
                 {CResizer::eFixed, IDC_MAIN, CResizer::eBottom},
                 {CResizer::eFixed, IDC_MAIN, CResizer::eRight},
                 {CResizer::eFixed, IDC_MAIN, CResizer::eBottom}},
    };
    const nSize = sizeof(s_bi)/sizeof(s_bi[0]);
    m_resizer.Init(m_hWnd, NULL, s_bi, nSize);
    
  3. Add the following code to the OnSize() handler:

    m_resizer.Move();
  4. Everything should work now.

Some Final Tips

  1. Resizer resizes controls in the order they are defined in the array, so (rel id) should always be defined (and, therefore, moved by the resizer) before it is used as relative window. Otherwise, resizer ASSERTs.
  2. Windows that are defined earlier in the array have higher priority. When windows have too small a size and child windows overlap, the window with lower priority is hidden.
  3. If you need to limit minimum or maximum window size, you can handle the WM_GETMINMAXINFO message.

Downloads

Download demo project - 103 Kb
Download source - 5 Kb


Comments

  • Trist omgivet at kunne ændre tilsluttet strøm til kunderne

    Posted by rsnosm546 on 07/16/2013 08:06pm

    Dr. Dre Beats by Dre hovedtelefoner tendens til at være så dygtige i mange hovedtelefoner producerer. Blandt det store udvalg af Monster Beatshovedtelefoner med næsten alle håndsæt kan individuelt kunne være Fahion trend med blanding, med fremragende fordele. De behøver ikke nødvendigvis giver et individ af Dr. Dre hovedtelefoner som de to sider. [url=http://beatsbydrdredanmark.blinkweb.com/]beats by dre Hovedtelefoner[/url] monster beats hovedtelefoner tendens til at være på det aspekt af en fremragende synes høj kvalitet og vidunderlige overordnede udseende. Efter min mening, hvis du ofte har en god fan vedrørende lyd til eller gå med sange af en stringent tilgang, eller du bare brug for at få din arbejdsplads med fremragende afslapning, så er du måske nødt din bil beruset med sin perfekte lydkvalitet fremragende. [url=http://beatsbydrdredan.ucoz.com/]beats by dre billigt[/url] Ligegyldigt om nogen efterspørgsel en ny hookup vedrørende personlig ansætte i dit hus samt med henblik på at venstre arm din nuværende lille vedrørende institution, dette er den meget specielle, der vil sikre en favorit BIII øretelefoner spørgende, Min ægtefælle og jeg gravede lidt dybere involveret med det sammen med min ægtefælle og jeg, din ml i allexpect en ny, netop hvad jeg lige kigger ind nedenfor besøgende i de mange standard fornødenheder. Sandheden er, jeg er bare planlægning for dig at adskille idéen sammen i dit tilfælde for at sige det kort sort.

    Reply
  • clarisonic pro 2012 pattern in pink

    Posted by iouwanzi on 06/05/2013 06:29pm

    [url=http://www.miaclarisonicaustralia.org/clarisonic-pro]clarisonic pro[/url] Based hovedtelefoner tilbyde lydkvalitet, der er lige så forbløffende. Ideel til nutidens digitale musik, disse hovedtelefoner giver dyb bas, en fed mellemtone, og klar, uforvrænget diskant, så du kan høre hver detail.The on-ear, lukket-back design giver langvarig komfort og en høj grad af naturlig støj isolation . Den enkeltsidede kabel er designet til at give dig masser af slæk mens modstå tangles. Integreret i kablet er Monsters ControlTalk modul, som giver dig en kontrolknap og high-grade mikrofon, ideel til styring musikafspilning, telefonopkald og tage stemmenotater på kompatible iPods, iPhones, og Blackberrys. Den guldbelagt 3,5 mm stik giver bred kompatibilitet med MP3-afspillere, cd-afspillere, computere og meget mere. [url=http://www.miaclarisonicaustralia.org/]clarisonic australia[/url] Men hvis du ønsker at lytte til musik via en Bluetooth audio support uden at lukke dit problem stadig et kabel. Via USB giver dig de Beats by Dr. Dre Wireless på kort tid til 10 timers lytteglæde. Bare nyde i stil og trådløst fra din yndlingsmusik med Beats by Dr. Dre Wireless.The Beats Wireless leverer ligesom alle Beats By Dr. Dre produkter krystal klar diskant, naturlig mellemtone og en kraftfuld stram bas. Til også via bluetooth bedste præstation at levere den Beats Wireless med de nyeste Bluetooth-teknologi og er egnet til at modtage AAC og apt-X signaler. Selvfølgelig er dette Beats med ControlTalk. [url=http://www.australiaclarisonic.com/]clarisonic mia[/url] Ligegyldigt om nogen efterspørgsel en ny hookup vedrørende personlig ansætte i dit hus samt med henblik på at venstre arm din nuværende lille vedrørende institution, dette er den meget specielle, der vil sikre en favorit BIII øretelefoner spørgende, Min ægtefælle og jeg gravede lidt dybere involveret med det sammen med min ægtefælle og jeg, din ml i allexpect en ny, netop hvad jeg lige kigger ind nedenfor besøgende i de mange standard fornødenheder. Sandheden er, jeg er bare planlægning for dig at adskille idéen sammen i dit tilfælde for at sige det kort sort.

    Reply
  • Nye Beats By Dr. Dre Classic skabe et nyt liv

    Posted by wherewanzi on 06/05/2013 06:27pm

    [url=http://beatsbydrdredanmark.webstarts.com/]beats by dre danmark[/url] Udover alle andre hovedtelefoner par, beats Dre lyd præsentation er temmelig god, ikke som “mudrede” og “uklar” støjende lyde, som ofte er problemer med hver hovedtelefon. Nå, denne genre af hovedtelefon er meget godt for den elektroniske, hård rock, og midt tempo hip-hop musik, som helt sikkert kan rock you ingen tvivl om. billige beats by dre er meget til salg i forskellige musik-butikker og du kan købe dem fra enhver stikkontakt til pluk det til din musik dille. Nå, ingen tvivl om, at du kan have en god musik ved at have det, efter alt dette er ‘beats by Dre «og navnet i sig selv er alt for at angive dets kvalitet. Så ven, så hvis du er en af dem, der søger for at have hovedtelefoner til dit musiksystem eller spekulerer at købe det til din iPhone eller iPod, kan du placere din ordre online. Du kan købe denne genre af hovedtelefoner lige fra sidder fra din hjemmecomputer, logge på hjemmesiden at udforske Dre beats rækkevidde at smage essensen af musikken. [url=http://beatsbydrehretelefoner.weebly.com/]beats by dre høretelefoner[/url] Hestekræfter samt reggae hele verden har kombineret såvel som resultatet er den nye Doctor Dre laptop. Med ferier her og også Dr. Dre laptop annoncer viser konstant på tv, er alle spekulerer på, om de skal købe det faktiske H. s.. Misundelse (den bestemte specialiserede navn med den personlige computer).Over-the-ear hovedtelefoner er fantastisk for ejendom bliver opmærksomme samt vejledning i at lukke ud lyde som du sover. On-ear typer bør også være behageligt, sammen med delikat ekstra polstring og robust konstruktion. Bare om de mest væsentlige ting sammen med on-ear design er at sikre, at de er installeret til brug sammen med stikkene i dine gadgets. [url=http://beatsbydrdredanmark.moonfruit.com/]beats by dre tilbud[/url] Hvis du interesserer lyden, hvordan man kan lytte til din musik, så vil du elske deBeats by Dr. Dre solo højtydende hovedtelefoner. Uanset om du er fagfolk eller entusiaster, de er den perfekte høj kvalitet at lytte til dig igen, hvis du interesserer lyd, hvordan du kan lytte til din musik på farten, så vil du elske beat af Dr. Dre Solo high-performance hovedtelefoner. Uanset om du er fagfolk eller entusiaster, de er perfekte, høj kvalitet lytter til dig på vejen.

    Reply
  • Monster Beats virkelig pÃ¥ konto

    Posted by mantouhmmm on 06/03/2013 06:38pm

    [url=http://www.drebeatsbysnorge.blinkweb.com/]beats by dre norge[/url] Mp3-filer kan kjøpes for billige priser. De tilbyr også gratis nedlastinger for de som ønsker å teste det ut. I-Doser gir informasjon om de riktige hodetelefoner til bruk og hva slags innstilling du må være i for å få de beste effektene fra den. Den binaural beats linken nedenfor gir mer informasjon om emnet, samt gratis dataprogram og hvor du får gratis lyder mellom.Dette syv trinn formelen er prosessen med å lage beats. Beat gjør er ikke rocket science. Ved å forstå de grunnleggende prinsipper og begreper i musikkproduksjon, bør du være i stand til å gå gjennom hele prosessen med letthet og enkelhet. Akkurat som baking, musikk har sin egen formel for utvikling av en song.All musikk programmer har en lyd editor som hjelper deg i din musikk arrangement av lyder. Enten du bruker samples eller lage din egen lyd, vil du bruke en lyd editor for å skrive alle dine Beats By Dre Pro. Få en grunnleggende forståelse av hvordan musikken programvaren fungerer før du bruker denne formelen. [url=http://www.beatsbydrestudio.moonfruit.com/]beats by dre norge[/url] Internett er et sted der flere og flere produsenter og slo beslutningstakere samles for å tillate nye artister til å komme og kjøpe sine beats. Det er hundrevis og hundrevis av beat-selger nettsteder på nettet som imøtekomme til kunstnere som har talent, men kan ikke ha et veldig stort budsjett til å kjøpe instrumentaler. Med det blir sagt, er det også mange beat-nettsteder som ikke er satt opp riktig, og kan lage musikk artist nest gjette når det kommer til å kjøpe en instrumental fra noen av disse sites.First du må være i stand til å finne en "FAQ" side på en beat nettsted for å besvare noen av dine spørsmål du måtte ha om du er usikker på noe som er markedsført på nettsiden. Du bør være i stand til å lese alt klart og presist. Hvis du har noen spørsmål bør det være en måte å komme i kontakt med produsenten av Beats By Dre Mixr [url=http://www.beatsdrenorge.webgarden.com/]beats by dre norge[/url] Samtidig er toppen er det ingen fleksibilitet turban, de waggle i tankene er det lett. Som Zorro headset er lett på 145 gram, kan dette bare være et problem hvis du planlegger å hard trening. Det er også verdt å merke seg at solo HD lederskap pakke å kjempe flere headset produsenter, cottoned-på 41 høy friksjon økt bruk av stability.Beats By Dre Studio justbeats Zorro-øretelefonene spiller en feil tempo solo HD. Men vi kan ikke være for harde på disse svakhetene. Loose uegnet for noen god tetning og nytten av de skjulte stemmen porter for å nekte noen forseglet.

    Reply
  • Nike Zephyr Max 1 FB publicity, have a fervent color fabric, the unheard of shoes

    Posted by Geozyoceada on 04/23/2013 09:42pm

    In the summer in a goblet interior the imperturbable sprite seems to be a godlike fitting, but if the sprite "feet"? Will also give you a lapse, get a invigorating! This summer, Nike and Sprite [url=http://fossilsdirect.co.uk/glossarey.cfm]nike huarache free[/url] and his sneakers to a blend of outstanding example snow spread of unripened, unsullied and blue color blueprint in the time-honoured Nike Feeling Max 1 shoes let it be known a like a breath of fresh air chill scent.[url=http://markwarren.org.uk/goodbuy.cfm]nike free run uk[/url] Summer is the duration to pick a purified shoe, shoes should be a acceptable choice. Qualifying series Nike Quality Max HomeTurf megalopolis recently definitely comes up, this series in the immortal Melody Max shoes to London, Paris and Milan the three paid eulogy to the iconic see of Europe, combined with the characteristics of the three cities, Feeling Max 1 HYP,Tell Max 90 HYP,Connected Max 1 and shoes such as Style Max 95, combined [url=http://markwarren.org.uk/property-waet.cfm]nike air max 90[/url] with the Hyperfuse, as kind-heartedly as a heterogeneity of materials, such as suede, Whether you after functional or retro-everything.

    Reply
  • Jordan shoes mentioned Gene to go for the variety, a division of Nike

    Posted by TaddyGaffic on 04/20/2013 02:02pm

    Where did that get us? A bunch of banks writing loans that they didnt care if poeple would be able to pay for because they were conforming [url=http://markwarren.org.uk/property-waet.cfm]nike air max 90[/url] loans and Fannie and Freddie would back them. And their $150+ billion losses show that they are just as unable to predict or control the market as the rest of us. It won't work because it doesn't reward investors for taking the risks involved. In order to set a good example of following your dreams, you may wish to consider strictly limiting, or eliminating TV from your life. When people are involved in pursuing their dreams they often find that they do not have the time to watch TV. TV just gets in the way of pursuing other dreams.. Take a limousine ride with Aerosmith on one of the fastest rollercoaster you have to face. Live shows throughout the day from Beauty and the Beast [url=http://markwarren.org.uk/property-waet.cfm]nike air max 90[/url] will bring memories flooding back for young and old. You can get closer to the action and feel that he wanted to be in the spotlight. Other technology advancements are the midsole. It has a compression molded EVA for lasting impact protection. A Vibrakill shock-absorber in the heel provides a lot of [url=http://markwarren.org.uk/property-waet.cfm]air max 90[/url] comfort, and the Exact Pro technology combines a pebax plate and a Dynamic camflex in the forefoot for improved energy return on every step. Meindl Borneo Lady Pro - This shoe is just one of my wifes most popular hiking boots. It is appropriate for lengthy outdoor hikes and you can actually do a tiny stretch of hill hiking whilst sporting them. This product also includes memory foam

    Reply
  • updates

    Posted by Sharon on 07/04/2012 04:43am

    Are there any updates on this Where can I find the update of Andrey del Pozo? Thanks

    Reply
  • Problem with button

    Posted by Dasein on 08/27/2007 10:19pm

    I have a button IDC_BUTTON3 in the right top corner of the dialog. I added code like this
    
    {IDC_BUTTON3,     {CResizer::eWidth, IDC_MAIN, CResizer::eLeft},
                              {CResizer::eHeight, IDC_MAIN, Resizer::eBottom},
                              {CResizer::eFixed, IDC_MAIN, CResizer::eRight},
                              {CResizer::eFixed, IDC_MAIN, CResizer::eTop}},
    
    After resizing this button disappeared only. Wherein was I wrong?

    Reply
  • My dialog having ActiveX control

    Posted by dino on 07/19/2005 06:10am

    This class is really very useful and easy to use..thnx for that. But I am facing problem when I try to resize my dialog which is containing ActiveX control on it. The ActiveX control is not getting resized when i resize the dialog. What may be the problem?

    Reply
  • license and copyright considerations to use this class

    Posted by padmawar on 06/13/2005 10:14am

    This is a great class to resize the controls. I would like to know are there any license and copyright considerations to use this class. Thanks.

    Reply
  • Loading, Please Wait ...

Leave a Comment
  • Your email address will not be published. All fields are required.

Top White Papers and Webcasts

  • Learn How A Global Entertainment Company Saw a 448% ROI Every business today uses software to manage systems, deliver products, and empower employees to do their jobs. But software inevitably breaks, and when it does, businesses lose money -- in the form of dissatisfied customers, missed SLAs or lost productivity. PagerDuty, an operations performance platform, solves this problem by helping operations engineers and developers more effectively manage and resolve incidents across a company's global operations. …

  • Live Event Date: December 18, 2014 @ 2:00 p.m. ET / 11:00 a.m. PT The Internet of Things (IoT) incorporates physical devices into business processes using predictive analytics. While it relies heavily on existing Internet technologies, it differs by including physical devices, specialized protocols, physical analytics, and a unique partner network. To capture the real business value of IoT, the industry must move beyond customized projects to general patterns and platforms. Check out this upcoming webcast …

Most Popular Programming Stories

More for Developers

RSS Feeds