A tab-like sheet control | CodeGuru

A tab-like sheet control

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 […]

Written By
CodeGuru Staff
CodeGuru Staff
Jan 24, 1999
1 minute read
CodeGuru content and product recommendations are editorially independent. We may make money when you click on links to our partners. Learn More

Download Source Code and Examples

To add the sheet control to CChildFrame in a MDI application:

  1. add a new member CSheetsWnd m_wndSheets to CChildFrame class.
  2. 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:

  1. add a new member CSheetsWnd m_wndSheets to your dialog class.
  2. create n dialogs in resource editor, each with the WS_CHILD style.
  3. declare n dialog members in you dialog. One of these dialogs must be
    created with WS_VISIBLE style.
  4. overwrite OnInitDialog in your dialog class, and add m_wndSheets.Attach(this).
  5. 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

CodeGuru Logo

CodeGuru covers topics related to Microsoft-related software development, mobile development, database management, and web application programming. In addition to tutorials and how-tos that teach programmers how to code in Microsoft-related languages and frameworks like C# and .Net, we also publish articles on software development tools, the latest in developer news, and advice for project managers. Cloud services such as Microsoft Azure and database options including SQL Server and MSSQL are also frequently covered.

Property of TechnologyAdvice. © 2026 TechnologyAdvice. All Rights Reserved

Advertiser Disclosure: Some of the products that appear on this site are from companies from which TechnologyAdvice receives compensation. This compensation may impact how and where products appear on this site including, for example, the order in which they appear. TechnologyAdvice does not include all companies or all types of products available in the marketplace.