Microsoft Foundation Class
객체지향 프로그래밍 1.2 객체지향 Hello World!
호서대학교 컴퓨터공학
목차 Part 1. 윈도우 프로그래밍의 기본 이해 1.1 기초적인 이야기 1.1.1 Hello World! 1.1.2 윈도우 프로그래밍 모델 1.1.3 메시지 큐의 존재 1.1.4 윈도우 프로그램의 구성
1.2 MFC 의 정의 및 특징
호서대학교 컴퓨터공학
3
1.2 객체지향 Hello World – 1. 선행학습 선행학습
– 1.1 장에서는 윈도우 프로그램의 동작 원리를 학 습 – 윈도우 API 는 윈도우 운영체제가 지원하는 틀 속에서 모두 이루어짐 – 1.2 장에서는 Win32 API 코드를 클래스화 시키 는 연습 호서대학교 컴퓨터공학
4
1.2 객체지향 Hello World 무엇을 어떻게 객체화할 것인가 ? – 윈도우 응용 프로그램을 초기화하고 프로세스가 시작되는 과정 – 자신의 메시지 큐를 검사하고 이를 큐에서 꺼내는 일을 담당하는 부분 – 발생하는 메시지를 처리하는 부분 호서대학교 컴퓨터공학
5
1.2 객체지향 Hello World 이러한 작업을 할 것이다 ! 프로그램 객체 CMyApp InitInstance(…) RegisterClass() Run()
함수를 클래스화 함
HINSTANCE m_hInstance; MSG m_Msg; HACCEL m_hAccelTable; CMYWnd m_Wnd 윈도우 객체 CMyWnd MyCreateWindow(…) ShowWindow() UpdateWindow() MyWndProc() HWND m_hWnd
호서대학교 컴퓨터공학
6
1.2 객체지향 Hello World – 2. MFC 로 수정하기 새로운 API 프로젝트 생성
1. Hello 의 이름으로 Win32 App.. 프로젝트를 생성 . 2. 반드시 세번째 “ A Typical “Hello World”.. 선택 . 호서대학교 컴퓨터공학
7
1.2 객체지향 Hello World – 2. MFC 로 수정하기 새로운 클래스 등록
1. 클래스 뷰 화면에서 우클릭 후 New Class 선택 2. Class Name 에 CMyApp 입력 호서대학교 컴퓨터공학
8
1.2 객체지향 Hello World – 2. MFC 로 수정하기 자동으로 생성되는 함수 설명 – 프로젝트 내에 CMyApp Class 를 생성 – 윈도우를 등록 및 초기화하는 역할을 함 – 생성자 (CMyApp::CMyApp) – 클래스 이름과 함수 이름이 같음 – 생성과 동시에 객체 초기화 – 소멸자 (CMyApp::~CMyApp) – 객체가 소멸될 때 자동으로 메모리 해제 호서대학교 컴퓨터공학
9
1.2 객체지향 Hello World – 2. MFC 로 수정하기 새로운 멤버 데이터 등록
1. CMyApp 우클릭 후 Add Member Variable 선택 2. HINSTANCE 와 m_hInstance 입력 호서대학교 컴퓨터공학
10
1.2 객체지향 Hello World – 2. MFC 로 수정하기 추가할 멤버 데이터 설명 – CMyApp 클래스 내부에 멤버 데이터 ( 변수 , 배열 , 구조체 , 핸 들 등 ) 생성 – MSG m_MSG – 메시지를 담을 수 있는 구조체 –
typedef struct tagMSG {
–
HWND
hwnd;
// 윈도우 핸들
–
UINT
message;
// 메시지
–
WPARAM
wParam;
// 메시지 보충 정보
–
LPARAM
lParam;
// 메시지의 보충 정보
–
DWORD
time;
// 메시지가 보내졌을 때의 시각
–
POINT
pt;
// 메시지가 보내졌을 때의 마우스 커서 위치
–
} MSG
호서대학교 컴퓨터공학
11
1.2 객체지향 Hello World – 2. MFC 로 수정하기 추가할 멤버 데이터 설명 – HACCEL m_hAccelTable – 엑셀레이터 지원 핸들 – 단축키와 비슷한 개념으로 Alt 키를 사용하지 않 고 메뉴와 상관없이 언제든지 사용할 수 있음 – TCHAR m_szWindowClass – 해당 프로그램의 타이틀 제목 – char TCHAR 형의 문자형 변수 호서대학교 컴퓨터공학
12
1.2 객체지향 Hello World – 2. MFC 로 수정하기 새로운 멤버 함수 등록
1. CMyApp 우클릭 후 Add Member Function 선택 2. BOOL 과 InitInstance(int mCmdShow) 입력 호서대학교 컴퓨터공학
13
1.2 객체지향 Hello World – 2. MFC 로 수정하기 추가할 멤버 함수 설명 – CMyApp 클래스 내부에 멤버 함수 생성 – RegisterClass() – WNDCLASS 구조체의 번지를 전달하여 윈도우 클래 스를 등록 – 해당 윈도우의 각종 정보를 초기화 및 변경가능 – LoadString() – 스트링 테이블에서 문자열을 로드하는 함수 호서대학교 컴퓨터공학
14
1.2 객체지향 Hello World – 2. MFC 로 수정하기 추가할 멤버 함수 설명 – SetInstance() – 멤버 인스턴스 핸들에 인스턴스 핸들을 치환 – Run() – 메시지 루프를 돌며 메시지 큐로 부터 메시지를 얻어와 처리 –
While(GetMessage(&msg); // 메시지 큐에서 메시지를 가져옴
–
{
–
TranslateMessage(&msg); // 키보드 메시지를 번역
–
DispatchMessage(&msg); // 메시지를 해당 윈도우 프로시저로 보냄
–
}
호서대학교 컴퓨터공학
15
1.2 객체지향 Hello World – 2. MFC 로 수정하기 새로운 클래스 등록
1. 클래스 뷰 화면에서 우클릭 후 New Class 선택 2. Class Name 에 CMyWnd 입력 호서대학교 컴퓨터공학
16
1.2 객체지향 Hello World – 2. MFC 로 수정하기 자동으로 생성되는 함수 설명 – 프로젝트 내에 CMyWnd Class 를 생성 – 윈도우를 생성 및 화면에 출력하는 역할 – 생성자 (CMyWnd::CMyWnd) – 클래스 이름과 함수 이름이 같음 – 생성과 동시에 객체 초기화 – 소멸자 (CMyWnd::~CMyWnd) – 객체가 소멸될 때 자동으로 메모리 해제 호서대학교 컴퓨터공학
17
1.2 객체지향 Hello World – 2. MFC 로 수정하기 새로운 멤버 데이터 등록
1. CMyWnd 우클릭 후 Add Member Variable 선택 2. HWND 와 m_hWnd 입력 호서대학교 컴퓨터공학
18
1.2 객체지향 Hello World – 2. MFC 로 수정하기 추가할 멤버 데이터 설명 – CMyWnd 클래스 내부에 멤버 데이터 ( 변수 , 배 열 , 구조체 , 핸들 등 ) 생성 – HWND m_hWnd – 윈도우를 가르키는 핸들
호서대학교 컴퓨터공학
19
1.2 객체지향 Hello World – 2. MFC 로 수정하기 새로운 멤버 함수 등록
1. CMyWnd 우클릭 후 Add Member Function 선택 2. Void 와 UpdateWindow 입력 호서대학교 컴퓨터공학
20
1.2 객체지향 Hello World – 2. MFC 로 수정하기 추가할 멤버 함수 설명 – CMyWnd 클래스 내부에 멤버 함수 생성 – UpdateWindow() – 업데이트 영역이 있는 경우 메시지 큐를 통하지 않고 , 바 로 윈도우를 그리는 함수 – WM_PAINT 메시지를 강제로 발생 – ShowWindow() – CreateWindow 함수로 만든 윈도우 그림 – 만들어진 윈도우를 화면에 보여주는 함수 호서대학교 컴퓨터공학
21
1.2 객체지향 Hello World – 2. MFC 로 수정하기 추가할 멤버 함수 설명 – MyWndProc() – 메시지 처리 함수 – 메시지에 따라 분류되어 해당 처리함수를 호출 – MyCreateWindow() – 메모리에 윈도우를 만드는 함수 – BOOL 형의 Return 값을 가짐 호서대학교 컴퓨터공학
22
1.2 객체지향 Hello World – 2. MFC 로 수정하기 추가할 멤버 함수 설명 – OnCommand() – WM_COMMAND 메시지에 의해 호출 – 메뉴 항목을 선택하면 메시지 발생 – OnPaint() – WM_PAINT 메시지에 의해 호출 – 메모리에 위치한 윈도우를 화면에 그림 – OnDestroy() – WM_DESTROY 메시지에 의해 호출 – 해당 윈도우 프로그램을 종료하는 함수 호서대학교 컴퓨터공학
23
1.2 객체지향 Hello World – 2. MFC 로 수정하기 추가할 멤버 함수 설명 – UpdateWindow() 나 ShowWindow() 함수처럼 API 함수를 내부적으로 사용 – OnCommand() – OnPaint() – OnDestory() – 그외 다수 .. – Win32 API 나 MFC 나 결국 내부적으로 구조가 같 음 호서대학교 컴퓨터공학
24
1.2 객체지향 Hello World – 2. MFC 로 수정하기 WinMain() 함수의 변형 1. Hello.cpp 파일에 MyApp.h 를 include 2. #include “MyApp.h” 3. CMyApp 객체를 선언 4. CMyApp theApp 5. 모든 클래스 에서 theApp 객체를 사용 6. 따라서 모든 .cpp 파일에서 theApp 선언 7. Extern CMyApp theApp 호서대학교 컴퓨터공학
25
Q&A
Q&A 호서대학교 컴퓨터공학
26