011
14.05.2004, 16:16 Uhr
~toxic
Gast
|
hi, also soweit iss das doch alles richtig, ausser ... ich schreib mal wie ich das gemacht hab: 1. ganz normalen dialog anlegen (MyDlg) 2. die sheetpage-dialoge anlegen und einer klasse zuweissen (Seite1, Seite2) das wars schon, die klasse die von cpropertysheet erbt kanste dir sparen. jetzt nur noch im "oninitdialog" (oder eine eigene funktion [OnCreateSheet], und die dann in oninit aufrufen) folgendes einfügen:
C++: |
// Membervariablen: // CPropertySheet* m_dlgPropertySheet; // CPropertyPage* m_SheetPage[4]; // int m_iSheetPages;
void MyDlg::OnCreateSheet() { m_dlgPropertySheet = new CPropertySheet("name"); ASSERT(m_dlgPropertySheet);
m_SheetPage[0] = new Seite1; m_SheetPage[1] = new Seite2; m_iSheetPages = 2; for ( int i = 0; i < m_iSheetPages; i++ ) m_dlgPropertySheet->AddPage(m_SheetPage[i]); // jetzt das tab "herstellen" m_dlgPropertySheet->Create(this, WS_CHILD | WS_VISIBLE | WS_TABSTOP, 0); // alle sheets anzeigen... damit werden sie initialisiert for ( i = 0; i < m_dlgPropertySheet->GetPageCount(); i++ ) m_dlgPropertySheet->SetActivePage(i);
// und die seite die die dann als erstes angezeigt werden soll m_dlgPropertySheet->SetActivePage(0);
// der zugriff vom hauptdialog geht dann so // zb. den text des "IDC_BUTTON1" auf seite "0" ändern ((CPropertyPage*)m_dlgPropertySheet->GetPage(0))->SetDlgItemText(IDC_BUTTON1, "Text");
// oder eine memberfunction der Seite2 aufrufen ((Seite2*)m_SheetPage[1])->DeineMemberFunction();
// man kann die klassen der pages auch weglassen wenn man keine // komplexen sachen macht und nicht auf WM_'s oder so reagieren muss // dann benutzt man das einfach mit der angelegten resource m_SheetPage[0] = new CPropertyPage(IDD_DIALOG1, 0);
// und kann dann zb so ein listctrl ansprechen CListCtrl* lStatus = ((CListCtrl*)(((CPropertyPage*)m_dlgPropertySheet->GetPage(2))->GetDlgItem(IDC_LIST1))); lStatus->SendMessage(LVM_SETEXTENDEDLISTVIEWSTYLE, 0, (LPARAM)LVS_EX_FULLROWSELECT|LVS_EX_ONECLICKACTIVATE|LVS_EX_FLATSB); lStatus->InsertColumn(0,"Status", LVCFMT_CENTER, 66); lStatus->InsertColumn(1,"Bezeichnung", LVCFMT_LEFT, 130); lStatus->InsertItem(0, " initial", 0);
|
ich hoffe das hilft -- grusz |