Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Печать из окна диалога. Возможно ли?

6.0K
03 июня 2004 года
Toyo
20 / / 03.06.2004
Подскажите, плз, как вывести на принтер содержимое диалогового окна?
Заранее благодарю.
6.8K
03 июня 2004 года
bezier
21 / / 26.05.2004
Цитата:
Originally posted by Toyo
Подскажите, плз, как вывести на принтер содержимое диалогового окна?
Заранее благодарю.



В принципе алгоритм следующий:

1.определяем HDC и координаты окна
2.создаем на основе HDC bitmap (CreateCompatibleBitmap)
3.копируем содержимое окна в bitmap (StretchBlt)
4.печатаем полученное изображение

Подробности - в MSDN

6.0K
03 июня 2004 года
Toyo
20 / / 03.06.2004
Спасибо. Первые три пункта реализовал. Заминка с четвертым :{
Я вот что сделал:

CPrintInfo printInfo;
ASSERT(printInfo.m_pPD != NULL);
ASSERT(printInfo.m_pPD->m_pd.hDC != NULL);
GetWorkRect(&Rect); //Определение размеров окна
DOCINFO docInfo;
memset(&docInfo, 0, sizeof(DOCINFO));
docInfo.cbSize = sizeof(DOCINFO);
docInfo.lpszDocName = "My dialog";
docInfo.lpszOutput = NULL;

CDC dcPrint;
AfxGetApp()->CreatePrinterDC(dcPrint);
dcPrint.Attach(printInfo.m_pPD->m_pd.hDC);
dcPrint.m_bPrinting = TRUE;
printInfo.m_rectDraw.SetRect(Rect.top,Rect.left, Rect.bottom, Rect.right);

Теперь надо как-то вывести все это на печать. Но как? :x
6.8K
07 июня 2004 года
bezier
21 / / 26.05.2004
Цитата:
Originally posted by Toyo
Спасибо. Первые три пункта реализовал. Заминка с четвертым :{
Я вот что сделал:

CPrintInfo printInfo;
ASSERT(printInfo.m_pPD != NULL);
ASSERT(printInfo.m_pPD->m_pd.hDC != NULL);
GetWorkRect(&Rect); //Определение размеров окна
DOCINFO docInfo;
memset(&docInfo, 0, sizeof(DOCINFO));
docInfo.cbSize = sizeof(DOCINFO);
docInfo.lpszDocName = "My dialog";
docInfo.lpszOutput = NULL;

CDC dcPrint;
AfxGetApp()->CreatePrinterDC(dcPrint);
dcPrint.Attach(printInfo.m_pPD->m_pd.hDC);
dcPrint.m_bPrinting = TRUE;
printInfo.m_rectDraw.SetRect(Rect.top,Rect.left, Rect.bottom, Rect.right);

Теперь надо как-то вывести все это на печать. Но как? :x



Я этим занимался очень давно - может подзабыл что-то. Попробуй так: отрисовка производится также как на экран (BitBlt), только вместо hDC экрана hdcDest ставится полученный hDC принтера.

6.0K
07 июня 2004 года
Toyo
20 / / 03.06.2004
Цитата:
Originally posted by bezier

Я этим занимался очень давно - может подзабыл что-то. Попробуй так: отрисовка производится также как на экран (BitBlt), только вместо hDC экрана hdcDest ставится полученный hDC принтера.


Спасибо. Я в общем-то так и сделал. Создал DC принтера, сделал аттач (dcPrint.Attach) , вызвал StartDoc, скопировал DC окна с помощью BitBlt в DC принтера, вызвал EndDoc. После этого напечаталась картинка, размером примерно 3х2 сантиметра, причем кроме моего окна, там виден еще кусок экрана. Что-то с размерами не то.
Бум разбираться. :{

6.0K
09 июня 2004 года
Toyo
20 / / 03.06.2004
Всё, получилось! Пришлось создать промежуточный Bitmap и копировать туда, масштабируя из текущего DC при помощи StretchBlt(). А потом уже из битмэпа срисовывать в DC принтера, используя BitBlt()
6.8K
09 июня 2004 года
bezier
21 / / 26.05.2004
Рад что смог помочь.
6.0K
10 июня 2004 года
Toyo
20 / / 03.06.2004
Цитата:
Originally posted by bezier
Рад что смог помочь.


Спасибо :)

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог