관리 메뉴

ComputerVision Jack

[MFC프로그래밍 - Chapter3] 본문

Image Processing/MFC Programming

[MFC프로그래밍 - Chapter3]

JackYoon 2020. 2. 18. 15:50
반응형

디바이스 콘텍스트

CProjectView 클래스

뷰 윈도우 영역을 관리하는 클래스. ProjectView.h 파일과 ProjectView.cpp파일로 구성된다.

 

OnDraw() 함수

윈도우에 WM_PAINT 메시지가 발생하면 수행된다.

 

WM_PAINT메세지가 발생하는 경우

  • 애플리케이션이 수행되기 시작하여 윈도우가 처음 등장할 때
  • 윈도우가 최소화 되었다가 회복되어 화면에 등장할 때
  • Invalidate()함수를 호출하여 윈도우를 무효화 할 때

OnDraw() 함수에는 포인터 값이 매개변수로 전달된다. 포인터를 따라가면 디바이스 콘텍스트 객체인 CDC객체가 있다.

OnDraw()에 넘겨지는 CDC 객체의 출력 영역은 애플리케이션의 프레임 윈도우 내 사각형 영역인 뷰 영역이다.

 

예제 : 텍스트 출력하기

텍스트 출력 함수

  • TextOut() - 특정 좌표를 주고 기준 문자열을 출력한다.
  • DrawText() - 박스 영역을 주고 그 안에 출력한다.

출력 위치를 지정하는 방식에 차이가 존재한다.

 

CRect 클래스

박스 영역을 지정할 때 사용하는 클래스

DrawText()함수를 사용할 때, CRect 클래스를 이용하여 박스 영역을 넘겨준다.

nFormat 인자를 통하여 문자열 위치를 잡아줄 수 있다.

 

문자열 출력하기
ex3_1 textDisplay.cpp
0.00MB

키보드 메세지 처리하기

키보드에서 키가 눌리고나 떼는 이벤트가 발생하면 이벤트 처리함수를 통해서 제어를 한다.

  • WM_CHAR
  • WM_KEYDOWN
  • WM_KEYUP

문자 키가 눌릴 경우 KEYDOWN 메세지 다음에 CHAR메세지가 발생한다.

 

CString 클래스

문자열을 저장 및 관리하기 위한 자료구조. 문자열 저장 공간에 대한 접근을 제한하면서 오류를 줄여준다.

 

윈도우 영역 무효화 함수

Invalidate() 함수

함수를 호출할 경우 윈도우의 뷰 영역을 무효화 한다. 

뷰의 영역에 이미 출력된 것을 삭제한다.

 

예제 : 윈도우에 입력된 문자열 출력하기

  • OnChar() 함수 - 입력된 문자열을 변수에 저장 (WM_CHAR)
  • OnDraw() 함수 - 문자열 변수에 저장된 내용 출력 (WM_PAINT)

문자열 입력하여 출력하기
ex3_2 input.cpp
0.00MB

마우스 이용하여 그리기

마우스도 키보드와 마찬가지로 마우스 이벤트가 발생하면 이벤트 메세지에 따라서 처리 핸들러를 제작하면 된다.

  • WM_LBUTTONDOWN
  • WM_LBUTTONUP
  • WM_RBUTTONDOWN
  • WM_RBUTTONUP
  • WM_MOUSEMOVE

마우스 메세지와 함께 nFlags (키보드 /마우스 상태 정보) 변수도 함께 전달한다.

 

예제 : 직선그리기

  • MoveTo() 함수 - 시작점으로 포인트를 옮기는 함수
  • LineTo() 함수 - 직선 그리는 함수, 현재 위치부터 마지막 지점까지 선을 그린다.

직선 그리기
ex3_3 LineDraw.cpp
0.00MB

예제 : 색상 선택 후 직사각형 그리기

 

CPen 클래스

선을 그릴 때 사용하는 그래픽 객체 생성

CPen::CreatePen() 함수를 이용하여 펜을 만들고 디바이스 콘텍스트에 등록하여 사용 가능하다.

SelectObject() 함수를 사용하여 생성한 펜을 집는다. 그래픽 객체인 펜을 반환한다.

그리기를 마무리한 후 CPen::DeleteObject() 함수를 사용하여 펜을 삭제한다.

 

키보드로 문자입력 받아 대응하는 색 사각형 그리기
ex3_4 ColorRect.cpp
0.00MB

원 그리기 함수

Ellipse() 함수를 통하여 타원을 그릴 수 있다. 기본적으로 2개의 좌표 값이 필요하고

사각형 틀을 지정하여 그안에 내접하는 원을 그린다.

 

예제 : 브러쉬 선택후 원 그리기

 

CBrush 클래스

선을 그릴 때 사용하는 그래픽 객체이며 내부를 채색할 때 사용된다.

 

다각형 그리기

다각형과 다각선은 점과 직선으로 구성된다.

Polyline() 함수를 통하여 다각선을 그리고 Polygon() 함수를 이용하여 다각형을 만든다.

 

브러쉬 이용한 원그리기
ex3_5 brush_circle.cpp
0.00MB

CClientDC 클래스

다른 함수에서 뷰 영역에 문자나 그림을 출력하는 것을 도와주는 객체를 생성하는 클래스

CClientDC dc(this); 통하여 어떤 멤버함수든 출력할 수 있다.

레스터 연산

레스터 연산

CClientDC를 이용할 때, 가장 많이 사용하는 연산

윈도우의 배경색과 그리는 색 사이에 논리 연산을 하고 결과로 얻는 색을 가지고 그림을 그리는 방법

  • R2_COPYPEN
  • R2_NOT
  • R2_NOTCOPYPEN
  • R2_NOTXORPEN
  • R2_XORPEN

레스터 연산을 이용하면, 특정 도형을 윈도우 내에서 지우고 새로운 좌표에 다시 그릴 때 편리하다.

화면 깜빡임이 줄어든다.

 

레스터 연산의 문제
ex3-6 래스터 연산.cpp
0.00MB

반응형

'Image Processing > MFC Programming' 카테고리의 다른 글

[MFC프로그래밍 - Chapter6]  (0) 2020.02.25
[MFC프로그래밍 - Chapter5]  (0) 2020.02.24
[MFC프로그래밍 -Chapter4]  (0) 2020.02.21
[MFC프로그래밍 - Chapter2]  (0) 2020.02.12
[MFC프로그래밍 - Chapter1]  (0) 2020.02.11
Comments