【问题标题】:How to delete the default button in CPropertySheet Wizard MFC application?如何删除 CPropertySheet Wizard MFC 应用程序中的默认按钮?
【发布时间】:2009-12-02 06:40:39
【问题描述】:

嘿伙计们..我正在设计一个在 MFC 应用程序中使用 CPropertySheet 和 CpropertyPage 的设置向导...我已经完成了设计,但问题是..在正常的 CProperty Sheet 中有四个默认按钮“BACK NEXT FINISH HELP “......但我只想要 NEXT 和 FINISH 按钮......我使用下面的代码来做到这一点,但它给了我一个运行时错误.stating..“堆栈溢出” 我不确定在哪里包含此代码(我的意思是在哪个类中)..也不知道如何利用此功能..任何人都可以帮助我..

布尔值 CExtractorFinalUIDlg::OnSetActive() { CSelfExtractor setButtons = (CSelfExtractor)GetParent(); setButtons->SetWizardButtons(PSWIZB_NEXT | PSWIZB_FINISH | PSWIZB_CANCEL);

返回 CExtractorFinalUIDlg::OnSetActive();

}

【问题讨论】:

  • 你能展示你的 CPropertySheet/CPropertyPage 类代码吗?仅凭这张快照很难说。在快照中,我可以看到 CSelfExtractor setButtons 应该是一个指针,但我想在你的真实代码中它是可以的,因为否则它不会编译。
  • tanx 4 你的回复哈维尔德佩德罗,你说的是正确的,它实际上是一个指针..我在输入时犯了一个错误......我将再次重新定义上述函数...... BOOL CPropertyPage: :onsetActive() { CPropertySheet *setButtons = (CPropertSheet)GetParent(); setButtons->SetWizardButtons(PSWIZB_NEXT | PSWIZB_FINISH);返回 CExtractorFinalUIDlg::OnSetActive(); } 现在清楚了吗
  • tanx 4 你的回复哈维尔德佩德罗,你说的是正确的,它实际上是一个指针..我在输入时犯了一个错误......我将再次重新定义上述函数...... BOOL CPropertyPage: :onsetActive() { CPropertySheet *setButtons = (CPropertSheet)GetParent(); setButtons->SetWizardButtons(PSWIZB_NEXT | PSWIZB_FINISH);返回 CExtractorFinalUIDlg::OnSetActive(); } 现在清楚了吗
  • 是的,这很清楚。我在这段代码中看不到任何问题......但我需要看到整个事情才能知道发生了什么。抱歉,如果没有更多信息,我无法为您提供帮助。

标签: mfc cpropertysheet classwizard


【解决方案1】:

堆栈溢出的实际原因是你在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();
}

查看MSDN: CPropertySheet::SetWizardButtons了解更多信息。

【讨论】:

    【解决方案2】:

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

    m_psh.dwFlags |= PSH_NOAPPLYNOW;
    

    m_psh的类型是PROPSHEETHEADER,可以设置很多东西。

    【讨论】:

      猜你喜欢
      • 2017-12-31
      • 1970-01-01
      • 2021-08-25
      • 1970-01-01
      • 1970-01-01
      • 2011-05-15
      • 1970-01-01
      • 2011-01-21
      • 1970-01-01
      相关资源
      最近更新 更多