我发现了GDI +的奇怪行为(我尝试了GdipDrawLine)。我在上有一个带有绘画框的简单表单,在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;
此代码产生了下图,看起来很奇怪,我们有两个具有相同参数的FrameRect产生了不同的输出,因此某些函数偏移了图形输出,让我们尝试注释GdipDrawLine并得到一个{ {0}} ups看起来很正常。因此,GdipDrawLine偏移GDI输出,我尝试它们仅偏移GDI输出而不偏移GDI +。
所以我有一个问题。首先,这是正常现象并有据可查吗?我检查了我发现有关偏移的GdipDrawLine Microsoft帮助。第二个如何禁用此偏移量。