코드/MFC

[MFC] 따라하기 02. 버튼을 이용하여 사각형 그리기/지우기

야곰야곰+책벌레 2022. 3. 2. 17:07
728x90
반응형

1. 프로젝트 예제에 사용되는 내용

  • 함수의 사용
  • 버튼 사용의 이해
 

[MFC] 따라하기 01. 사각형 그리기

1. 프로젝트 예제에 사용되는 내용 Dialog Based 프로젝트 생성 방법 PaintDC()의 이해 2. 프로젝트 생성 MFC 응용프로그램 프로젝트를 만들기 위해서는 위 그림에 있는 버튼을 차례대로 누른다. File/New

stormpy.tistory.com

2. 함수를 이용하여 사각형 그리기

사각형을 그리는 프로젝트에서 해당 기능을 떼어내어 함수로 옮겨보자. 함수의 이름은 DrawRectangle로 하며 반환 값은 없으므로 void로 선언하자.

void CDrawRectDlg::DrawRectangle(CPaintDC& dc)
{
	dc.MoveTo(10, 10);
	dc.LineTo(110, 10);
	dc.LineTo(110, 110);
	dc.LineTo(10, 110);
	dc.LineTo(10, 10);
}
함수는 어떤 특정 기능을 하나의 패키 형태로 만들어 놓은 것을 말한다. 중복되는 기능의 반복 호출, 기능에 대한 분류로 보다 편하고 깔끔한 코딩을 가능하게 한다.
※ 함수의 형태 :
[반환 값] [함수 이름] [매개변수]
{
       [함수의 내용]
}
반환 값을 가지지 않는 함수의 경우는 void를 사용하면 되고 매개변수가 없는 경우는 그냥 괄호만 사용하면 된다.

DrawRectangle 함수는 클래스 CDrawRectDlg의 멤버 함수이기 때문에 CDrawRectDlg::DrawRectangle()로 표현되며 return 하는 값을 가지지 않기 때문에 void로 선언된다. DrawRectangle은 CPaintDC를 얻어와야 하기 때문에 CPaintDC&를 매개변수로 한다. 이 클래스는 복사자를 허용하지 않지 &를 사용하여 전달해 줘야 한다.

Reference(참조자) : 참조는 포인터와 크게 다르지 않으며 일반적으로 개체의 기계적 주소 값을 가져오는 기능을 한다. 

멤버 함수는 클래스의 헤드 파일에도 동일하게 선언해 주어야 한다.

OnPaint() 함수에는 기존의 코드 대신에 함수를 호출할 수 있도록 변경하자.

	else
	{
		// 여기에 사각형을 그리는 코드를 추가한다.
		CPaintDC dc(this); // device context for painting
		DrawRectangle(dc);

		CDialogEx::OnPaint();
	}

컴파일을 진행하고 실행을 하면 기존과 동일하게 동작함을 확인할 수 있다.

3. 버튼 추가하여 사용하기

다이얼로그에 버튼을 추가해 보자.

리소스 뷰에서 다이얼로그를 선택한 뒤, 툴박스에서 Button을 선택해서 Dialog 위로 옮겨 추가하자.

해당 버튼을 클릭 한 뒤, 속성에서 Caption과 ID를 변경해 주자. Caption은 표시되는 이름이며, ID는 Resource ID가 되는데 관리할 것이 아니라면 변경하지 않아도 되지만 용도에 맞게 ID를 정하는 습관을 들이는 것이 좋다.

만들어진 버튼을 더블클릭하면 버튼이 클릭(Down & Up 동작)할 경우 발생하는 이벤트 BN_CLICKED가 자동으로 생성된다.

그림을 지우려면 다시 그리기를 해야 한다. 그리고 그릴 때와 그리지 않는 것으로 그리기/지우기의 기능을 구현할 수 있다. 이 조건을 기억하고 있는 bool m_bDrawRect을 선언한다.

Redrawwindow()는 화면에 리소스들을 모두 다시 그리는 함수다. 이때 m_bDrawRect의 상태를 바꿔주며 동작할 수 있도록 추가한다. 그리고 실제로 동작할 수 있도록 m_bDrawRect 변수를 이용하여 DrawRectangle() 함수의 호출을 제어한다.

	else
	{
		// 여기에 사각형을 그리는 코드를 추가한다.
		CPaintDC dc(this); // device context for painting

		if (m_bDrawRect)
			DrawRectangle(dc);

		CDialogEx::OnPaint();
	}

버튼을 누르면 사각형이 나타났다가 사라지는 것을 확인할 수 있다.

02. 버튼을 이용하여 사각형 생성과 삭제 (DrawRect).zip
0.13MB

728x90
반응형