Delphi GdipDrawLine的奇怪行为
我发现GDI+有一个奇怪的行为(我尝试了GdipDrawLine)。我有一个简单的表单,上面有一个画框,在OnPaint事件中有一个简单的代码Delphi GdipDrawLine的奇怪行为,delphi,gdi+,gdi,Delphi,Gdi+,Gdi,我发现GDI+有一个奇怪的行为(我尝试了GdipDrawLine)。我有一个简单的表单,上面有一个画框,在OnPaint事件中有一个简单的代码 procedure TForm1.pbPaint(Sender: TObject); var Pen: GPPEN; GDIDC: GPGRAPHICS; Brush: HBrush; R: TRect; begin Brush := CreateSolidBrush(TColorRec.ColorToRGB(TColorRec.Gr
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;
这段代码生成了下面的图片,看起来很奇怪,我们有两个参数相同的FrameRect,它们生成了不同的输出,所以一些函数偏移了图形输出,让我们尝试注释GdipDrawLine,我们得到一个Ups,看起来很正常。所以GdipDrawLine偏移了一个GDI输出,我试着他们只偏移了一个GDI输出,而不是GDI+
所以我有一个问题。首先,它是正常的和有记录的吗?我查看了一个GdipDrawLine Microsoft帮助,发现没有关于偏移量的信息。第二,如何禁用这个偏移。< /P>我不使用Delphi,但是如果我把代码转换成C++,我就不能重现你的问题,它正常工作:我可以用Delphi Xe7确认结果,但是我不能解释它,否则混合GDI和GDI+设备上下文似乎是原因。如果移动行`GdipDeletePen(Pen);GdipDeleteGraphics(GDIDC);`在代码< >代码> >代码> >调用之前,结果是你想要的。事实上,GDI和GDI+之间的互操作性警告是我不使用Delphi,但是如果我把代码转换成C++,我就不能重现你的问题,它正常工作:我可以用Delphi XE7确认结果,但我不能解释它,除非混合GDI和GDI+设备上下文似乎是原因。如果移动行`GdipDeletePen(Pen);GdipDeleteGraphics(GDIDC);`在其他
Gdip…
调用之前,也就是TextOut()
调用之前,结果就是您想要的。事实上,GDI和GDI+之间的互操作性警告是