CResizableSheet(Ex) and
CResizablePage(Ex)
These
four classes handle
resizable
property sheets, and are now
fully based on my ResizableLib class
library.
The
user will have the ability to
resize
the dialog,
with consequent rearrangement of child
windows. You can control the minimum and
maximum size allowed, as well as the
maximized size and position of the
dialog. The size grip is displayed by
default, but you may turn it off.
Automatic Save/Restore the dialog's size
and position, along with the active
page, is also supported.
The
Sample
Applications
This
is a view of the
sample
dialog
at minimum size as a
property sheet
and in wizard mode:
Note
that the minimum width is not the
default. You may see how to do this in
the next section.
This
is a screenshot of the resizable version
of Wizard2000 sample project coming with
Visual C++.
How
to use?
Add
the ResizableLib to
your project's workspace, as explained
in the relative.
Create
a property
sheet or wizard dialog and do
the relative associations with MFC
classes, for example using the
Property Sheet
component, or take one you have
already made which you want to be
resizable.
You don't need to change any window
style to have the
dialog resizing.
Include 'ResizableSheet.h'
in the property
sheet associated header file.
Search and replace all
CPropertySheet
occurences with
CResizableSheet
in both your .cpp and .h files, just as
if your property sheet class was derived
from
CResizableSheet
instead of
CPropertySheet
.
Include 'ResizablePage.h'
in the property
pages associated header file.
Search and replace all
CPropertyPage
occurences with
CResizablePage
in both your .cpp and .h files, just as
if your property page classes were
derived from
CResizablePage
instead of
CPropertyPage
.
The
same applies for wizard dialogs, of
course.
Your
property sheet
header file should appear like this:
Collapse |
Copy Code
#include "MyPropertyPages.h"
#include "ResizableSheet.h"
class CMyPropertySheet : public CResizableSheet
{
DECLARE_DYNAMIC(CMyPropertySheet)
public:
CMyPropertySheet(CWnd* pWndParent = NULL);
}
In your
OnInitDialog
override you may change the initial
settings of your property sheet, such as
the minimum size and automatic
save/restore, that can optionally set
also the active page.
Collapse |
Copy Code
BOOL CMyPropertySheet::OnInitDialog()
{
CResizableSheet::OnInitDialog();
CRect rc;
GetWindowRect(&rc);
SetMinTrackSize(CSize(GetMinWidth(), rc.Height()));
EnableSaveRestore(_T("Properties"), TRUE, TRUE);
return TRUE;
}
Your
property pages
header file should appear like this:
Collapse |
Copy Code
#include "ResizablePage.h"
class CMyPropertyPage1 : public CResizablePage
{
DECLARE_DYNCREATE(CMyPropertyPage1)
}
In each page's
OnInitDialog
override you only have to set a layout
for your controls. You specify where to
attach the top-left and bottom-right
corners by horizontal/vertical
percentage or using predefined
constants.
Collapse |
Copy Code
BOOL CMyPropertyPage2::OnInitDialog()
{
CResizablePage::OnInitDialog();
AddAnchor(IDC_LIST1, TOP_LEFT, CSize(50,70));
AddAnchor(IDC_PICTURE1, CSize(50,0), CSize(100,70));
AddAnchor(IDC_GROUP1, CSize(0,70), BOTTOM_RIGHT);
AddAnchor(IDC_CHECK1, CSize(0,85));
AddAnchor(IDC_RADIO1, CSize(100,85));
AddAnchor(IDC_COMBO1, CSize(100,70));
AddAnchor(IDC_BUTTON1, BOTTOM_RIGHT);
m_ctlEdit1.AddString(_T("Just a single item to test the "
"listbox behavior with very long lines..."));
m_ctlEdit1.SetHorizontalExtent(300);
return TRUE;
}
You
are ready to rebuild your project and
you will have a
resizable property sheet
or a wizard dialog just as you wanted.