Knowledge Base Nr: 00303 tabdlg.cpp - http://www.swe-kaiser.de
Downloads:
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;
}