В принципе у меня есть форма и я пытаюсь «сгладить» ее области, чтобы нарисовать фокус на определенную часть формы. Для этого я использую форму без границы и непрозрачность 50%, выровненную с фактической формой. Область, которую я пытаюсь замаскировать это темно-серая область, грубо говоря, как показано на рисунке:GraphicsPath.AddPolygon не отображается должным образом
Чтобы получить «U» -образной формы, я использую GraphicsPath
с AddPolygon
, расчет точки каждая вершина:
var p = new GraphicsPath();
var origin = new Point(Top, Left);
var maxExtentPt = new Point(origin.X + Width, origin.Y + Height);
Point[] points = {
origin,
new Point(origin.X + leftPanel.Width, origin.Y),
new Point(origin.X + leftPanel.Width, maxExtentPt.Y - bottomPanel.Height),
new Point(maxExtentPt.X - rightPanel.Width, maxExtentPt.Y- bottomPanel.Height),
new Point(maxExtentPt.X - rightPanel.Width, origin.Y),
new Point(maxExtentPt.X, origin.Y),
maxExtentPt,
new Point(origin.X, maxExtentPt.Y),
origin
};
p.AddPolygon(points);
overlayForm.Region = new Region(p);
overlayForm.Location = PointToScreen(Point.Empty);
три панели в коде, что я маскирования, поэтому я использую их размеры для расчета баллов. Вместо того, чтобы получить мой ожидаемый результат, маска выглядит следующим образом, с изменением размера, как изменить размер основной формы (I пересчитывать область на перемещение и изменение размеров):
Есть некоторые ограничения GraphicsPath.AddPolygon
, что Я не знаю? Я дважды проверял (по-четному) результаты моих расчетов, в том числе беря координаты для каждой точки и подключая их к Ipe, чтобы увидеть, действительно ли форма была правильной ... Это было так. Но не в моей программе!
Edit: Вот значение каждой точки, когда я достиг точки останова в p.AddPolygon(points);
я начинаю в верхнем левом углу и обход по часовой стрелке:
Что '' Top' и Left'? Разве они не были бы сверху и слева от вашей формы без полей в координатах экрана? – adv12
@ adv12 Извините, этот код находится в моей «реальной» форме, поэтому 'Top',' Left', 'Width' и' Height' относятся к этому. – helrich
извините - если бы я более внимательно прочитал, я мог бы понять это сам. В любом случае, с вашего скриншота значений точки, похоже, что Top и Left должны быть равны 0. – adv12