我有我试图呈现到使用StretchBlt打印机的图表(以位图格式)。当在屏幕上绘图,StretchBlt工作正常。当画到CutePDF打印机,则返回0,将过去的错误ERROR_INVALID_HANDLE,和作品反正。当绘制一个PDF995打印机或物理HP打印机,它返回0,设置最后一个错误ERROR_INVALID_HANDLE,并且不能画什么。

什么会导致StretchBlt失败某些设备?我已验证源位图是一个DIB和所述目的地调用StretchBlt支持GetDeviceCaps

下面是我的代码,如果它是相关的:(这是写在C ++ Builder中,所以它使用Delphi的VCL;的TCanvas封装了HDC和TBitmap封装了一个HBITMAP VCL提供了自己的StretchDraw功能,不支持半色调。我越来越与它同样的问题。)

void PrettyStretchDraw(TCanvas *dest, const TRect& rect, TGraphic *source)
{
  if (dynamic_cast<Graphics::TBitmap*>(source) && !source->Transparent) {
    POINT pt;
    GetBrushOrgEx(dest->Handle, &pt);
    SetStretchBltMode(dest->Handle, HALFTONE);
    SetBrushOrgEx(dest->Handle, pt.x, pt.y, NULL);
    StretchBlt(
      dest->Handle,
      rect.Left,
      rect.Top,
      rect.Width(),
      rect.Height(),
      dynamic_cast<Graphics::TBitmap*>(source)->Canvas->Handle,
      0,
      0,
      source->Width,
      source->Height,
      SRCCOPY);
  } else {
    DrawItSomeOtherWay(dest, rect, source);
  }
}
有帮助吗?

解决方案

StretchBlt上某些打印机驱动程序(PDF995是显着的例子)。

我曾经encontered这个错误发生在Windows 2003服务器只(它的工作在XP)。

尝试重现于其他操作系统的问题,它没有,认为这是特定于操作系统和使用StretchDIBits而不是在此操作系统。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top