//6. 하나의 도형을 마치는 기준은 마우스를 뗄 때다. mouseUp 이벤트 핸들러를 이용하자 private void Form1_MouseUp(object sender, MouseEventArgs e) { //링크드리스트의 마지막에 나의 myData를 집어놓고, 다음 나의 myData를 위해 초기화(new)를 새로 해준다 // -myData를 집어넣었다는 건, 내가 지금 그리는 도형의 (색상/위치/크기/배열)정보를 넘겼다는 거다 total_lines.AddLast(myData); myData = new CMyData(); }
//그림판은 언제 동작하냐면, 내가 마우스로 그릴 때다. -> 마우스를 클릭할 때. 이벤트로 만들자 // 4. 마우스다운 이벤트 // - 처음에는, 빨간/사각/1size의 점을 그리도록 한다 private void Form1_MouseDown(object sender, MouseEventArgs e) { // 4-1. 마우스 [오른쪽/왼쪽]있으니, 왼쪽을 클릭할 때라고 조건문을 걸자 if (e.Button == MouseButtons.Left) { //4-2. 전역에서 선언한 maDaya를 초기화시켜주자 myData = new CMyData(); myData.Shape = iCurrentShape; // 모양/넓이, 색상 를 정해주자 // 4-3. iCurrentShape는 0(사각형)/1(원형)/2(자유곡선)이 있다 // -자유곡선의 크기는 현재 크기 그대로 유지하도록 한다 // -원형/사각형의 크기는 실선보다 굵기가 굵어야하니, 그 10배로 수정해준다 if (iCurrentShape == 2) { myData.Width = iCurrentWidth; } else { myData.Width = 10 * iCurrentWidth; } // 4-4. 색상 myData.Color = iCurrentColor; // 4-5. 위치 조정 // - 내 마우스의 좌표를 받아 LinkedList에 넣도록 할 것이다 // - myData의 함수를 호출하여 좌표값을 저장한다 p = new Point(e.X, e.Y); myData.AR.Add(p); //이게 이해가 직관적으로 안 되었는데, myData.AR로 배열을 리턴받아 그 배열, ar에 포인터p값을 저장하는 걸로 생각하면 되는 거였다 // 4-6. 브러쉬 조정 // - 브러쉬 객체를 만들자 // - 그려낼 graphics 필드를 만들어주자 SolidBrush b = new SolidBrush(iCurrentColor); Graphics g = this.CreateGraphics(); // - 만약, 현재 모양이 0(사각형)/1(원향) 이라면 (브러쉬, x좌표, y좌표, 높이, 너비)를 설정해줘야한다 // - 테두리가 있기때문에, 색상이 꽉찬 도형과 테투리만 가진 도형 두 개를 그려낸다. if (iCurrentShape == 0) { g.FillRectangle(b, e.X, e.Y, 10 * iCurrentWidth, 10 * iCurrentWidth); g.DrawRectangle(new Pen(Color.Black), e.X, e.Y, 10 * iCurrentWidth, 10 * iCurrentWidth); } if (iCurrentShape == 1) { g.FillEllipse(b, e.X, e.Y, 10 * iCurrentWidth, 10 * iCurrentWidth); g.DrawEllipse(new Pen(Color.Black), e.X, e.Y, 10 * iCurrentWidth, 10 * iCurrentWidth); } } }