MFC의 개요
-윈도우 애플리케션을 생성하기 위해 만들어진 C++ 클래스 라이브러리
-클래스는 모두 대문자 C로 시작
-여러 단어가 하나의 클래스 이름일 경우 각 단어별로 첫 글자를 대문자로 표기 -> CWndApp
-멤버 변수는 m_로 시작, 멤버 함수는 대문자로 시작
-전역 함수는 Afx라는 접두어 붙음.
-MFC의 이점 5가지
MFC 프로그램 구조(SDI, MDI)
-SDI: 단일 문서 기반, 4개의 클래스 존재
-> CWinAPP(애플리케이션 전체), CFrameWnd(애플리케이션에서 메뉴, 상태표시줄, 도구바 등 외부 프레임), CView(애플리케이션의 클라이언트 또는 작업 영역), CDocment(애플리케이션 내부 데이터 읽고, 저장)
-MDI: 다중 문서 기반, 5개의 클래스 존재
-> WinAPP(애플리케이션 전체), CMDIFrameWnd(애플리케이션에서 메뉴, 상태표시줄, 도구바 등 외부 프레임), CMDIChildWnd(애플리케이션에서 자식 윈도우의 외부 프레임),
CView(애플리케이션에서 자식 윈도우의 클라이언트 또는 작업 영역), CDocment(애플리케이션 내부 데이터 읽고, 저장)
이렇게 세 개가 하나의 템플릿으로 구성, 이러한 템플릿이 하나 이상으로 구성되어있음.
-MFC: Application Class
-> 템플릿을 포함하고 한 개의 인스턴스를 포함하는 Application Class가 있음
MFC클래스의 기본 구조
-상속 구조가 매우 논리적, 구조적으로 짜여있다.
-CObject 클래스: MFC의 최상위 기저 클래스, 메모리에 클래스 설정하는 기능 가짐 + 직렬화의 지원, 런타임 클래스 정조, 객체의 검사 출력, 컬렉션 클래스에 대한 호환성 제공
-CCmdTarget 클래스: 메시지 전송 담당 클래스, WM_COMMAND(메뉴바)와 OLE 메시지만 담당
-CWnd 클래스: 화면에 보이는 윈도우들은 모두 CWnd에서 상속 받음. 윈도우의 최상위 클래스(CView, CDialog, CFrameWnd)
-CWinThread 클래스: 윈도우가 스레드로 돌아갈 수 있도록 구동되는 클래스(윈도우 앱이 스레드 단위로 돌아갈 수 있게~)
-> 한 개의 프로그램을 독립적으로 움직이려면 한 개 프로그램은 하나 이상의 CWinThread 포함해야 합니다.!!!
-CWinApp 클래스: 하나의 프로그램을 포함하고 관장하는 클래스
-CDocument 클래스: 애플리케이션에서 사용되는 데이터를 저장하고 제어하는 클래스. 데이터를 디스크에서 읽어오거나 디스크에 저장하는 부분
1. 실습 2-2 간단한 MFC 프로젝트
-윈도우창 사이즈 변경할 때마다 그때의 사이즈 값 얻기 위해서 WM_SIZE
-OnDraw()는이미 코드에 포함되어있고, 실제 화면 출력되는 부분, WM_PAINT 메시지에 의해서 호출
-Invalidate() 함수는 WM_PAINT 메시지 호출 + WM_PAINT 메시지는 OnDraw() 함수 호출
-Invalidate(TRUE)는 윈도우의 뒷배경 전부 지우고 BeginPaint() 함수 이용해서 다시 그림,
Invalidate(FALSE)는 뒷배경 그대로 남겨두고 바뀐 부분만 그림. 디폴트 인수는 TRUE
-> 화면 갱신 역할하므로 모든 메시지에 넣어줄 것!!
-OnDraw() 함수: 실제 화면을 복원하는 루틴을 이 함수 안에 삽입! 메시지 핸들러 함수가 아닌 가상함수
-> WM_PAINT() 함수가 날아올 때마다 OnPaint() 함수와 OnDraw() 함수가 둘 다 호출되어서 화면을 복원
-화면에 문자열 출력할 때 !!
-CDC::TextOut() 함수: 문자열을 지정된 위치에 출력
TextOut(int x, int y, str)
-CDC::DrawText() 함수: 영역 정하고 이 영역에 출력 형식에 맞게 문자열 출력
DrawText(str,rect(출력할 영역 좌표), 출력형식 플러그)
-> 출력형식 플러그에 여러 종류가 있다. (윈도우32와 똑같음)
pDC -> TextOut(x좌표, y좌표, 문자열) 이나 pDC -> DrawText(문자열, rect(영역), 영역 내에 어떻게 표현할지(가운데, 한줄 ...))
-CString 클래스는 문자열을 처리하는 클래스이고, 멤버 함수 중에서 Format은 문자열에 형식을 갖춰서 문자를 넣습니다.문자열.Format(“ ”); 문자열에 문자 저장하기
CString str;
str.Format(_T("마우스 위치 X: %d, Y: %d", 200, 200)
-CRect 클래스는 Windows Rect 구조와 유사하며 사각형의 좌측상단과 우측하단의 좌표를 저장하기 위한 클래스입니다.
-> GetClientRect() 함수 는 윈도우의 클라이언트 영역의 크기를 얻는 함수입니다.
CRect rect;
GetClientRect(&rect); //구조체의 영역 크기 가져오기
pDC->DrawText(m_strOutput, rect, ~);
연습 문제
실습 2-2 간단한 MFC 프로젝트 수정
'윈도우프로그래밍' 카테고리의 다른 글
[윈도우 프로그래밍 7장] 그래픽 객체의 사용 (0) | 2023.06.05 |
---|---|
[윈도우 프로그래밍 5장] 도큐먼트, 파일 입출력 (0) | 2023.06.05 |
[윈도우 프로그래밍] 대화상자 (0) | 2023.04.16 |
[윈도우 프로그래밍] 윈도우 프로그래밍의 이해 (0) | 2023.04.16 |
[윈도우 프로그래밍] 메시지 처리 (0) | 2023.04.16 |