我正在尝试在GDI +(C ++)中构建自定义行上限,而我无法用它来绘制填充上限,而未填充的上限可以正常。
我设置一个封闭的多边形路径,创建一个CustomLineCap,路径作为第一个参数(fillPath参数),并在笔上调用SetCustomStartCap:
std::vector<Gdiplus::Point> pathPoints =
{
Gdiplus::Point(20,0),
Gdiplus::Point(0,20),
Gdiplus::Point(-20,0),
Gdiplus::Point(20,0)
};
Gdiplus::GraphicsPath path;
path.AddPolygon(&pathPoints[0], 4);
Gdiplus::CustomLineCap startCap(&path, nullptr);
Gdiplus::CustomLineCap endCap(nullptr, path.Clone());
m_Pen.SetCustomStartCap(&startCap);
m_Pen.SetCustomEndCap(&endCap);
我已经阅读过评论,它可能与点顺序有关,或者路径是否已经完全关闭。我试过顺时针和逆时针都有点,但似乎没有帮助。
如果我做了明显错误的事情,或者我错过了什么,有人能发现吗?
答案 0 :(得分:0)
除了点的顺序外,我认为还要求形状必须与负y轴相交,也就是直线本身。因此,如果您这样创建多边形
std::vector<Point> pathPoints =
{
Gdiplus::Point(20,-1),
Gdiplus::Point(0,19),
Gdiplus::Point(-20,-1)
};
然后,您将获得具有所需形状和尺寸的线帽,但它会稍微重叠线。
或者,如果您想专门使用箭头,请查看AdjustableArrowCap。只需将isFilled属性设置为TRUE,就可以了。或者,您可以仅将Pen的SetStartCap / SetEndCap方法与LineCapArrowAnchor参数一起使用,但随后您可能无法自定义箭头。