Re[2]: Прерывание модальности в Диалоге
От: SirAlex Россия  
Дата: 18.04.02 08:52
Оценка: 10 (1)
Здравствуйте Dutchman, Вы писали:


D>Другой способ. В DoModal выполняется CWnd::RunModalLoop — он выбирает сообщения из очереди, а паренту посылает WM_ENTERIDLE, WM_KICKIDLE и тд. Тебе нужно это заменить. Переписывая DoModal, PreModal,PostModal — они виртуальные. Нужно будет кучу проверок делать. Но это несколько неудобный способ. Все из-за того, что DoModal должен ожидать результата.


Написал переопределив DoModal

там вместо

...
RunModalLoop
...

написал (это упрощенный пример):

do{
if(m_bModeless){
....
bModelessSeted = true;
::SendMessage(m_hWndParent, WM_ENTERIDLE, MSGF_DIALOGBOX, (LPARAM)m_hWnd);
....
} else {
bModelessSeted = false;
RunModalLoop
}

}while(m_bModeless || bModelessSeted);

+ 2 метода — BeginModeless, CompleteModeless где соответсвенно EndModalLoop,EnableModalless и т.п.
В результате DoModal ждет результата....


С уважением Александр.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.