Comment supprimer le bouton par défaut dans l'application Assistant CPropertySheet MFC?
-
11-09-2019 - |
Question
Hey guys..I suis la conception d'un assistant de configuration à l'aide CPropertySheet et CPropertyPage en application MFC ... J'ai terminé la conception, mais la chose is..In feuille de CProperty normal, il y a quatre boutons par défaut « AIDE FINISH RETOUR SUIVANT » ... mais je ne veux que des boutons NEXT et la fin ... J'ai utilisé le code suivant pour le faire, mais sa me donner un temps d'exécution error.stating .. « débordement de pile » Je ne sais pas où exactement d'inclure ce code (je veux dire dans quelle classe) .. ni comment utiliser cette fonction .. peut me aider ..
BOOL CExtractorFinalUIDlg :: OnSetActive () { CSelfExtractor setButtons = (CSelfExtractor ) GetParent (); setButtons-> SetWizardButtons (PSWIZB_NEXT | PSWIZB_FINISH | PSWIZB_CANCEL);
retour CExtractorFinalUIDlg :: OnSetActive ();
}
La solution
Dans le constructeur de votre propertysheet, insérez
m_psh.dwFlags |= PSH_NOAPPLYNOW;
Le m_psh est de type PROPSHEETHEADER , vous pouvez définir beaucoup de choses.
Autres conseils
La cause réelle du débordement de la pile est que vous appelez CExtractorFinalUIDlg :: OnSetActive () dans le CExtractorFinalUIDlg :: OnSetActive (). Ainsi, la fonction elle-même appelle de manière récursive. Cela conduit à la débordement de pile.
La fonction pourrait être quelque chose comme:
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();
}
Recherchez MSDN: CPropertySheet :: SetWizardButtons pour plus d'infos.