2012-02-10 1 views
1

저는 VB.NET WinForms 응용 프로그램이 있습니다. GDI +를 사용하여 패널에 프로그래밍 방식으로 모양을 그리는 중입니다. 이제 저는 그 패널의 작은 직사각형 부분을 어떤 식 으로든 강조하고 싶습니다. 강조 표시된 영역이 많이 움직입니다. 너무 많은 처리가 필요하고 깜박임이 발생하기 때문에 전체 패널을 다시 그리기를 원하지 않습니다. 이 작업을 수행하는 가장 좋은 방법은 무엇입니까?패널 영역 강조 표시

감사합니다.

+0

는 "많은 주위 이동합니다 강조 영역"에 의해 무엇을 의미합니까 :

여기 아주 기초적인 예입니다? 마우스로 잡으면 반투명 한 일종의 고정 사각형입니까? 아니면 mousedown-mousemove-mouseup 액션을 통해 해당 지역을 강조하고 있습니까? 더 많은 컨텍스트를 부탁드립니다. – LarsTech

답변

1

투명 패널을 기존 패널의 하위 패널로 추가 (및 고정) 한 다음 투명 패널에서 강조 표시 할 수 있습니까?

public partial class Form1 : Form 
{ 
    private Panel pan = new Panel(); 
    private Panel trans = new Panel(); 

    private bool clicked { get; set; } 
    private Point mouse { get; set; } 

    public Form1() 
    { 
     InitializeComponent(); 
     this.Load += new EventHandler(Form1_Load); 
    } 

    public void Form1_Load(object sender, EventArgs e) 
    { 
     pan.Dock = DockStyle.Fill; 
     pan.BackColor = Color.White; 

     trans.Dock = DockStyle.Fill; 
     trans.BackColor = Color.FromArgb(0, 0, 0, 0); 

     pan.Paint += new PaintEventHandler(DrawSomeShapes); 
     trans.MouseClick += new MouseEventHandler(trans_MouseClick); 
     trans.Paint += new PaintEventHandler(DrawHighlight); 

     pan.Controls.Add(trans); 
     this.Controls.Add(pan); 

     trans.BringToFront(); 
    } 

    public void DrawSomeShapes(object sender, PaintEventArgs e) 
    { 
     var g = e.Graphics; 

     var p = new Pen(Color.Black, 1F); 
     g.DrawRectangle(p, new Rectangle(0, 0, 100, 100)); 
     g.DrawRectangle(p, new Rectangle(20, 20, 50, 50)); 
     g.DrawRectangle(p, new Rectangle(10, 50, 100, 25)); 
     g.DrawRectangle(new Pen(Color.Red, 1F), new Rectangle(new Point(50, 50), new Size(50, 50))); 
    } 

    public void DrawHighlight(object sender, PaintEventArgs e) 
    { 
     if (clicked) 
     { 
      var g = e.Graphics; 
      var b = new SolidBrush(Color.FromArgb(50, 50, 50, 50)); 
      g.FillRectangle(b, mouse.X, mouse.Y, 50, 50); 

      clicked = false; 
     } 
    } 

    public void trans_MouseClick(object sender, MouseEventArgs e) 
    { 
     mouse = e.Location; 
     trans.Invalidate(); 
     clicked = true; 
    } 
} 
+0

그게 효과가 있어요. 감사합니다. . – mcu