如何删除CPPropertySheet向导MFC应用程序中的默认按钮?

如何删除CPPropertySheet向导MFC应用程序中的默认按钮?,mfc,cpropertysheet,classwizard,Mfc,Cpropertysheet,Classwizard,大家好,我正在MFC应用程序中使用CPropertySheet和CpropertyPage设计一个设置向导…我已经完成了设计,但问题是..在正常的CProperty Sheet中有四个默认按钮“返回下一个完成帮助”…但我只需要“下一步”和“完成”按钮…我使用了以下代码来执行此操作,但它会给我一个运行时错误。声明..“堆栈溢出” 我不知道该在何处包含此代码(我的意思是在哪个类中)…也不知道如何使用此函数。。有人能帮我吗 布尔 CExtractorFinalUIDlg::OnSetActive(){

大家好,我正在MFC应用程序中使用CPropertySheet和CpropertyPage设计一个设置向导…我已经完成了设计,但问题是..在正常的CProperty Sheet中有四个默认按钮“返回下一个完成帮助”…但我只需要“下一步”和“完成”按钮…我使用了以下代码来执行此操作,但它会给我一个运行时错误。声明..“堆栈溢出” 我不知道该在何处包含此代码(我的意思是在哪个类中)…也不知道如何使用此函数。。有人能帮我吗

布尔 CExtractorFinalUIDlg::OnSetActive(){ CSELF提取器收进按钮= (CSelfExtractor)GetParent(); 设置按钮->设置向导按钮(PSWIZB_下一步 |PSWIZB|U完成| PSWIZB|U取消)

返回 CExtractorFinalUIDlg::OnSetActive()

}


在propertysheet的构造函数中,插入

m_psh.dwFlags |= PSH_NOAPPLYNOW;

m_psh是一种类型,您可以设置很多内容。

在属性表的构造函数中,插入

m_psh.dwFlags |= PSH_NOAPPLYNOW;

m_psh是一种类型,您可以设置很多东西。

堆栈溢出的实际原因是您在CExtractorFinalUIDlg::OnSetActive()中调用CExtractorFinalUIDlg::OnSetActive()。所以函数递归地调用自己。这会导致堆栈溢出

该函数可能类似于:

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();
}

查找更多信息。

堆栈溢出的实际原因是在CExtractorFinalUIDlg::OnSetActive()中调用CExtractorFinalUIDlg::OnSetActive()。所以函数递归地调用自己。这会导致堆栈溢出

该函数可能类似于:

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();
}

查找更多信息。

能否显示您的CPropertySheet/CPropertyPage类代码?仅凭这张快照很难说。在快照中,我可以看到CSelfExtractor setButtons应该是一个指针,但我认为它在您的实际代码中是可以的,因为它不会编译。tanx 4您的回复Javier De Pedro,您所说的是正确的,它实际上是一个指针。我键入时出错…我将重新定义上述函数。。。BOOL CPropertyPage::onsetActive(){cpropertypheet*setButtons=(CPropertSheet)GetParent();setButtons->SetWizardButtons(PSWIZB|u NEXT | PSWIZB| u FINISH);return CExtractorFinalUIDlg::onsetActive()}现在清楚了吗,你所说的是正确的,它实际上是一个指针。我输入了一个错误…我将重新定义上面的函数。。。BOOL CPropertyPage::onsetActive(){cpropertypheet*setButtons=(CPropertSheet)GetParent();setButtons->SetWizardButtons(PSWIZB|u NEXT | PSWIZB| u FINISH);return CExtractorFinalUIDlg::onsetActive();}现在清除了是的,清除了。我看不出这段代码中有任何问题……但我需要看到整个过程才能知道发生了什么。抱歉,没有更多信息,我无法帮助您。您能出示您的CPropertySheet/CPropertyPage类代码吗?仅凭这张快照很难说。在快照中,我可以看到CSelfExtractor setButtons应该是一个指针,但我认为它在您的实际代码中是可以的,因为它不会编译。tanx 4您的回复Javier De Pedro,您所说的是正确的,它实际上是一个指针。我键入时出错…我将重新定义上述函数。。。BOOL CPropertyPage::onsetActive(){cpropertypheet*setButtons=(CPropertSheet)GetParent();setButtons->SetWizardButtons(PSWIZB|u NEXT | PSWIZB| u FINISH);return CExtractorFinalUIDlg::onsetActive()}现在清楚了吗,你所说的是正确的,它实际上是一个指针。我输入了一个错误…我将重新定义上面的函数。。。BOOL CPropertyPage::onsetActive(){cpropertypheet*setButtons=(CPropertSheet)GetParent();setButtons->SetWizardButtons(PSWIZB|u NEXT | PSWIZB| u FINISH);return CExtractorFinalUIDlg::onsetActive();}现在清除了是的,清除了。我看不出这段代码中有任何问题……但我需要看到整个过程才能知道发生了什么。对不起,没有更多的信息我帮不了你。