Я создал класс предварительного просмотра печати, PPREVIEW, содержащий окно предварительного просмотра печати, которое должно отображаться в главном окне моего приложения при его отключении. Когда пользователь закрывает окно предварительного просмотра, он должен включить главное окно и уничтожить объект PPREVIEW. Я хотел бы использовать его следующим образом:
PPREVIEW *p=new PPREVIEW;
//next, preview window is created, user interaction begins
p->ShowPreview(<parameters>); //but this function returns
delete p;
Так как ShowPreview действительно возвращает, строка выше уничтожит объект, пока окно все еще видимо. Если бы это было модальное диалоговое окно, это было бы возможно, так как функция DialogBox не возвращается в этот момент.
Я думал, что мог бы положить «удалить это» где-нибудь после уничтожения окна предварительного просмотра печати. Естественно WM_DESTROY приходит на ум. Но MSDN заявляет в http://msdn.microsoft.com/en-us/library/windows/desktop/ms632620%28v=vs.85%29.aspx следующее: «можно предположить, что во время обработки WM_DESTROY дочерние окна все еще существуют», поэтому все еще существует вероятность того, что некоторые из них будут ссылаться на переменные экземпляра (и они делают, я получаю случайным образом ошибки доступа, когда я пытался это сделать, поэтому я отступил).
В настоящее время я выбрал:
- создать некоторую глобальную переменную,
- в WM_DESTROY окна предварительного просмотра печати я включил EnableWindow (MainWindow, TRUE) и установил для этой глобальной переменной значение FALSE.
- Затем, после события WM_ENABLE в главном окне, я проверяю глобальную переменную на FALSE и удаляю объект.
Но это довольно нелегко и требует, чтобы я программировал это поведение для каждого окна, в котором используется предварительный просмотр печати, поэтому я решил использовать предыдущий подход, а именно: создавать, использовать, возможно, самостоятельно удалять. Мне нужно либо:
- информацию, когда именно я могу использовать «удалить это» в процедуре окна PPREVIEW, если этот подход не является неразумным по какой-то причине, я не знаю о
- идея, как заставить метод ShowPreview не возвращаться, имитируя поведение DialogBox.
- другие предложения, которые достигают моей цели
Пожалуйста, помогите.