绘制线条的两种方法

下面每个示例都在位置 (20, 10) 和位置 (200, 100) 之间绘制了一条宽为 3 的红色线条。第一个示例调用 GDI,第二个示例通过托管类接口调用 GDI+。

使用 GDI 绘制线条

要使用GDI 绘制线条,需要两个对象:设备上下文和钢笔。通过调用 BeginPaint,可以获得设备上下文句柄;通过调用CreatePen,则可以获得钢笔句柄。下一步,调用 SelectObject 以将钢笔选入设备上下文。调用 MoveToEx,将钢笔位置设在 (20, 10),然后调用 LineTo,在钢笔位置与位置 (200, 100) 之间绘制一条线条。请注意,MoveToExLineTo 均将 hdc(设备上下文的句柄)作为参数接收。


HDC          hdc;
 
PAINTSTRUCT  ps;
 
HPEN         hPen;
 
...
 
hdc = BeginPaint(hWnd, &ps);
 
   hPen = CreatePen(PS_SOLID, 3, RGB(255, 0, 0));
 
   SelectObject(hdc, hPen);
 
   MoveToEx(hdc, 20, 10, NULL);
 
   LineTo(hdc, 200, 100);
 
EndPaint(hWnd, &ps);


使用 GDI+ 和托管类接口绘制线条

用GDI+的C++类接口来画线,你需要一个Graphics 对象和一个Pen 对象。你不要去获得这些对象的句柄。你去创建一个Graphics 对象和一个Pen 对象。调用Graphics 对象的Graphics::DrawLine 方法。Graphics::DrawLine 方法的第一个参数,就是指向你的Pen 对象的指针。


HDC          hdc;
 
PAINTSTRUCT  ps;
 
Pen*         myPen;
 
Graphics*    myGraphics;
 
hdc = BeginPaint(hWnd, &ps);
 
   myPen = new Pen(Color(255, 255, 0, 0), 3);
 
   myGraphics = new Graphics(hdc);
 
   myGraphics->DrawLine(myPen, 20, 10, 200, 100);
 
   delete myGraphics;
 
   delete myPen;
 
EndPaint(hWnd, &ps)

;


 

作为参数的钢笔、画笔、路径、图像和字体

前面的示例显示:创建和维护Pen 对象可以与提供绘制方法的 Graphics 对象分开。创建和维护 BrushGraphicsPathImage Font 对象也可以与 Graphics 对象分开。Graphics 类提供的许多绘制方法都将 BrushGraphicsPathImage Font 对象作为参数接收。例如,Brush 对象作为参数传递至 FillRectangle 方法,GraphicsPath 对象作为参数传递至 DrawPath 方法。同样,ImageFont 对象传递至 DrawImageDrawString 方法。这与GDI 不同,在 GDI 中,需要将画笔、路径、图像或字体选入设备上下文,然后将设备上下文的句柄作为参数传递至绘制函数。