печать и dc печати
От: nii_im_b Мухосранск  
Дата: 07.12.04 07:28
Оценка:
всем доброго времени суток.
на досуге решил окончательно и бесповоротно разобраться с печатью в win32. исходные данные принтера фирм Epson, Canon, НР. для полноты ощущений какой-то битмап и какой-то текст — не важно.
теперь несколько ф-ций печати и результаты тестов (полностью код приводить не буду — это к теме не относится)

void print_ddb(HDC dc/*DC принтера*/,HBITMAP bmp/*собственно битмап*/)
{
/*....*/
HDC hmem = ::CreateCompatibleDC(dc);
HBITMAP prt_bmp = ::CreateCompatibleBitmap(dc,xRes,yRes);
HBITMAP prt_old = ::SelectObject(dc,prt_bmp);
HBITMAP mem_old = ::SelectObject(hmem,bmp);
/*....*/
StretchBlt(...);
/*....*/
}


в результате на платформе win9x на некоторых принтерах происходит что попало как-то монохромное изображение в крайних случаях просто потеря битмапа.

делаем ход конём:

void print_ddb(HDC dc/*DC принтера*/,HBITMAP bmp/*собственно битмап*/)
{
/*....*/
HDC hmem = ::CreateCompatibleDC(NULL);
HBITMAP prt_bmp = ::CreateCompatibleBitmap(NULL,xRes,yRes);
HBITMAP prt_old = ::SelectObject(dc,prt_bmp);
HBITMAP mem_old = ::SelectObject(hmem,bmp);
/*....*/
StretchBlt(...);
/*....*/
}


результат значительно улутшается. теперь глюки только на НР(PCL6 mode).про ПСЛ ходят легенды поэтому его в расчёт не берём.

результаты с DIB и DIBSection приводить не буду ибо они идентичны.

теперь собственно вопрос.
почему CompatibleDC экрана (хотя по логике ДС должно быть именно принтера)?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.