Download Source Code and Examples
To add the sheet control to CChildFrame in a MDI application:
- add a new member CSheetsWnd m_wndSheets to CChildFrame class.
- override CChildFrame::OnCreateClient, and inside the function
call m_wndSheets.Attach(this). From this moment all child windows from
CChildFrame are put in sheet the contol, each view with one page.
To add the sheet control to a CDialog:
- add a new member CSheetsWnd m_wndSheets to your dialog class.
- create n dialogs in resource editor, each with the WS_CHILD style.
- declare n dialog members in you dialog. One of these dialogs must be
created with WS_VISIBLE style. - overwrite OnInitDialog in your dialog class, and add m_wndSheets.Attach(this).
- call the Create function for each dialog declared as a member variable.
(m_dlg1.Create(IDD_DIALOG1, this));
Suppose that your dialog contains one button IDOK and a button IDCANCEL. These
buttons are children of your dialog. To eliminate the buttons from the pages sheet
control you must derive a new class CSheetsDialog, and overwrite GetFirstView(),
GetNextView() virtual functions from CSheetsWndas shown below. Of course, the variable
type of m_wndSheets must be changed to the new class CSheetDialog.
The class CSheetsWnd could be easily extended with more features. I will try
to put more features to this class.
// Declare this struct for store a set of ID’s control.
struct SCtrlID
{
CMap m_mapCtrlIDs;
SCtrlID()
{
m_mapCtrlIDs[IDOK] = TRUE;
m_mapCtrlIDs[IDCANCEL] = TRUE;
};
// Check if ID is in map or not.
BOOL Is(UINT id)
{
BOOL bValue = TRUE;
return m_mapCtrlIDs.Lookup(id, bValue);
}
};
// class CSheetsDialog header
class CSheetsDialog : public CSheetsWnd
{
public:
CSheetsDialog();
virtual ~CSheetsDialog();
virtual CWnd* GetNextView();
virtual CWnd* GetFirstView();
private:
CWnd* GetNextViewValid(CWnd* pWnd);
static SCtrlID m_ctrlID;
};
// class CSheetsDialog implementation
SCtrlID CSheetsDialog::m_ctrlID;
CSheetsDialog::CSheetsDialog()
{
}
CSheetsDialog::~CSheetsDialog()
{
}
CWnd* CSheetsDialog::GetFirstView()
{
return GetNextViewValid(CSheetsWnd::GetFirstView());
}
CWnd* CSheetsDialog::GetNextView()
{
return GetNextViewValid(CSheetsWnd::GetNextView());;
}
// Scan if ID of pWnd is not in IDOK or IDCANCEL
CWnd* CSheetsDialog::GetNextViewValid(CWnd * pWnd)
{
while (pWnd && (m_ctrlID.Is(pWnd->GetDlgCtrlID())))
pWnd = CSheetsWnd::GetNextView();
return pWnd;
}
Last updated: 12 August 1998