删除GDI+中某行的某个部分

Erase a certain part of line in GDI+

本文关键字:个部 删除 GDI+      更新时间:2023-10-16

我有一条类似箭头的线。我在那行的上面画了一段文字。现在我想擦除行中与文本重叠的部分

我当前的代码是:

SolidBrush *brush1=new SolidBrush(Color::Color(0,167,255));
StringFormat format; 
format.SetAlignment(StringAlignmentCenter); 
format.SetLineAlignment(StringAlignmentCenter); 
graph->DrawLine(myPen,point2,point1); 
graph->DrawString(strdata,wcslen(strdata),&font,point2,&format,brush1);

我也试过

AdjustableArrowCap *cap1 = new AdjustableArrowCap(5, 5, true);
Pen *myPen1 = new Pen(Color::Color(0,255,255), width);
myPen->SetCustomEndCap(cap1);
GraphicsPath path;
path.AddLine(point1,point2);
Font font(&FontFamily(L"arial"), 21);
Brush *brush=new SolidBrush(Color::Color(0,255,255,255));
SolidBrush solidBrush(Color(255, 255, 0, 0));
StringFormat format;
format.SetAlignment(StringAlignmentCenter);
format.SetLineAlignment(StringAlignmentCenter);
RectF rectbo;
graph->MeasureString(strdata,wcslen(strdata),&font,PointF::PointF(point2),&rectbo);

graph->DrawLine(myPen,point2,point1);
Region pathRegion(&path);
sta=pathRegion.Intersect(rectbo);
graph->fillRegion(pathRegion,&brush);
graph->DrawString(strdata,wcslen(strdata),&font,point2,&format,brush1);

先画线,然后画文本

  • 同时确保已启用笔刷实心/清晰样式
  • 因此文本将覆盖文本下方的空格
  • 纸张按原样清除/或留下

我为你找到了

  • Brush Winapi引用
  • 因此为bsClear等效项设置LOGBRUSH::lbStyle=BS_NULL;
  • bsSolid等价的CCD_ 2