Mfc 제02강 객체지향 hello world

Page 1


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


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.