Всем привет, достался код требующий модификации, есть приложение SDI, в какой-то момент его работы показывается предварительный просмотр, а после распечатки документа или закрытия предварительного просмотра, нужно показать сообщение(MessageBox), и вот собственно вопрос, как мне выкрутится что бы не переписывать много кода остановить выполнение пока существует окно предварительного просмотра, пробовал так:
Print(); //окно предварительного просмотра для печати появилось
//попытка дождаться завершения работы с предварительным просмотромwhile (dynamic_cast<CXpsView*>(GetActiveView())) { // выполнять пока CXpsView является активным окном
MSG msg;
if (::PeekMessage(&msg, nullptr, 0, 0, PM_REMOVE)) { //пытаюсь получить и обработать
::TranslateMessage(&msg);
::DispatchMessage(&msg);
}
Sleep(1);
}
MessageBox(...); // появляется сообщение
по факту в цикле он остается но XpsView ничего не получает, просто зависает, пробовал еще такой вариант:
pXpsView->PostMessage(msg.message, msg.wParam, msg.lParam); // тоже не работает
Здравствуйте, _agg, Вы писали:
_>Всем привет, достался код требующий модификации, есть приложение SDI, в какой-то момент его работы показывается предварительный просмотр, а после распечатки документа или закрытия предварительного просмотра, нужно показать сообщение(MessageBox), и вот собственно вопрос, как мне выкрутится что бы не переписывать много кода остановить выполнение пока существует окно предварительного просмотра
А что, добавить код в метод virtual void OnEndPrinting(CDC* pDC, CPrintInfo* pInfo); не помогает?
_____________________
С уважением,
Stanislav V. Zudin
Здравствуйте, Stanislav V. Zudin, Вы писали:
SVZ>А что, добавить код в метод virtual void OnEndPrinting(CDC* pDC, CPrintInfo* pInfo); не помогает?
Добавить и опираться на это событие значит переписать весь алгоритм, потому что, то что я описал это только часть его, и переделывать его весь очень накладно по времени.
Примерно понял почему зависает, весь этот большой алгоритм начинает исполняться из MainFrm::PreTranslateMessage, и обработчиком View предварительного просмотра после его появления становиться тот же MainFrm::PreTranslateMessage, есть ли какая-нибудь возможность дать обработаться новой View пока не закроется? Пробовал вот так:
while (dynamic_cast<CXpsView*>(GetActiveView())) { // выполнять пока CXpsView является активным окном
MSG msg;
if (::PeekMessage(&msg, nullptr, 0, 0, PM_REMOVE)) { //пытаюсь получить и обработать
CFrameWndEx::PreTranslateMessage(&msg);
}
Sleep(1);
}
Так тоже не работает, подскажите пожалуйста как обыграть эту ситуацию? По сути мне нужна модальная View что бы исполнение кода продолжилось после того как закрылась эта View
Здравствуйте, _agg, Вы писали:
_>Здравствуйте, _agg, Вы писали:
_>Примерно понял почему зависает, весь этот большой алгоритм начинает исполняться из MainFrm::PreTranslateMessage, и обработчиком View предварительного просмотра после его появления становиться тот же MainFrm::PreTranslateMessage, есть ли какая-нибудь возможность дать обработаться новой View пока не закроется?
Что если перегрузить PreTranslateMessage, и при активном View не пропускать сообщения родителю ?
Здравствуйте, парадокс в том что весь этот большой алгоритм и начинает свою работу из PreTranslateMessage, поэтому я и пытался дождаться окончания работы с View вызовом PreTranslateMessage(&msg) у базового класса:
if (::PeekMessage(&msg, nullptr, 0, 0, PM_REMOVE)) { //пытаюсь получить и обработать
CFrameWndEx::PreTranslateMessage(&msg);
Здравствуйте, Pavel Dvorkin, Вы писали:
PD>Что если перегрузить PreTranslateMessage, и при активном View не пропускать сообщения родителю ?