[프로그래밍 언어]/mfc

[C++/mfc ] mfc 기초, mfc 원 그리기

우당탕탕 개발 일지 2024. 5. 3. 11:19

안녕하세요. 우당탕탕 개발 일지입니다. mfc를 2학년 1학기 과목으로 듣게 되었고 교재가 따로 없이 교수님 수업 외에는 블로그 밖에 의지할 게 없었습니다. 처음 mfc를 할 때 막막함을 느끼는 분들에게 조금이나마 도움이 되었으면 좋겠습니다. 

 

 

0. 어디에 코드를 적어야 할까? 

mfc의 Solution Explorer

 

처음 C++을 배울 때는 소스파일(source file)에 직접 파일을 추가해 문법을 배웠을 것입니다. 하지만 mfc는 헤더파일(header file)과 소스파일 (source file)을 넘나게 됩니다. 또한 직접 추가하는 방식이 아닌 내가 알맞은 위치를 찾아서 코드를 적어야 합니다. 

 

오늘 필요한 파일은 2가지 입니다. 

(1) 솔루션 탐색기 (Solution Explorer) -> 소스파일(source file) -> 프로젝트이름 View.cpp

(2) 솔루션 탐색기 (Solution Explorer) ->  헤더파일(header file) -> 프로젝트이름 View.h

 

 

mfc에서 가장 많이 쓰는 단축키 ctrl + shift + s는 외워두고 시작합시다. 

 

 

 


1. 원 그리기

OnDreaw(CDC*/*pDC*/)

프로젝트이름 View.cpp에서 onDraw함수를 찾아갑니다. 저는 생성했을 때 54번째 줄에 위치했습니다. 

저희는 주석으로 TODO: add draw code for native data here 된 문장 뒤에 코드는 적을 것입니다. (언어 설정에 따라 문구가 한글일 수 있습니다.) 원을 그리는 걸 배운 단계를 설명하겠습니다. 

 

 

1-1 원 그리기 pDC->

(1) 매개변수에 주석으로 처리된 pDC에 주석을 풀어 줍니다. 

OnDraw(CDC* pDC)

 

(2) TODO: add draw code for native data here 문장 뒤에

pDC-> Ellipse(x좌표, y좌표, x좌표, y좌표); 형식으로 적어줍니다.

pDC-> Ellipse(100, 100, 300, 300);

⚠️여기서 좌표는 원의 중심이 아닙니다. 주어진 2쌍의 좌표 사이에 원이 그려집니다. 

 

 

좌표는 일반적인 2차원 평면과는 조금 다르게 왼쪽 위 모서리가 (0,0)이고 오른쪽으로 갈수록 x좌표가 증가하고 밑으로 갈 수록 y좌표가 증가합니다. 

(0,0) ... ... (100,0)
...      
...      
(0,100)     (100,100)

 

 


 

♣ 예제

//TODO: add draw code for native data here 

pDC->Ellipse(100, 100, 300, 300);
pDC->Ellipse(300, 100, 500, 300);
pDC->Ellipse(500, 100, 700, 300);

 

 

 

 

♣ 위와 같은 코드를 반복문으로 구현

//TODO: add draw code for native data here 

for (int x = 0; x < 3; x++)
	pDC->Ellipse(x * 200 + 100, 100, (x + 1) * 200 + 100, 300);

 

 

 

 


1-2 원 그리기 CClientDC dc(this)

(1) ⚠️매개변수에 주석으로 처리된 pDC에 주석을 풀지 않습니다. 대신 CClientDC dc(this)을 적어주면 pDC-> 대신 dc. 을 사용합니다.

 

(2) TODO: add draw code for native data here 문장 뒤에

dc.Ellipse(x좌표, y좌표, x좌표, y좌표); 형식으로 적어줍니다.

//TODO: add draw code for native data here 

CClinetDC dc(this);

dc.Ellipse(100, 100, 300, 300);
dc.Ellipse(300, 100, 500, 300);
dc.Ellipse(500, 100, 700, 300);

 

 

♣ 위와 같은 코드를 반복문으로 구현

//TODO: add draw code for native data here 
CClientDC dc(this);

for (int x = 0; x < 3; x++)
	dc.Ellipse(x * 200 + 100, 100, (x + 1) * 200 + 100, 300);

 

 

 

 

 

728x90