ПЕЧАТЬ!!!!!!!!!!
Нужен ХОРОШИЙ класс (или что-то вроде того) для печати. Что бы он мог печатать битмапы, текст , графики…
Что бы, например я написал типа:
SuperClassForPrint::DrawBitmap(x, y);
или
SuperClassForPrint::DrawText(str);
или
SuperClassForPrint::DrawPoint(x,y);
Или что то вроде того, и чтобы в предпросмотре был (желательно) красивый/удобный интерфейс.
Надеюсь что хоть кто ни будь поможет (это моя последняя надежда), облазил где только можно (может не там смотрел). А то придется все печатать в IE.
Заранее всем спасибо.
Пожалуйста, помогите, кто может!!!
Нужен ХОРОШИЙ класс (или что-то вроде того) для печати. Что бы он мог печатать битмапы, текст , графики…
Что бы, например я написал типа:
SuperClassForPrint::DrawBitmap(x, y);
или
SuperClassForPrint::DrawText(str);
или
SuperClassForPrint::DrawPoint(x,y);
Или что то вроде того, и чтобы в предпросмотре был (желательно) красивый/удобный интерфейс.
Надеюсь что хоть кто ни будь поможет (это моя последняя надежда), облазил где только можно (может не там смотрел). А то придется все печатать в IE.
Заранее всем спасибо.
что-то я не понимаю в чем проблема... в винде работа с графическими объектами ведется через контексты различных устройств, причем работа с контекстом не зависит от типа устройства. Т.е. получай контекст принтера и выводи в него все что надо.
Для начала печати вызывается StartDoc для обозначения начала документа. Каждый из документов состоит из страниц, которые обозначаются через StartPage и EndPage. Ну и для обозначения окончания печати вызываем EndDoc.
Есс-но при печати следует форматировать изображение в зависимости от размеров страницы, но для этого есть функция GetDeviceCaps, которая работает с любым контекстом.
что-то я не понимаю в чем проблема... в винде работа с графическими объектами ведется через контексты различных устройств, причем работа с контекстом не зависит от типа устройства. Т.е. получай контекст принтера и выводи в него все что надо.
Для начала печати вызывается StartDoc для обозначения начала документа. Каждый из документов состоит из страниц, которые обозначаются через StartPage и EndPage. Ну и для обозначения окончания печати вызываем EndDoc.
Есс-но при печати следует форматировать изображение в зависимости от размеров страницы, но для этого есть функция GetDeviceCaps, которая работает с любым контекстом.
Слушай, а ты мог бы приветси реальный работающий пример, например надо вывести на печать текст, а под ним 2 битмапа (hb1 and hb2 - их дескрипторы), заренее спасибо
Слушай, а ты мог бы приветси реальный работающий пример, например надо вывести на печать текст, а под ним 2 битмапа (hb1 and hb2 - их дескрипторы), заренее спасибо
я в командировке да следующей недели, так что звиняй, быстро не получится.
я в командировке да следующей недели, так что звиняй, быстро не получится.
Ладно, буду ждать. но ты не забудь, ладно? а то эта проблемма меня мучает уже месяц (я всю распечатку в IE делаю). Да и на форумах, чесно говоря ты первый, кто по поводу печати отозвался (неужели никто не печатает данные из программ (графики например)?)
StartDocPrinter.
StartPagePrinter.
WritePrinter.
EndPagePrinter.
EndDocPrinter.
HDC hDC;
CPrintDialog dlgPrint(TRUE);
if (dlgPrint.DoModal()==IDOK){
if (!(hDC = dlgPrint.CreatePrinterDC())){
AfxMessageBox(_T("No printers"));
return;
}else{
DeleteDC(hDC);
LPDEVMODE pDevMode = dlgPrint.GetDevMode();
pDevMode->dmOrientation = DMORIENT_PORTRAIT;
if (!dc.Attach(dlgPrint.CreatePrinterDC())){
AfxMessageBox (_T("A problem with printer"));
return;
};
DOCINFO docinfo;
memset(&docinfo, 0, sizeof(docinfo));
docinfo.cbSize = sizeof(docinfo);
docinfo.lpszDocName = _T("Test");
dc.SetMapMode(MM_LOMETRIC);
long sizeY, sizeX;
sizeY=dc.GetDeviceCaps(VERTSIZE);
sizeX=dc.GetDeviceCaps(HORZSIZE);
sizeY=sizeY*10;
if (dc.StartDoc(&docinfo) < 0){
MessageBox("Can't start printer","Erreur",MB_OK);
}else{
if (dc.StartPage() < 0){
MessageBox(_T("Could not start page"));
dc.AbortDoc();
}else{
dc.TextOut(200,pos,Comm);
dc.SelectObject(&pFont);
};
};
dc.EndPage();
dc.EndDoc();
dc.SelectObject(oldFont);
};
};
};
};