Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > 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)???

 smile 

Возможно Вы имеете некоторый опыт создания собственного диалога вывода на печать.
Заранее спасибо за ответ.

Автор: Proletariy 31.3.2009, 14:43
Пошел немного другой дорогой.

Создал собственный диалог вывода на печать.
На примере 
http://www.codeproject.com/KB/printing/printerselect.aspx?display=PrintAll

Пока больших затруднений нет, но появился вопрос. Не бейте ногами)) На форме диалога хочу поставить кнопку предварительного просмотра. Но если я задаю идентификатор кнопки ID_FILE_PRINT_PREVIEW отображается окно предварительного просмотра с которым нельзя работать - висит.  smile 
Если пишу обработчик события кнопки:
OnOK();
SendMessage(WM_COMMAND, ID_FILE_PRINT_PREVIEW);
Предпросмотр работает, но при его запуске закрывается окно диалога.

Как корректно вызвать окно предпросмотра с любого произвольного диалога??? Чтобы при этом модальное диалоговое окно не закрывать.

Автор: voov 31.3.2009, 16:30
Цитата(Proletariy @  31.3.2009,  14:43 Найти цитируемый пост)
Если пишу обработчик события кнопки:
OnOK();
SendMessage(WM_COMMAND, ID_FILE_PRINT_PREVIEW);
Предпросмотр работает, но при его запуске закрывается окно диалога.

Как корректно вызвать окно предпросмотра с любого произвольного диалога??? Чтобы при этом модальное диалоговое окно не закрывать.

Не делай вызов OnOK();

Автор: 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();
}

Подскажите, можно ли как то сделать это по другому? Более просто.
Может предпросмотр осуществлять в новом окне? Либо что-то сделать с модальным диалогом, чтобы он не мешал??


///////////////////////////////////////////
Только дописал сообщение и нашел ответ
Код


void CProgramView::OnEndPrintPreview(CDC* pDC, CPrintInfo* pInfo, POINT point, CPreviewView* pView)
{
CScrollView::OnEndPrintPreview(pDC, pInfo, point, pView);

CMyPrintDialog dlg;
dlg.DoModal();
}

///////////////////////////////////////////

Но эти вопросы остались->
1. Есть ли возможность убрать/сделать неактивной кнопку Print... в стандартном окне предпросмотра.
2. Убрать крестик закрытия стандартного окна предпросмотра, чтобы выход из режима предпросмотра осуществлялся только нажатием кнопки Close...

С ув.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)