Knowledge Base Nr: 00303 tabdlg.cpp - http://www.swe-kaiser.de

Downloads: source sample project

MFC: VS2005: Tabbed Dialog mit PropertySheet und PropertyPages in EINEM h/cpp-file

  
### resourcen anlegen:

- projekt|klasse hinzufügen|mfc|mfc-klasse:
klassenname: klassenname des tabbed dialog
basisklasse: propertysheet

- für jeden tab:
projekt|klasse hinzufügen|mfc|mfc-klasse:
klassenname: klassenname des tabs
basisklasse: propertypage
WICHTIG: gleichen namen für h-file und cpp-file wie für propertysheet!!!

- designen der dialoge in resourceneditor

WICHTIG: die pages müssen vor dem sheet definiert sein!!!
- zuerst die propertypages erzeugen dann das propertysheet
- oder: im h-file sheetdefinition an den schluss umkopieren

- member für jede page in sheet anlegen (evtl. public!)
NewTurbine turbineDlg;
NewPumpe pumpeDlg;
int m_nSelPage;

- in beiden konstruktoren des sheets einfügen:
m_nSelPage = iSelectPage;
AddPage(&turbineDlg);
AddPage(&pumpeDlg);

- WM_DESTROY handler für sheet einrichten
void NewPropSheet::OnDestroy()
{
m_nSelPage = GetActiveIndex();

CPropertySheet::OnDestroy();
}

### verwenden des tabbed dialog:

#include "FileNewDlg.h"

void CMy_CurvesApp::OnFileNew()
{
NewPropSheet dlg(L"Neu", m_pMainFrame, 0);

int nRes = dlg.DoModal();

if (nRes != IDCANCEL)
{
int nPageIndex = dlg.m_nSelPage;

switch (nPageIndex)
{
case 0: //neue pumpe
m_pDocTemplatePumpe->OpenDocumentFile(NULL);
break;
case 1: //neue turbine
m_pDocTemplateTurbine->OpenDocumentFile(NULL);
break;
default:
ASSERT(FALSE);
}
}
}


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

pApp->DoAction();
}

//standardverhalten ändern
The code below will hide the apply button. The IDs of the standard buttons are:
IDOK, IDCANCEL, IDHELP and ID_APPLY_NOW.

BOOL NewPropSheet::OnInitDialog()
{
BOOL bResult = CPropertySheet::OnInitDialog();

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

return bResult;
}

///////// propertysheets - einzelne tabbeschriftungen ändern
BOOL NewPropSheet::OnInitDialog()
{
BOOL bResult = CPropertySheet::OnInitDialog();

CTabCtrl* tab = GetTabControl();
int c = tab->GetItemCount();

for (int n=0; n<c; n++)
{
TCHAR text[50] = {0};
TCITEM item;
item.mask = TCIF_TEXT;
item.pszText = text;
item.cchTextMax = sizeof(text);

tab->GetItem(n, &item);

CString title(text);
title = theApp.Translate(title);
if (title != "")
{
item.mask = TCIF_TEXT;
item.pszText = title.GetBuffer();
item.cchTextMax = title.GetLength();
tab->SetItem(n, &item);
title.ReleaseBuffer();
}
}

return bResult;
}