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.
How to change "DlgItemResizer.Resize() changes z-order"
Posted by ken123
on 11/18/2004 01:04pm
How 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"
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?
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?
These issues appear when running the property sheet as
modeless in standard mode. You can recreate them in the
demo project by making CResizablePropertySheet modeless:
1. The initial property page appears blank until you switch
to a different page then switch back.
2. When resizing a page the controls disappear from the
As Paul Hurley pointed out, 'm_rcClient' and 'm_rcPage' are
used by GetPageRect() before they are initialized in
OnInitDialog(). Yet clearing them in the constructor
doesn't allow GetPageRect() to get the right values. Thus
the controls are drawn somewhere off the property page.
To get around this problem I added the flag
'm_bInitialized' to CResizablePropertySheet. I set it
to 'false' in the constructors and to 'true' at the end of
OnInitDialog() before returning. Then I added this line to
OnSize() after 'InvalidateRect(m_rcGripper, TRUE);':