Wie die Standardschaltfläche in CPropertySheet Wizard MFC-Anwendung löschen?
-
11-09-2019 - |
Frage
Hey guys..I ist die Gestaltung einen Set-up Assistenten CPropertySheet und CPropertyPage in MFC-Anwendung mit ... habe ich das Design abgeschlossen, aber das Ding is..In normales cProperty Blatt gibt es vier Standardtasten „BACK NEXT HELP FINISH “... aber ich will nur NEXT und FINISH Tasten ... ich benutze den folgenden Code zu tun, aber es ist mir eine Laufzeit geben error.stating ..‚Stack-Überlauf‘ Ich bin nicht sicher, wo genau diesen Code enthalten (ich meine, in der Klasse) .. noch, wie diese Funktion zu nutzen .. kann jemand mir helfen ..
BOOL CExtractorFinalUIDlg :: OnSetActive () { CSelfExtractor setButtons = (CSelfExtractor ) GetParent (); setButtons-> SetWizardButtons (PSWIZB_NEXT | PSWIZB_FINISH | PSWIZB_CANCEL);
zurück CExtractorFinalUIDlg :: OnSetActive ();
}
Lösung
Im Konstruktor Ihrer Property, legt
m_psh.dwFlags |= PSH_NOAPPLYNOW;
Die m_psh ist vom Typ PROPSHEETHEADER Sie eine Menge Dinge einstellen.
Andere Tipps
Die eigentliche Ursache des Stack-Überlauf ist, dass Sie rufen CExtractorFinalUIDlg :: OnSetActive () in der CExtractorFinalUIDlg :: OnSetActive (). So ruft die Funktion sich selbst rekursiv. Dies führt zu dem Stack-Überlauf.
Die Funktion so etwas wie sein könnte:
BOOL CExtractorFinalUIDlg::OnSetActive() {
CPropertySheet* sheet = (CPropertySheet*) GetParent();
ASSERT(sheet);
// Combination of PSWIZB_NEXT and PSWIZB_FINISH might be useless
sheet->SetWizardButtons(PSWIZB_NEXT | PSWIZB_FINISH | PSWIZB_CANCEL)
return CPropertyPage::OnSetActive();
}
Sehen Sie MSDN: CPropertySheet :: SetWizardButtons für mehr Infos.