private void pBox_MouseDown(object sender, MouseEventArgs e)
{
// 픽처박스 안에 마우스가 클릭되어 있지 않으면 종료한다.
if (!pBox.Capture)
return;
// 픽처박스 안에 마우스가 클릭되어 있다면 마우스가 클릭된 좌표를 현재 좌표로 저장
Point curPoint = new Point(e.X, e.Y);
// 이전 좌표값을 현재 좌표값으로 설정
prePoint = curPoint;
// 픽처박스 객체를 통해 그래픽 객체를 생성
Graphics g = pBox.CreateGraphics();
// 현재 이미지의 객체를 인수로 하여 테스처브러시 객체를 생성
Brush textureBrush = new TextureBrush(curImage);
// 텍스처브러쉬 객체를 인수로 하여 굵기가 30인 Pen 객체를 생성합니다.
Pen pen = new Pen(textureBrush, 30);
// 펜의 시작부분과 끝부분을 라운드 처리합니다.
pen.StartCap = LineCap.Round;
pen.EndCap = LineCap.Round;
//펜을 통해 이전 좌표에서 현재 좌표로 라인을 그립니다.
g.DrawLine(pen, prePoint, curPoint);
// 현재 마우스가 픽처박스 안에 위치해 있음을 설정합니다.
pBox.Capture = true;
}
TextureBrush 클래스의 각 속성은 이미지를 사용하여 도형 내부를 채우는 Brush 개체입니다.
private void pBox_MouseUp(object sender, MouseEventArgs e)
{
// 마우스의 버튼이 놓아 졌을때의 좌표를 현재 좌표로 설정
Point curPoint = new Point(e.X, e.Y);
// 픽처박스 객체를 통해 그래프 객체 생성
Graphics g = pBox.CreateGraphics();
// 현재 이미지의 객체를 인수로 하여 텍스처브러쉬를 만듬
Brush textureBrush = new TextureBrush(curImage);
// 텍스처브러쉬 객체를 인수로 하여 굵기가 30인 Pen 객체를 생성
Pen pen = new Pen(textureBrush, 30);
// 펜의 시작부분과 끝부분을 라운드 처리
pen.StartCap = LineCap.Round;
pen.EndCap = LineCap.Round;
// 펜을 통해 이전 좌표에서 현재 좌표로 라인을 그림
g.DrawLine(pen, prePoint, curPoint);
// 이전 좌표값을 현재 좌표값으로 설정
prePoint = curPoint;
// 현재 마우스가 픽처박스안에 위치 하지 않았다고 설정
pBox.Capture = false;
}
위의 마우스 다운과 마우스 업 이 무엇이 다른지 찾아보자....금방 알수 있을거라 생각된다
private void pBox_MouseMove(object sender, MouseEventArgs e)
{
// 픽처박스 안에 마우스가 위치하지 않았으면 메서드를 종료
if (!pBox.Capture)
return;
// 마우스의 이동횟수가 1000회를 넘지 않았으면
if (movesLen < 1000)
{
// 마우스의 이동 횟수를 증가
movesLen++;
// 현재 마우스의 좌표를 현재 좌표로 설정
Point curPoint = new Point(e.X, e.Y);
// 픽처박스 객체를 통해 그래프 객체 생성
Graphics g = pBox.CreateGraphics();
// 현재 이미지의 객체를 인수로 하여 텍스처브러쉬
Brush textureBrush = new TextureBrush(curImage);
// 텍스처브러쉬 객체를 인수로 하여 굵기가 30인 Pen 객체를 생성
Pen pen = new Pen(textureBrush, 30);
// 펜의 시작부분과 끝부분을 라운드 처리
pen.StartCap = LineCap.Round;
pen.EndCap = LineCap.Round;
// 펜을 통해 이전 좌표에서 현재 좌표로 라인을 그림
g.DrawLine(pen, prePoint, curPoint);
// 이전 좌표값을 현재 좌표값으로 설정
prePoint = curPoint;
// 스크래치 진행률을 마우스의 이동횟수
label1.Text = movesLen.ToString();
//프로그래스바의 값을 마우스의 이동횟수로 셋팅
pr1.Value = movesLen;
}
else
{
// 마우스의 이동횟수가 1000이상이면 전체 이미지를 보여줌
pBox.Image = curImage;
}
}