Как удалить кнопку по умолчанию в приложении CPropertySheet Wizard MFC?
Привет, ребята. Я проектирую мастер настройки с использованием CPropertySheet и CpropertyPage в приложении MFC... Я завершил проектирование, но дело в том... В обычном CProperty Sheet есть четыре кнопки по умолчанию "BACK NEXT FINISH HELP"...но мне нужны только кнопки NEXT и FINISH... Я использовал следующий код для этого, но он дает мне время выполнения error.stating.."переполнение стека" Я не уверен, где именно включить этот код (я имею в виду в какой класс).. ни как использовать эту функцию.. любой может мне помочь..
BOOL CExtractorFinalUIDlg:: OnSetActive () {CSelfExtractor setButtons = (CSelfExtractor) GetParent (); setButtons-> SetWizardButtons (PSWIZB_NEXT | PSWIZB_FINISH | PSWIZB_CANCEL);
return CExtractorFinalUIDlg:: OnSetActive ();
}
2 ответа
В конструкторе вашей таблицы вставьте
m_psh.dwFlags |= PSH_NOAPPLYNOW;
M_psh имеет тип PROPSHEETHEADER, вы можете установить множество вещей.
Фактическая причина переполнения стека заключается в том, что вы вызываете 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 для получения дополнительной информации.