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

Ваш аккаунт

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

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

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

ПЕЧАТЬ!!!!!!!!!!

1.2K
24 сентября 2004 года
Kalitkin
108 / / 05.03.2004
Пожалуйста, помогите, кто может!!!
Нужен ХОРОШИЙ класс (или что-то вроде того) для печати. Что бы он мог печатать битмапы, текст , графики…
Что бы, например я написал типа:
SuperClassForPrint::DrawBitmap(x, y);
или
SuperClassForPrint::DrawText(str);
или
SuperClassForPrint::DrawPoint(x,y);

Или что то вроде того, и чтобы в предпросмотре был (желательно) красивый/удобный интерфейс.
Надеюсь что хоть кто ни будь поможет (это моя последняя надежда), облазил где только можно (может не там смотрел). А то придется все печатать в IE.
Заранее всем спасибо.
319
29 сентября 2004 года
xelos
577 / / 27.02.2003
Цитата:
Originally posted by Kalitkin
Пожалуйста, помогите, кто может!!!
Нужен ХОРОШИЙ класс (или что-то вроде того) для печати. Что бы он мог печатать битмапы, текст , графики…
Что бы, например я написал типа:
SuperClassForPrint::DrawBitmap(x, y);
или
SuperClassForPrint::DrawText(str);
или
SuperClassForPrint::DrawPoint(x,y);

Или что то вроде того, и чтобы в предпросмотре был (желательно) красивый/удобный интерфейс.
Надеюсь что хоть кто ни будь поможет (это моя последняя надежда), облазил где только можно (может не там смотрел). А то придется все печатать в IE.
Заранее всем спасибо.



что-то я не понимаю в чем проблема... в винде работа с графическими объектами ведется через контексты различных устройств, причем работа с контекстом не зависит от типа устройства. Т.е. получай контекст принтера и выводи в него все что надо.
Для начала печати вызывается StartDoc для обозначения начала документа. Каждый из документов состоит из страниц, которые обозначаются через StartPage и EndPage. Ну и для обозначения окончания печати вызываем EndDoc.
Есс-но при печати следует форматировать изображение в зависимости от размеров страницы, но для этого есть функция GetDeviceCaps, которая работает с любым контекстом.

1.2K
30 сентября 2004 года
Kalitkin
108 / / 05.03.2004
Цитата:
Originally posted by xelos


что-то я не понимаю в чем проблема... в винде работа с графическими объектами ведется через контексты различных устройств, причем работа с контекстом не зависит от типа устройства. Т.е. получай контекст принтера и выводи в него все что надо.
Для начала печати вызывается StartDoc для обозначения начала документа. Каждый из документов состоит из страниц, которые обозначаются через StartPage и EndPage. Ну и для обозначения окончания печати вызываем EndDoc.
Есс-но при печати следует форматировать изображение в зависимости от размеров страницы, но для этого есть функция GetDeviceCaps, которая работает с любым контекстом.



Слушай, а ты мог бы приветси реальный работающий пример, например надо вывести на печать текст, а под ним 2 битмапа (hb1 and hb2 - их дескрипторы), заренее спасибо

319
30 сентября 2004 года
xelos
577 / / 27.02.2003
Цитата:
Originally posted by Kalitkin


Слушай, а ты мог бы приветси реальный работающий пример, например надо вывести на печать текст, а под ним 2 битмапа (hb1 and hb2 - их дескрипторы), заренее спасибо



я в командировке да следующей недели, так что звиняй, быстро не получится.

1.2K
01 октября 2004 года
Kalitkin
108 / / 05.03.2004
Цитата:
Originally posted by xelos


я в командировке да следующей недели, так что звиняй, быстро не получится.



Ладно, буду ждать. но ты не забудь, ладно? а то эта проблемма меня мучает уже месяц (я всю распечатку в IE делаю). Да и на форумах, чесно говоря ты первый, кто по поводу печати отозвался (неужели никто не печатает данные из программ (графики например)?)

319
12 октября 2004 года
xelos
577 / / 27.02.2003
вот пример с использованием MFC. Чисто под винду аналогично все делается, только функции надо использовать:
StartDocPrinter.
StartPagePrinter.
WritePrinter.
EndPagePrinter.
EndDocPrinter.

Код:
CDC dc;
    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);
                };
            };
        };
    };
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог