Я сделал собственный движимый элемент управления и имею проблему с вычислением пикселей.Почему PenAlignment.Inset не влияет на пользовательский чертеж?
Размер управления 100, 100, а заполнение и маржа - 0,0,0,0.
Я думал, что вычитание ширины пера в два раза из ширины (и высоты) будет выполняться, но когда я делаю Нижняя и правая линии от DrawRectangle обрезаются частично или полностью, в зависимости от значений pen.Width и коэффициентов уменьшения размера. Ширина size.Height
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
var pen = new Pen(Color.Black);
pen.Width = 16;
pen.Alignment = System.Drawing.Drawing2D.PenAlignment.Inset;
var brush = Brushes.Aquamarine;
var size = this.Size;
size.Width -= (int)(pen.Width * 2);
size.Height -= (int)(pen.Width * 2);
var rec = new Rectangle(this.Location, this.Size);
e.Graphics.FillRectangle(brush, rec);
e.Graphics.DrawRectangle(pen, rec);
}
Похоже всего изображения за пределами (90, 90) точка не усекается независимо от того, какое значение выбрано pen.Width.
РЕДАКТИРОВАТЬ: Я только что обнаружил, что неуправляемое обрезание не происходит, когда control.Location установлен (0, 0).
public partial class Form1 : Form
{
MTC control;
public Form1()
{
InitializeComponent();
control = new MTC();
control.Parent = panel1;
control.Width = 100; control.Height = 200;
//control.Left = 100; control.Top = 100;
control.Location = new Point(0, 0);
panel1.Controls.Add(control);
Окраска относится к клиентской зоне управления. Поэтому вы должны использовать 'var rec = new Rectangle (Point.Empty, size);' –