GdipDrawLine的奇怪行为

时间:2019-07-13 23:49:42

标签: delphi gdi+ gdi

我发现了GDI +的奇怪行为(我尝试了GdipDrawLine)。我在how they see in designer上有一个带有绘画框的简单表单,在OnPaint Event中有一个简单代码

procedure TForm1.pbPaint(Sender: TObject);
var
  Pen: GPPEN;
  GDIDC: GPGRAPHICS;
  Brush: HBrush;
  R: TRect;
begin
  Brush := CreateSolidBrush(TColorRec.ColorToRGB(TColorRec.Green));
  R := Rect(0, 0, pb.Width, pb.Height);
  FrameRect(pb.Canvas.Handle, R, Brush);

  GdipCreateFromHDC(pb.Canvas.Handle, GDIDC);
  GdipCreatePen1(ColorRefToARGB(TColorRec.ColorToRGB(TColorRec.Red)), 3, UnitPixel, Pen);
  GdipSetPenDashStyle(Pen, DashStyleSolid);
  GdipDrawLine(GDIDC, Pen, 10, 10, 200, 200);

  TextOut(pb.Canvas.Handle, 10, 10, 'Text', 4);
  FrameRect(pb.Canvas.Handle, R, Brush);
  GdipDeletePen(Pen);
  GdipDeleteGraphics(GDIDC);
end;    

此代码产生了下图what we have when run a program,看起来很奇怪,我们有两个具有相同参数的FrameRect产生了不同的输出,因此某些函数偏移了图形输出,让我们尝试注释GdipDrawLine并得到一个{ {0}} ups看起来很正常。因此,GdipDrawLine偏移GDI输出,我尝试它们仅偏移GDI输出而不偏移GDI +。

所以我有一个问题。首先,这是正常现象并有据可查吗?我检查了我发现有关偏移的GdipDrawLine Microsoft帮助。第二个如何禁用此偏移量。

0 个答案:

没有答案