我正在通过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);
但输出是:
我期望的结果是两个形状都不是另一个的前面。边框是点划线点。 谁能告诉我我的错误?感谢您的帮助。
答案 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中选择笔。