Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Печать нескольких страниц, Печать нескольких страниц 
:(
    Опции темы
olegkuzn
Дата 17.1.2008, 16:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 84
Регистрация: 1.10.2007

Репутация: нет
Всего: нет



Есть класс CMyView производный от CScrollView
есть метод CMyView::OnDraw(CDC* pDC) который рисует диаграмку в режиме MM_LOMETRIC.
Необходимо вывести диаграму на печать в два листам слева направо.
использую код 
Код

BOOL CMyView::OnPreparePrinting(CPrintInfo* pInfo)
{
    pInfo->m_bDirect  = true;
    pInfo->m_bPreview = false;
    pInfo->SetMaxPage( 2 );
    pInfo->SetMinPage( 1 );


    if(DoPreparePrinting( pInfo ))
        return TRUE;
    else
        return FALSE;
}

void CMyView::OnPrint(CDC* pDC, CPrintInfo* pInfo)
{
    pDC->SetMapMode(MM_LOMETRIC);
    CSize szPaper( pDC->GetDeviceCaps(HORZSIZE)*10,                                         pDC->GetDeviceCaps(VERTSIZE)*10);
    CRect rcDraw(0,0,szPaper.cx,szPaper.cy);

               // если страница вторая то смещаем прямоугольник рисования
    if( pInfo->m_nCurPage == 2 )
        rcDraw.MoveToX(szPaper.cx);

    pDC->LPtoDP(&rcDraw);

    pInfo->m_rectDraw.left   = rcDraw.left;  
    pInfo->m_rectDraw.right  = rcDraw.right;  
    pInfo->m_rectDraw.top    = rcDraw.top;  
    pInfo->m_rectDraw.bottom = rcDraw.bottom; 

    pDC->SetViewportOrg(rcDraw.left, rcDraw.top);

    OnDraw( pDC );
}
 

Проблема в том что первую страницу печатает а вместо второй прогоняет лист без печати (хотя рисунок диаграмы в OnDraw есть)
PM MAIL   Вверх
dizzy1984
Дата 18.1.2008, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 675
Регистрация: 15.2.2007

Репутация: 10
Всего: 25



"Глава 19. Печать и предварительный просмотр документов"

Цитата

Здесь есть два тонких момента, требующих пояснения. Пока речь идет о печати одной страницы, то все в порядке — можно использовать реализацию по умолчанию, в которой просто вызывается функция OnDraw, Но, как вы помните, для вывода на принтер нескольких страниц необходимо организовать цикл печати. И такой цикл действительно организован в обработчике: 

void CView::OnFilePrint {}


Добавлено через 2 минуты и 6 секунд
Тебе ведь надо распечатать 2 одинаковые страницы, я правильно понял?
PM MAIL   Вверх
olegkuzn
Дата 18.1.2008, 17:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 84
Регистрация: 1.10.2007

Репутация: нет
Всего: нет



Пробился с задачей. Метод CMyView::OnPrint должен быть таким :
Код

void CMyView::OnPrint(CDC* pDC, CPrintInfo* pInfo)
{
    CPoint ptViewPort;
    pDC->SetMapMode(MM_LOMETRIC);

    // если первая страница то начинаем с нулевой позиции
    if( pInfo->m_nCurPage == 1 )
        ptViewPort.SetPoint( 0, 0 );
    else
    // иначе ( вторая страница ) начало коордитат влево на лист 
    // почему влево так и не понял - должно было быть вправо
        ptViewPort.SetPoint( -pInfo->m_rectDraw.Width(), 0 );

    // переводим в координаты устройства
    pDC->LPtoDP(&ptViewPort);

    // устанавливаем начало координат
    pDC->SetViewportOrg(ptViewPort);

    // рисуем
    OnDraw( pDC );
}


теперь второй лист диаграммы выводится.
Вопрос вдогонку.
В структуре CPrintInfo есть элемент m_rectDraw класса CRect. 
Что конкретно представляет этот элемент. 
(Он различен даже для одинаковых форматов A4 но разных принтеров).
Как его получить не вызывая печать (Например для предварительного разбиения диаграммы по страницам)
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.0463 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.