Resizable CPropertySheet
I recently needed a wizard that could be resized by the user. After looking around on CodeGuru I found nothing that would do this completely so I created my own (since I have taken so much code and ideas from CodeGuru, I felt that the time had come to give something back).
After a while I came up with the class CResizablePropertySheet. It is derived from the MFC CPropertySheet class and handles the resizing of the standard wizard buttons, the tab control and the pages included in the sheet. The CResizablePropertySheet uses a class CDlgItemResizer that handles the resizing of the controls in the property sheet. In an article written by Eli Vingot (elivingt@internet-zahav.net) implementing a resizable dialog, I found some great code. I have been writing control-resizing code manually for almost 10 years and the idea just never came to me that this could be automated. Eli Vingot's code really takes the pain out of resizing.
The next thing to do is to handle the resizing in all of the included pages. Create a page the normal way and declare a CDlgItemResizer member variable inside it. Also, add the OnInitDialog() and OnSize() member functions. In the OnInitDialog() function, use the CDlgItemResizer::Add() routine to add all the controls that are to be resized. Make sure to use the correct combination of the resizing flags (lock to top/left/right/bottom). In the OnSize() member function, add a single line of code to resize all controls: call the CDlgItemResizer::Resize().
Downloads
Download demo project - 20 KbHistory
Comments
nPyZOi BU aH YhX SAPO np
Posted by RwHPBkEXXv on 06/22/2013 03:47pmbuy tramadol best place to buy tramadol online reviews - tramadol 50mg norsk
Replyadd minimize & maximize buttons
Posted by div!sion on 10/19/2009 06:04amYou can add the window minimize and maximize buttons by adding "WS_MAXIMIZEBOX|WS_MINIMIZEBOX" to ModifyStyle called at the end of CResizablePropertySheet::OnInitDialog().
ReplyCResizablePropertySheet Multiple Instance Crashes Application
Posted by Legacy on 09/29/2003 12:00amOriginally posted by: Ninad Shah
help
Posted by wanganjun78 on 06/07/2004 01:38amCan you give me some advice about thiss problem
ReplyDlgItemResizer.Resize() changes z-order
Posted by Legacy on 08/14/2003 12:00amOriginally posted by: Mike Lischke
I'm perplex that nobody every realized that the DeferWindowPos calls in the Resize method currently change the z-order of the windows (or didn't they just tell us?). This has ugly side effects like controls on a group box suddenly disappear because they are now behind the box.
The solution for this problem is pretty simple. Replace the last value (0) in the DeferWindowPos calls by SWP_NOZORDER and bob's your uncle.
Mike
--
www.delphi-gems.com
www.lischke-online.de
www.delphi-unicode.net
How to change "DlgItemResizer.Resize() changes z-order"
Posted by ken123 on 11/18/2004 01:04pmHow do you go by doing it? Can you show us by example on how to "Replace the last value (0) in the DeferWindowPos calls by SWP_NOZORDER" Thanks.
ReplyGood code. Thanks a lot.
Posted by Legacy on 03/13/2003 12:00amOriginally posted by: rm_pkt
Thanks a lot Magnus.
It is very useful to me as I need Resizeable Property sheet.
And thanks to KL (2000/05/26). Its really good idea for
modeless in standard mode
CDlgItemResizer::Resize(CFormView *) not implemented
Posted by Legacy on 02/01/2002 12:00amOriginally posted by: Ian
Magnus,
Great code, thank you. I've just worked into my project and your work has shaved days of my development schedule.
Just wondering why the Resize(CFormView*) method isn't implemented on CDlgItemResizer?
I only discovered the omission when I decided to reuse your resizer class in a form view. It seems to work it we use the CWnd* method instead, but I was wondering what the specialisation was intended to do?
Anyone got any ideas?
Ian
ReplyProblems with displaying property pages
Posted by Legacy on 12/18/2001 12:00amOriginally posted by: Alexander Vogt
I tried to use the classes with a property sheet that I create at runtime. Everything works fine, but after resizing, the content of the active property page is gone. One has to change onto another tab first, and then go back again, to see the list-control it contains. I tried to insert several kinds of redraws, but it didn't work.
I'm really not an expert at MFC , and the solution may e simple. Could anyone help?
thanks
Alex
ReplyProblem: Flickering on resize
Posted by Legacy on 09/01/2001 12:00amOriginally posted by: Simon
Hi,
Replyanybody knows how to remove flickering on resizing of the property sheet ?
Problems Resizing X-Axis
Posted by Legacy on 11/15/2000 12:00amOriginally posted by: Andreas Lander
Resizing the Height of the Propertysheet is no problem, but i cant resize the X-Axis...
ReplyModeless Issues in Standard Mode
Posted by Legacy on 05/26/2000 12:00amOriginally posted by: KL
Loading, Please Wait ...