본문 바로가기
Application/C#.net

부드러운 Rectangle 그리기

by 현이빈이 2009. 10. 8.
반응형


마우스 드래그시 Rectangle 상자를 그려주는 모듈이 필요했다..
Graphics 의 DrawRectangle로 그렸더니 동작은 잘 된다..

그러나 큰 문제가 남았다.. 잔상이 심하게 남는다.



이런.. C
이래선 되겠는가..
구글신을 찾아갔다~~
역시 해결책이 있다..

GDI+ 의 XOR 연산을 통한 모듈이 있다.
친절하게 클래스로 만들어져 있다.


사용방법은 간단하다.

1. cs 파일은 다운 받아 등록한다.
2. 전역 변수를 선언한다.
3. MouseDown, MouseMove, MouseUp 이벤트를 걸어준다.


해당 코드를 살펴보자

private CGdi32 gdi;
private Point oldMouse, mouseDownAt;

private void pnlMain_MouseMove(object sender, MouseEventArgs e)
{
   if (e.Button == MouseButtons.Left)
   {
     gdi.DrawRectangle(pnlMain.CreateGraphics(), mouseDownAt, new Point(e.X, e.Y));
     gdi.DrawRectangle(pnlMain.CreateGraphics(), mouseDownAt, oldMouse);
     oldMouse = new Point(e.X, e.Y);    
    }
  }

  private void pnlMain_MouseUp(object sender, MouseEventArgs e)
  {
   if (e.Button == MouseButtons.Left)
   {
     gdi.DrawRectangle(pnlMain.CreateGraphics(), mouseDownAt, oldMouse);   
    }
 }

  private void pnlMain_MouseDown(object sender, MouseEventArgs e)
  {
   if (e.Button == MouseButtons.Left)
    oldMouse = mouseDownAt = new Point(e.X, e.Y);
  }




사용된 cs 파일은 아래 링크에서 다운 받으면 된다.

원문 / 다운 : http://www.codeproject.com/KB/GDI-plus/rubberrectangle.aspx

반응형