Всем привет
в классе CDialog есть виртуальная функция OnInitDialog
при чем при ее переопределении в производных классах ее надо вызывать явно
все равно она там выполняет разный stuff в том числе вызывает DoDataExchange
если ее забыть вызвать ничего не будет работать
virtual BOOL OnInitDialog()
{
... // тут забыли __super::OnInitDialog
... // а тут уже путь точно не к успеху
}
я попался на этой ошибке я определил
virtual void DoDataExchange(CDataExchange* pDX)
{
...
}
чтобы связать контролы CxxCtrl с элеменати управления (static,button,..)
но не вызвал OnInitDialog базового класса из своей OnInitDialog и ничего не работало
НАКОНЕЦ ТО ВОПРОС: почему так сделано ?
можно же было в месте где вызывается виртуальная OnInitDialog
вызывать вместо нее не виртуальную функцию например Dummy она бы
выполняла нужный код
(который сейчас находится в virtual BOOL CDialog::OnInitDialog())
а virtual BOOL CDialog::OnInitDialog сделать пустой заглушкой на случай
если мы не определили свою OnInitDialog а потом Dummy делала бы
(после того как все проинитит) виртуальный вызов нашей OnInitDialog
а если ее нет то вызывалась бы ее пустая заглушка
вот и весь вопрос... почему так нельзя было сделать...?