쑤쑤_CS 기록장

[TIPS 20기]13-15. MFC 강좌 정리 본문

IT 지식 기록/TIPS - C 언어 수업 정리

[TIPS 20기]13-15. MFC 강좌 정리

(╹◡╹)_ 2019. 5. 30. 05:42
728x90

[ 13강 ]

MFC
* 시스템 클래스
공부할 때 많이 씀
초보자를 위한 인터페이스
그러나 실제 업무를 할 때는 속도, 메모리 관리로 인해 사용하지 않음
COB
//

* CWinApp : 모든 MFC structure가 시작, 진행되는 클래스 {= 영혼}

C(: MFC) Win(: windows) App(: application)  : windows 응용 프로그램에 대한 기능들
WinMain(클래스 등록, 윈도우 만드는, 메세지 도는) 작업이 들어가있음
CWinApp에서 내 클래스를 상속받는다

InitApplication : 윈도우 클래스 동록 내용의 함수 
InitInstance :  create, update, show window 윈도우 만드는 내용의 함수
사용자가 상속받아 오버라이딩 하도록 코드가 실제로는 비워있다. 가이드만 한다.
반.드.시 내가 오버라이딩 하고, main window를 만드는 작업을 해야된다.
마법사 2개 class wizard 가 자동으로 다 해준다.
Run :  메세지 도는 함수

시작 순서 InitApplication -> InitInstance -> Run
끝 순서 -> ExitInstance -> ExitApplication
(다섯 가지 대표 함수)


CWinThread <- CWinApp <- WinMain 


CWnd : CWindow. 윈도우를 다루는 클래스. 눈으로 보이는 대표적인. 실제 작업하는. {= 육체}
//
//{{ //}} wizard 가 쓰는 주석(특수기호와 함께 함)
함부로 지우면 안된다
wmcreate : window

MFC : CWinApp + CWnd 두 클래스로 모두 만들 수 있다. {= 영혼 + 육체}

MENU : 많은 기능을 
Tool Bar
Status Bar



CView
CDocument

SID : MFC 사용한 표준적인 개발 방법




* CDialog 클래스
사용자에게 대화하듯이 서로 interative 하게 창이 뜬다
~할까요? ~ : 창 dialog
사용자가 하고 단일 기능을 쉽게 쓸 수 있도록 만들어놓은 창

변태. 자기가 Run을 따로 갖고있음

SDI 빼기

리소스를 저장할 때는 반드시 리소스가 보이는 상태에서 저장해야된다.
save all로 저장하면 종종 리소스가 중국어로 바뀌는 오류가 난다

 

https://blog.naver.com/tipsware/221466113511

 

[20기 TIPS 강좌] 열 세번째 지식나눔 강좌

안녕하세요. 20기 TIPS 프로그래밍 강좌 수강생 여러분!​다음 강좌 시작 전까지 오늘 공부한 내용을 ...

blog.naver.com



 

[ 14강 ]

 

1. 사각형 다섯개 만들기

2. 마우스 클릭 시 사각형 색깔 채움 바꾸기

if(i*50 < x && x < (i+1)*50 ) //y는 0~50 으로 고정됨

사각형 영역을 다루는 클래스 CRect
PtInRect //사각형 안 인지 확인해주는 함수
효율은 떨어지지만 외적으로 간단
어떤 점을 가지고 그 점이 어떤 영역에 들어있는지 확인 가능

index = (x/50)
index는 0, 1, ,,, 4 몇번째 사각형의 좌표인지 알게 됨


ctrl+ko : 헤더파일

   int index = point.x / 50;
   if (point.y < 50 && index < 5) {
  if(m_select_index != -1) 
 dc.Rectangle(m_select_index * 50, 0, 51 + m_select_index * 50, 50);
  dc.FillSolidRect(index * 50 + 1, 1, 49, 48, RGB(0, 0, 255)); 
  m_select_index = index;
}

//이전 클릭된 것 -> 다시 그림
이전에 클릭한게 있으면 -1이 아님


10. 헤더파일에 mstep 0 으로 초기화


현재 문제 : window 밖으로 나가면 판 엎기 가능, 현재 같은 위치에 겹쳐서 올릴 수 있음
돌 그리기가 없고 판 그리기만 있기 때문

19 19 이차원 배열로 기록 하면 된다() 0: 돌이 없는 상태 1: 흑돌 2: 백돌

if (x < 19 && y<19 && m_dol[y][x] == 0) { //돌 들어와있지 않음
CClientDC dc(this);
dc.SelectStockObject(DC_BRUSH);
dc.SetDCBrushColor(0x00FFFFFF * m_step);
dc.Ellipse(x*30, y*30, 30+x*30, 30+y*30);
m_dol[y][x] = m_step + 1; //흑돌이면 1, 백돌이면 2 (mstep + 1인 값) 저장
m_step = !m_step; //0이면 흑돌, 1이면 백돌
}
// 중복을 막음


//배열에 저장해 놓은 값을 다시 그려줌
dc.SelectStockObject(DC_BRUSH);
for (int y = 0; y < 18; y++) {
for (int x = 0; x < 18; x++) {
if (m_dol[y][x]) {
dc.SetDCBrushColor(0x00FFFFFF * (m_dol[y][x] - 1)); //흑돌 백돌 저장 값(2, 1)으로 색깔 다시 지정(1, 0)
dc.Ellipse(x * 30, y * 30, 31 + x * 30, 31 + y * 30);
}
}
}

Direct 2D(라이브러리) + 그라데이션 옵션 -> 오목 그래픽 변화 과정
포토샵 (그림으로 싹 한것) : 제일 깔끔하다 

----------------------
C 이미지 클래스의 버그

그림 출력, 크기에 맞추기

13 색깔이 깨지게 줄여짐


m image에 그림이 로드 되어있는지 확인


https://blog.naver.com/tipsware/221469455041

 

[20기 TIPS 강좌] 열 네번째 지식나눔 강좌

안녕하세요. 20기 TIPS 프로그래밍 강좌 수강생 여러분!​다음 강좌 시작 전까지 오늘 공부한 내용을 ...

blog.naver.com



15강 ]

이미지 폴더 넣기

헤더 파일에 private 변수 선언

카드 가로로 출력 해보기
666666 출력해보기

헤더 파일에 일차원배열 선언
배열에 카드 넣기

srand() rand()
난수 발생
지금은 시간을 기준으로 난수 발생시킴 time()
<난수 발생 함수> https://blog.naver.com/tipsware/220844986850?viewType=pc
srand((unsigned int)time(NULL));//난수의 시드 값으로 time 사용

a, b 카드의 위치 랜덤으로 바꿈

set timer : ms 단위로. (timer ID, 몇초 뒤 호출될 지, 몇초 간격 NULL : 3초마다 WM_TIMER 메세지 발생시킴)

프로젝트 - 클래스 마법사
WM_TIMER 추가
OnTimer 란 : 타이머 이름
타이머는 ID쓰는 습관을 가지는게 좋다!
1번 타이머 인지 비교 - 조건문
너무 짧은 타이머는 안쓰는게 좋다(어차피 쓰이지 못함)
3초마다 메세지를 발생시키는데, 타이머 안 if 문에서 3초 이상의 코드를 실행하면 코드가 엉망된다

KillTimer

카드 클릭시 위치 뒤집음

아직 첫번째 카드가 선택되지 않았다는 의미의 -1
같으면 아무 처리도 안되게 return문 걸기

카드가 같은 경우 0으로 처리한다

Draw 그리는 순서를 먼저해서 return문 어디에 하지 하는 고민 해결

continue : 밑을 수행하지 않고 다음걸 수행

 

https://blog.naver.com/tipsware/221472244838

 

[20기 TIPS 강좌] 열 다섯번째 지식나눔 강좌

안녕하세요. 20기 TIPS 프로그래밍 강좌 수강생 여러분!​다음 강좌 시작 전까지 오늘 공부한 내용을 ...

blog.naver.com

 

728x90
Comments