HatchPen CreateHatchPen(Color color, float width) { HatchPen pen = new HatchPen(); // TODO: brush 被谁拥有?会被正确释放么? pen.Brush = new HatchBrush(HatchStyle.DarkUpwardDiagonal, // WideDownwardDiagonal, // Color.FromArgb(0, 255, 255, 255), Color.FromArgb(0, 254, 254, 254), Color.FromArgb(255, color) ); // back pen.Pen = new Pen(pen.Brush, width); // 可修改 return pen; }
HatchPen CreateHatchPen(Color color, float width) { HatchPen pen = new HatchPen(); // TODO: brush 被谁拥有?会被正确释放么? pen.Brush = new HatchBrush(HatchStyle.DarkUpwardDiagonal, // WideDownwardDiagonal, // Color.FromArgb(0, 255, 255, 255), Color.FromArgb(0, 254, 254, 254), Color.FromArgb(255, color) ); // back pen.Pen = new Pen(pen.Brush, width); // 可修改 return(pen); }
private void LineLayerForm_Paint(object sender, PaintEventArgs e) { if (this._transparent == true) { return; } if (this._panelState == dp2Circulation.PanelState.HilightPanel) { if (_targetRect != new Rectangle(0, 0, 0, 0)) { e.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; // 整个背景填充为灰色 using (Brush brush = new SolidBrush(Color.LightGray)) { e.Graphics.FillRectangle(brush, this.ClientRectangle); } using (HatchPen hatch_pen = CreateHatchPen(Color.Blue, 6)) { Rectangle rectTarget = this.RectangleToClient(_targetRect); Rectangle rectTargetBorder = rectTarget; Pen pen = hatch_pen.Pen; rectTargetBorder.Inflate((int)pen.Width / 2, (int)pen.Width / 2); using (Brush brush = new SolidBrush(this.BackColor)) { e.Graphics.FillRectangle(brush, rectTarget); } } // 将 source 位置的线条用背景色擦除 using (Brush brush = new SolidBrush(this.BackColor)) { Rectangle rectSource = this.RectangleToClient(_sourceRect); e.Graphics.FillRectangle(brush, rectSource); } using (HatchPen hatch_pen = CreateHatchPen(Color.Blue, 6)) { Rectangle rectSource = this.RectangleToClient(_sourceRect); Rectangle rectBorder = rectSource; Pen pen = hatch_pen.Pen; rectBorder.Inflate((int)pen.Width / 2, (int)pen.Width / 2); e.Graphics.DrawRectangle(pen, rectBorder); } } } else if (this._panelState == dp2Circulation.PanelState.HilightForm) { // 把 source 区域变成灰色 using (Brush brush = CreateHatchBrush(Color.DarkGray)) // new SolidBrush(Color.LightGray) { e.Graphics.FillRectangle(brush, this.RectangleToClient(_sourceRect)); } } }