绘制线条的两种方法
下面每个示例都在位置 (20, 10) 和位置 (200, 100) 之间绘制了一条宽为 3 的红色线条。第一个示例调用 GDI,第二个示例通过托管类接口调用 GDI+。
使用 GDI 绘制线条
要使用GDI 绘制线条,需要两个对象:设备上下文和钢笔。通过调用 BeginPaint,可以获得设备上下文句柄;通过调用CreatePen,则可以获得钢笔句柄。下一步,调用 SelectObject 以将钢笔选入设备上下文。调用 MoveToEx,将钢笔位置设在 (20, 10),然后调用 LineTo,在钢笔位置与位置 (200, 100) 之间绘制一条线条。请注意,MoveToEx 和 LineTo 均将 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 对象分开。创建和维护 Brush、GraphicsPath、Image 和 Font 对象也可以与 Graphics 对象分开。Graphics 类提供的许多绘制方法都将 Brush、GraphicsPath、Image 或 Font 对象作为参数接收。例如,Brush 对象作为参数传递至 FillRectangle 方法,GraphicsPath 对象作为参数传递至 DrawPath 方法。同样,Image 和 Font 对象传递至 DrawImage 和 DrawString 方法。这与GDI 不同,在 GDI 中,需要将画笔、路径、图像或字体选入设备上下文,然后将设备上下文的句柄作为参数传递至绘制函数。