Шаг 818 - CDC::StartDoc

int StartDoc( LPDOCINFO lpDocInfo );

Возвращаемое значение
Значение -1, если имеется ошибка типа недостаточной памяти или недопустимая спецификация порта, происходит, иначе положительное значение.

Параметры
lpDocInfo
Указатель на структуру DOCINFO, содержащую имя файла документа и имени выходного файла.

Замечания
Сообщает драйверу устройства, что новое задание по выводу на печать начинается и что все последующие StartPage и EndPage обращения должены быть помещен в очередь при той же самой работе, пока обращение EndDoc не происходит. Это гарантирует, что документы болше чем на одной страница не будут разбиты другими работами.
Для Windows версии 3.1 и позже, эта функция заменяют STARTDOC Escape принтера. Использование этой функции гарантирует, что документы, содержащие больше чем одна страница не будут разделены заданиями по выводу на печать.
StartDoc не должен использоваться внутри метафайла.

Пример

Этот кодовый фрагмент получает заданный по умолчанию принтер, открывает задание по выводу на печать, и помещает в очередь одну страницу с "Привет, Мир! " на ней. Потому что текст, напечатанный этим кодом не масштабируется к логическим модулям принтера, текст вывода может быть в таких маленьких символах, что результат нечитабелен. CDC, масштабирующий функции, типа SetMapMode, SetViewportOrg, и SetWindowExt, могут использоваться, чтобы установить масштабирование.

// Получить принтер по умолчания
CPrintDialog dlg(FALSE);
dlg.GetDefaults();

// Заданный по умолчанию принтер установлен?
HDC hdcPrinter = dlg.GetPrinterDC();
if (hdcPrinter == NULL)
{
	MessageBox(_T("Buy a printer!"));
}
else
{
	//Создайте CDC, и прикрепите его с заданному по умолчанию принтеру
	CDC dcPrinter;
	dcPrinter.Attach(hdcPrinter);

	// вызовите StartDoc () чтобы начать печать
	DOCINFO docinfo;
	memset(&docinfo, 0, sizeof(docinfo));
	docinfo.cbSize = sizeof(docinfo);
	docinfo.lpszDocName = _T("CDC::StartDoc() Code Fragment");

	// Если это терпит неудачу, жаловаться и выходить элегантно
	if (dcPrinter.StartDoc(&docinfo) < 0)
	{
		MessageBox(_T("Printer wouldn't initalize"));
	} else {
		// Начать страницу
		if (dcPrinter.StartPage() < 0)
		{
			MessageBox(_T("Could not start page"));
			dcPrinter.AbortDoc();
		} else {
			// Фактически делайте некоторую печать
			CGdiObject* pOldFont = dcPrinter.SelectStockObject(SYSTEM_FONT);

			dcPrinter.TextOut(50, 50, _T("Hello World!"), 12);

			dcPrinter.EndPage();
			dcPrinter.EndDoc();
			dcPrinter.SelectObject(pOldFont);
		}
	}
}

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