2009-12-02 43 views
1

嘿傢伙..我正在MFC應用程序中使用CPropertySheet和CpropertyPage設計一個設置嚮導...我已經完成設計,但事情是..在正常的CProperty工作表中有四個默認按鈕「BACK NEXT FINISH HELP」 ...但我只想要NEXT和FINISH按鈕...我用下面的代碼來做到這一點,但它給了我一個運行時error.stating ..「堆棧溢出」 我不確定在哪裏包括這個代碼(我的意思是在哪個班)..也不知道如何使用此功能..任何一個可以幫助我..如何刪除CPropertySheet嚮導MFC應用程序中的默認按鈕?

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

return CExtractorFinalUIDlg :: OnSetActive();

}

+0

您能否顯示您的CPropertySheet/CPropertyPage類代碼?這個快照很難說。 在snapshoot中,我可以看到CSelfExtractor setButtons應該是一個指針,但是我認爲它在你的真實代碼中沒問題,因爲它不會編譯。 – 2009-12-02 07:30:08

+0

tanx 4你的回覆哈維爾德佩德羅,你說的是正確的,它其實是一個指針..我犯了一個錯誤輸入...我將重新定義上述功能...... BOOL CPropertyPage :: onsetActive() CPropertySheet * setButtons =(CPropertSheet)GetParent(); setButtons-> SetWizardButtons(PSWIZB_NEXT | PSWIZB_FINISH); setButtons-> SetWizardButtons(PSWIZB_NEXT | PSWIZB_FINISH); return CExtractorFinalUIDlg :: OnSetActive(); } 是明確的,現在 – kiddo 2009-12-02 07:53:19

+0

坦4回合回覆哈維爾·德佩德羅,什麼ü說的是正確的它實際上是一個pointer..i犯了一個錯誤輸入文...我將再次重新定義上述功能... BOOL CPropertyPage :: onsetActive() { CPropertySheet * setButtons =(CPropertSheet)GetParent(); setButtons-> SetWizardButtons(PSWIZB_NEXT | PSWIZB_FINISH); setButtons-> SetWizardButtons(PSWIZB_NEXT | PSWIZB_FINISH); return CExtractorFinalUIDlg :: OnSetActive(); } 現在清楚了 – kiddo 2009-12-02 07:53:57

回答

0

在你的PropertySheet的構造,插入

m_psh.dwFlags |= PSH_NOAPPLYNOW; 

的m_psh中是PROPSHEETHEADER類型的,你可以設置很多東西。

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更多的相關信息。

相關問題