我做了一個自定義的可移動控件,並且像素計算有問題。爲什麼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)時,unwatned剪輯不會發生。
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);' –