Как удалить кнопку по умолчанию в приложении 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 для получения дополнительной информации.

Другие вопросы по тегам