在WinAPI C ++中绘制形状

时间:2013-04-03 16:48:26

标签: winapi drawing border

我正在通过WinAPI C ++学习绘图形状 我试图用WM_PAINT上的一些代码绘制2个椭圆:

PAINTSTRUCT ps;
HDC hdc = BeginPaint(hWnd, &ps);
HPEN hPen = CreatePen(PS_DASHDOTDOT, 2, NULL);SelectObject(hdc, hPen);
Ellipse(hdc, 100, 200, 400, 400);
Ellipse(hdc, 300, 300, 500, 510);   

DeleteObject(hPen);
EndPaint(hWnd, &ps);

但输出是:

enter image description here 我期望的结果是两个形状都不是另一个的前面。边框是点划线点。 谁能告诉我我的错误?感谢您的帮助。

2 个答案:

答案 0 :(得分:4)

Ellipse()(与所有GDI形状函数一样)使用当前画笔填充形状,这就是您的输出看起来像这样的原因。有关详细信息,请参阅setting pen and brush colors

如果您只想要没有填充的椭圆,请先选择空刷:

SelectObject( hdc, GetStockObject( NULL_BRUSH ) );

答案 1 :(得分:3)

一个出现在另一个之上,因为你不仅仅是绘制轮廓,而是填充它。要停止填充它,您可以选择“空心画笔”,有时也称为“空画笔”。

HBRUSH hbrOld = SelectObject(hdc, GetStockObject(HOLLOW_BRUSH));
// draw your ellipses here

您只能使用widths of 1 or 0创建点线或虚线笔。您使用了2,因此命令失败。

另外,在删除之前,应该从DC中选择笔。