Здравствуйте SirAlex, Вы писали:
SA>Хтоелось бы написать свой класс наследованный от CDialog в котором есть 2 метода — прервать модальность, продолжить ее.
Такое частично уже написано, EndModalLoop . Только нет продолжения и тд.
SA>Посмотрел исходники CDialog. Вроде все понятно, т.е. можно прервать текущий ModalLoop, потом запустить новый. Но хотелось именно продолжить старый... Вобщем есть варианты этого кода но в итоге есть проблемы.
Есть способ — делаешь немодальный диалог, вешаешь хук AfxHookWindowCreate(this);
Он устанавливает m_pWndInit на твой диалог. Потом вызываешь RunModalLoop,и у тебя появляется модальность. По нажатию на батон или еще как вызываешь EndModalLoop — . Теперь немодалныйснова и сообщения получаем от глобального цикла. Потом снова запускаешь в своем диалоге RunModalLoop и все.
Другой способ. В DoModal выполняется CWnd::RunModalLoop — он выбирает сообщения из очереди, а паренту посылает WM_ENTERIDLE, WM_KICKIDLE и тд. Тебе нужно это заменить. Переписывая DoModal, PreModal,PostModal — они виртуальные. Нужно будет кучу проверок делать. Но это несколько неудобный способ. Все из-за того, что DoModal должен ожидать результата.