Шаг 1070 - CView::OnPrepareDC

virtual void OnPrepareDC( CDC* pDC, CPrintInfo* pInfo = NULL );

Параметры
pDC
Указатель на контекст устройства, который нужно использовать для исполнения изображения документа.
pInfo
Указатель на структуру CPrintInfo, которая описывает текущее задание по выводу на печать, если OnPrepareDC запрашивают, печатая или предварительный просмотр печати, m_nCurPage член определяет страницу, собирающуюся быть напечатанным. Этот параметр NULL если OnPrepareDC - запросила отображение экранного устройства.

Замечания
Вызывается рамкой прежде, чем OnDraw функция запросила отображение экранного устройства и прежде, чем OnPrint функция запрашивает каждая страница в течение предварительного просмотра печати или печати. Заданная по умолчанию реализация этой функции не делает ничего, если функция - запросила отображение экранного устройства. Однако, эта функция перегружена в полученных классах, типа CScrollView, корректировать атрибуты контекста устройства, следовательно, Вы должны всегда вызывать реализацию базового класса в начале вашей перегрузки.

Если функцию запрашивают, печатая, заданная по умолчанию реализация исследует информацию страницы, сохраненную в pInfo параметре. Если длина документа не была определена, OnPrepareDC принимает, что документ будет одностраничным длинным и останавливает цикл печати после того, как одна страница была напечатана. Функция останавливает цикл печати, устанавливая m_bContinuePrinting член структуры к FALSE.

Перегрузите OnPrepareDC по любой из следующих причин:

  1. Корректировать атрибуты контекста устройства как необходимо для определенной страницы. Например, если Вы должны установить режим отображения или другие характеристики контекста устройства, делайте это в этой функции.
  2. Выполнять разбиение на страницы. Обычно Вы определяете длину документа, когда печать начинается, используя OnPreparePrinting функцию. Однако, если Вы не знаете заранее, как долго документ - (например, при печати неопределенного числа записей из базы данных), перегрузите OnPrepareDC, чтобы проверить в течение печати конец документа. Когда не имеется большего количества документа, который будет напечатан, установите m_bContinuePrinting член структуры CPrintInfo к FALSE.
  3. Посылать управляющие коды принтеру. Чтобы посылать управляющие коды от OnPrepareDC, вызовите функцию Escape pDC параметра.

Вызовите OnPrepareDC базового класса в начале вашей перегрузки.

Пример

void CMyView::OnPrepareDC (CDC* pDC, CPrintInfo* pInfo)
{
	CView::OnPrepareDC(pDC, pInfo);

	// Если мы печатаем, установите режим вывода и 
	// протяженность окна правильно, затем устанавливает 
	// протяженность области просмотра. Используйте
	// SetViewportOrg функцию  в классе CDC к
	//  области просмотра в центр просмотра.
   
	if(pDC->IsPrinting()) // Является DC принтер DC.
	{
		CRect rect;
		GetClientRect (&rect);

		int oldMapMode = pDC->SetMapMode(MM_ISOTROPIC);
		CSize ptOldWinExt = pDC->SetWindowExt(1000, 1000);
		ASSERT( ptOldWinExt.cx != 0 && ptOldWinExt.cy != 0 );
		CSize ptOldViewportExt = pDC->SetViewportExt(rect.Width(),-rect.Height());
		ASSERT( ptOldViewportExt.cx != 0 && ptOldViewportExt.cy != 0 );
		CPoint ptOldOrigin = pDC->SetViewportOrg(rect.Width()/2, rect.Height()/2);
	}
}

Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 23.02.2002