2009-12-15 76 views
0

我使用Microsoft.VisualBasic。 PowerPacks。 LineShape组件。 这个组件很好,但我想绘制一条曲线而不是一条正确的线。我stardet修改OnPaint:绘制从LineShape继承的新曲线形状

protected override void OnPaint(PaintEventArgs pevent) 
    { 
     //base.OnPaint(pevent);    
     pevent.Graphics.DrawLines(Pens.Green, new Point[] { 
      new Point(X1, Y1), new Point(40, 10), new Point(X2, Y2)}); 
    } 

组件被正确绘制,但它不检测鼠标事件(单击,向下)。请帮忙,这是我的整个测试代码:

using System; 
using System.Drawing; 
using System.Windows.Forms; 
using Microsoft.VisualBasic.PowerPacks; 

namespace WindowsApplication1 
{ 
    public partial class Form1 : Form 
    { 
     private ShapeContainer shapeContainer1; 

     public Form1() 
     { 
      this.shapeContainer1 = new PowerPacks.ShapeContainer(); 
      InitializeComponent(); 

      // add the shapeContainer1 
      this.Controls.Add(this.shapeContainer1); 

      // add a blue LineShape 
      this.shapeContainer1.Shapes.Add(
       new LineShape(60, 10, 90, 70)); 
      (this.shapeContainer1.Shapes.get_Item(0) as LineShape).BorderColor = Color.Blue; 

      // add a red (green in OnPaint) MyCourveShape 
      this.shapeContainer1.Shapes.Add(
       new MyCourveShape(10, 10, 50, 50)); 
      (this.shapeContainer1.Shapes.get_Item(1) as MyCourveShape).BorderColor = Color.Red; 
     } 
    } 

    public class MyCourveShape : Microsoft.VisualBasic.PowerPacks.LineShape 
    { 
     public MyCourveShape(int x1, int y1, int x2, int y2) 
     { 
      this.X1 = x1; 
      this.X2 = x2; 
      this.Y1 = y1; 
      this.Y2 = y2; 
     } 

     protected override void OnPaint(PaintEventArgs pevent) 
     { 
      //base.OnPaint(pevent);    
      pevent.Graphics.DrawLines(Pens.Green, new Point[] { 
       new Point(X1, Y1), new Point(40, 10), new Point(X2, Y2)}); 
     } 

     protected override void OnClick(EventArgs e) 
     { 
      base.OnClick(e); 
      MessageBox.Show("MyCourveShape clicked!"); 
     } 
    } 
} 

回答

1

你也必须重写HitTest()方法。基本实现仍然假设它是一条直线。

+0

我想这应该是一个有点复杂...在基地实施... ...看看 – serhio 2009-12-15 13:45:46

+1

使用GraphicsPath.IsOutlineVisible与一个相对较胖的笔。同一个GraphicsPath对象适合绘画。 – 2009-12-15 14:07:25