| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Visual C++/MFC/WTL > MyPrintDialog |
| Автор: Proletariy 26.3.2009, 12:38 |
| Есть приложение SDI от CSCrollView. Пытаюсь организовать свое диалоговое окно печати путем изменения стандартного окна печати. В своем окне хочу задавать область печати m_rectDraw..... и еще кое какие мелочи. http://www.sources.ru/msdn/howto/q132909.shtml http://www.codeproject.com/KB/printing/customprintdialog.aspx?display=Print (с работоспособным примером) Внес в проект изменения согласно вышеуказанным ссылкам и могу теперь добовлять элементы управления к стандартному окну печати. Но не могу разобраться со следующими проблемами. 1.На перегруженном диалоговом окне печати не могу организовать нормальное взаимодействие между элементами управления Combo Box, Edit Box и др. (не присваиваются переменные элементам управления, только события ) 2.Как организовать взаимодействие функций класса представления, отвечающих за печать/предпросмотр с классом CMyPrintDialog (скорее всего через указатель на класс представления из класса CMyPrintDialog)??? Возможно Вы имеете некоторый опыт создания собственного диалога вывода на печать. Заранее спасибо за ответ. |
| Автор: Proletariy 31.3.2009, 14:43 |
| Пошел немного другой дорогой. Создал собственный диалог вывода на печать. На примере http://www.codeproject.com/KB/printing/printerselect.aspx?display=PrintAll Пока больших затруднений нет, но появился вопрос. Не бейте ногами)) На форме диалога хочу поставить кнопку предварительного просмотра. Но если я задаю идентификатор кнопки ID_FILE_PRINT_PREVIEW отображается окно предварительного просмотра с которым нельзя работать - висит. Если пишу обработчик события кнопки: OnOK(); SendMessage(WM_COMMAND, ID_FILE_PRINT_PREVIEW); Предпросмотр работает, но при его запуске закрывается окно диалога. Как корректно вызвать окно предпросмотра с любого произвольного диалога??? Чтобы при этом модальное диалоговое окно не закрывать. |
| Автор: Proletariy 31.3.2009, 18:09 |
| voov Спасибо за ответ. Да я бы и рад не вызывать OnOK)) Но в таком случае виснет окно предпросмотра. Если просто писать на событие (событие в классе представления) SendMessage(WM_COMMAND, ID_FILE_PRINT_PREVIEW); Буду завтра опять копать. Думаю попробовать так - одновременно с OnOK(); SendMessage(WM_COMMAND, ID_FILE_PRINT_PREVIEW); передавать в класс представления метку BOOL и в зависимости от ее значения по завершении предпросмотра в какой нибудь функции (напр. в цикле OnPrepereDC) или в OnEndPrinting вызывать заново модальное окно диалога печати. |
| Автор: Proletariy 28.4.2009, 14:54 | ||
| Подниму тему. Получилось организовать предварительный просмотр из модального диалога, но как-то очень коряво. При нажатии кнопки "Предпросмотр" на диалоге ставлю флаг m_PrintDialogStatus=TRUE, что предпросмотр осуществляется из модального диалога, закрываю окно модального диалога OnOk() и посылаю сообщение SendMessage(WM_COMMAND, ID_FILE_PRINT_PREVIEW); По завершении предпросмотра в циклической функции OnDraw ставлю условие, при выполнении которого модальный диалог вызывается сново 1 раз. Примерно так. if((m_PrintDialogStatus == true)&(pDC->IsPrinting() == FALSE)) { m_PrintDialogStatus = false; //Обнуляю флаг CMyPrintDialog dlg; dlg.DoModal(); } Подскажите, можно ли как то сделать это по другому? Более просто. Может предпросмотр осуществлять в новом окне? Либо что-то сделать с модальным диалогом, чтобы он не мешал?? /////////////////////////////////////////// Только дописал сообщение и нашел ответ
/////////////////////////////////////////// Но эти вопросы остались-> 1. Есть ли возможность убрать/сделать неактивной кнопку Print... в стандартном окне предпросмотра. 2. Убрать крестик закрытия стандартного окна предпросмотра, чтобы выход из режима предпросмотра осуществлялся только нажатием кнопки Close... С ув. |