Печать из окна диалога. Возможно ли?
Заранее благодарю.
Подскажите, плз, как вывести на принтер содержимое диалогового окна?
Заранее благодарю.
В принципе алгоритм следующий:
1.определяем HDC и координаты окна
2.создаем на основе HDC bitmap (CreateCompatibleBitmap)
3.копируем содержимое окна в bitmap (StretchBlt)
4.печатаем полученное изображение
Подробности - в MSDN
Я вот что сделал:
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
Спасибо. Первые три пункта реализовал. Заминка с четвертым :{
Я вот что сделал:
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 принтера.
Я этим занимался очень давно - может подзабыл что-то. Попробуй так: отрисовка производится также как на экран (BitBlt), только вместо hDC экрана hdcDest ставится полученный hDC принтера.
Спасибо. Я в общем-то так и сделал. Создал DC принтера, сделал аттач (dcPrint.Attach) , вызвал StartDoc, скопировал DC окна с помощью BitBlt в DC принтера, вызвал EndDoc. После этого напечаталась картинка, размером примерно 3х2 сантиметра, причем кроме моего окна, там виден еще кусок экрана. Что-то с размерами не то.
Бум разбираться. :{
Рад что смог помочь.
Спасибо :)