Re: Прерывание модальности в Диалоге
От: Dutchman Беларусь http://blogs.rsdn.org/ikemefula
Дата: 17.04.02 13:39
Оценка:
Здравствуйте 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 должен ожидать результата.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.