Вывод на принтер с помощью WinApi
Проблема в следующем - необходимо выводить на принтер сообщения неким шрифтом некого размера. Реализация следующая
hFont = CreateFont( 100, 0, 0, 0, FW_NORMAL,
0, 0, 0, ANSI_CHARSET,
OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY,
DEFAULT_PITCH | FF_ROMAN,
"Times New Roman" );
hFont = CreateFontIndirect( &fnt );
hDCf = CreateDC( "WINSPOOL", "HP DeskJet 610C Series", NULL, NULL );
SetMapperFlags( hDCf, 1 );
SelectObject( hDCf, hFont );
memset( &di, 0, sizeof( DOCINFO ) );
di.cbSize = sizeof( DOCINFO );
di.lpszDocName = "Test Document";
if ( StartDoc( hDCf, &di ) != SP_ERROR )
{
StartPage( hDCf );
TextOut( hDCf, 10, 10, "Test message", 12);
EndPage( hDCf );
EndDoc( hDCf );
}
Суть проблемы - какой бы размер шрифта(да и его имя) не ставил - на печать это никоем образом не отображается.
Подскажите люди добрые в чем ошибка! Есть у меня подозрение, что сам подход неверен.
0, 0, 0, ANSI_CHARSET,
OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY,
DEFAULT_PITCH | FF_ROMAN,
"Times New Roman" );
hFont = CreateFontIndirect( &fnt );
Вот это не очень понятный кусочек.
Что есть fnt?
Если это LOGFONT (как по идее должно быть), то в нем ли ты меняешь размер?
И зачем тогда первый CreateFont?
Если он у тебя в принципе чевой-то печатает, то контекст ты по идее создал правильно, так что больше проблем пока не вижу
Цитата:
hFont = CreateFontIndirect( &fnt );
Вот это не очень понятный кусочек.
Что есть fnt?
Пардон, этого в коде не было, при копировании ошибся (остатки эксперимента с CreateFontIndirect-ом) - результат одни - что одна функция, что другая, ни их отсутствие не влияют на то, каким шрифтом печатается текст - такое ощущение, что в принтере есть некий шрифт по умолчанию, который и используется, а CreateFont или CreateFontIndirect его не меняют.
А вообще меня это немножко смутило - седня на работе попробую, к вечеру отвечу.
Правда если убрать SetMappedFlags.
Однако в этом случае конечно размер шрифта не соответствует реальному, но это можно обойти...
Короче ты меня заинтересовал. Давай в начале недельки скину тебе рабочий вариант.
P.S. Правда пока непонятно причем здесь был SetMappedFlags. И почему ты выбрал именно 1?
большая часть кода бралась из примеров, правда не для принтера, а для экрана - там-то все работало без проблем, а вот с принтером у меня не заладилось.
Visual C++ я, в общем-то, только начал изучать