всем доброго времени суток.
на досуге решил окончательно и бесповоротно разобраться с печатью в 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 экрана (хотя по логике ДС должно быть именно принтера)?