我被WinAPI的C++ 学习绘制形状我试图上WM_PAINT绘制2椭圆一些代码:绘制形状在WinAPI的C++
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);
但输出是:
结果我期望的是既不是形状是对方的前面。边界是点划线。 任何人都可以告诉我我的错误吗?我很感谢你的帮助。
如果将宽度从2更改为1,则您的虚线可能会奇迹般地出现。从['CreatePen()'](http://msdn.microsoft.com/zh-cn/library/windows/desktop/ dd183509(v = vs.85).aspx)documentation:“如果由nWidth指定的值大于1,则fnPenStyle参数必须为PS_NULL,PS_SOLID或PS_INSIDEFRAME。” PS_DASHDOTDOT描述进一步说明了这一点:“笔具有交替的破折号和双点,这种样式仅在笔宽等于或小于设备单位时才有效。”关于透明度,考虑一下NULL笔刷。 – WhozCraig
@WhozCraig:非常感谢。我懂了。但是有没有什么方法可以让短划线更宽?并可以绘制两种形状相互重叠,但保持2个形状的边界? – suti
自从我使用GDI绘图以来,它已经过去了十多年。我需要一段时间才能回到它。同心椭圆可能是您在较粗线条(一个在另一个内部绘制)中最好的选择。对于重叠区域,这需要我花一分钟来刷新我的头脑。也许是一个地区。 – WhozCraig