Knowledge Base Nr: 00145 tabcontrol.cpp - http://www.swe-kaiser.de

MFC: Tabbed Dialog mit PropertySheet und PropertyPages

  
Resourceneditor:
================
Insert Dialog IDD_PROP_PAGES_xxx
Controls einfügen

ClassWizard:
============
Add Class: New IDD: IDD_PROP_PAGE_xxx base class: CPropertyPage
Add Class: New base class: CPropertySheet

Code:
=====
//in App-Klasse header includieren
#include "ProPage1.h"
#include "PropPage2.h"
#include "PropPage3.h"

//member oder static variablen anlegen:
CMyPropertySheet* g_dlgPS;
CProPage1* g_pp1a;
CProPage1* g_pp1b;//CPropPage2 pp2;
CPropPage3* g_pp3;

BOOL CTabdlg1App::InitInstance()
{
...
//dialoge anlegen...
g_pp1a = new CProPage1();
g_pp1b = new CProPage1();
g_pp3 = new CPropPage3();

g_dlgPS = new CPropertySheet("Simple PropertySheet");
//...und einfügen
g_dlgPS->AddPage(g_pp1a);
g_dlgPS->AddPage(g_pp1b);
g_dlgPS->AddPage(g_pp3);

m_pMainWnd = g_dlgPS;

//originaldialog ignorieren stattdessen unser PropertySheet aufschalten
int nResponse = g_dlgPS->DoModal(); //dlg.DoModal();
if (nResponse == IDOK)
{
...
}

//zugriff auf die einzelnen dialoge
void CTabdlg1App::DoAction()
{
g_pp1a->GetDlgItem(IDC_EDIT1)->SetWindowText("page1");
g_pp1b->GetDlgItem(IDC_EDIT1)->SetWindowText("page2");
//ACHTUNG: bug oder feature?!
//wenn der dialog noch nie angewählt wurde gehts schief!!!
//also: fenster prüfen!
CWnd pWnd = g_pp3->GetDlgItem(IDC_EDIT1);
if (pWnd)
pWnd->SetWindowText("page3");

g_dlgPS->SetActivePage(1);
}

//in dialogklassen funktionen in der app-klasse aufrufen
void CPropPage3::OnButton1()
{
CTabdlg1App* pApp = (CTabdlg1App*)AfxGetApp();

pApp->DoAction();
}

The code below will hide the OK button. The IDs of the standard buttons are IDOK, IDCANCEL, IDHELP and ID_APPLY_NOW.

CWnd *pWnd = GetDlgItem( IDOK );
pWnd->ShowWindow( FALSE );