Presentation is loading. Please wait.

Presentation is loading. Please wait.

윈도우 운영체제와 윈도우 응용 프로그램의 특징을 이해한다.

Similar presentations


Presentation on theme: "윈도우 운영체제와 윈도우 응용 프로그램의 특징을 이해한다."— Presentation transcript:

1 윈도우 운영체제와 윈도우 응용 프로그램의 특징을 이해한다.
SDK 응용 프로그램 작성 과정, 기본 구조, 동작 원리를 이해한다. MFC 응용 프로그램 작성 과정, 기본 구조, 동작 원리를 이해한다. 비주얼 C++ 개발 환경 사용법을 익힌다.

2 윈도우 운영체제 특징 (1/3) 그래픽 사용자 인터페이스

3 윈도우 운영체제 특징 (2/3) 메시지 구동 구조 이벤트 발생 대기 ... 시스템 메시지 대기열 메시지 대기열 #3
응용 프로그램 메시지 대기열 #1 메시지 대기열 #2 메시지 대기열 #3 ... 처리 대기

4 윈도우 운영체제 특징 (3/3) 멀티태스킹 멀티스레딩 여러 개의 응용 프로그램을 수행
하나의 응용 프로그램에 여러 개의 실행 흐름을 생성

5 윈도우 응용 프로그램 특징 (1/4) API 호출문 집합
API(Application Programming Interface): 윈도우 운영체제가 응용 프로그램을 위해 제공하는 각종 함수 집합 call API#1 응용 프로그램 call API#2 ... call API#3 call API#4 call API#n

6 윈도우 응용 프로그램 특징 (2/4) 메시지 핸들러 집합
메시지 핸들러(Message Handler): 메시지를 받았을 때 동작을 결정하는 코드 메시지 핸들러 #1 응용 프로그램 메시지 핸들러 #2 메시지 핸들러 #3 메시지 핸들러 #4 메시지 핸들러 #5 메시지 핸들러 #6 ... 윈도우 프로시저: 메시지 핸들러 집합

7 윈도우 응용 프로그램 특징 (3/4) 실행 파일과 DLL 집합
DLL(Dynamic-Link Library): 프로그램이 실행 중에 호출할 수 있는 함수(코드)와 리소스 실행 파일 응용 프로그램 DLL #1 DLL #2 DLL #3 DLL #4 DLL #5 ...

8 윈도우 응용 프로그램 특징 (4/4) 장치 독립적 응용 프로그램 API 장치 드라이버 주변 장치

9 윈도우 응용 프로그램 개발 도구 (1/3) SDK(Software Development Kit) 장점 단점
C 언어로 윈도우 API를 직접 호출해서 프로그램을 구현 장점 API를 직접 다루기 때문에 세부적인 제어가 가능하고, 윈도우 운영체제가 제공하는 모든 기능을 사용할 수 있다. 생성 코드의 크기가 작고 속도가 빠르다. 단점 생산성이 낮다.

10 윈도우 응용 프로그램 개발 도구 (2/3) RAD(Rapid Application Development) 장점 단점
시각적으로 화면을 디자인하고 코드를 추가하는 방법으로 프로그램을 빠르게 개발 장점 생산성이 높다. 단점 일반적으로 생성 코드의 크기가 크고 실행 속도가 느리다. 운영체제가 제공하는 모든 기능을 활용한 세부적인 제어가 어렵다.

11 윈도우 응용 프로그램 개발 도구 (3/3) 클래스 라이브러리(Class Library) 장점 단점
윈도우 응용 프로그램 개발에 필수적인 기능을 객체 지향 언어를 이용하여 클래스로 제공 장점 SDK보다 생산성이 높다. RAD보다 생성 코드의 크기가 작고 실행 속도가 빠르다. 단점 초기 학습에 필요한 기간이 길다. 객체 지향 언어 클래스 라이브러리 구조와 기능, 각 클래스의 관계 파악

12 HelloSDK 예제 작성 (1/9) 프로젝트 생성

13 HelloSDK 예제 작성 (2/9) 1단계 옵션 설정

14 HelloSDK 예제 작성 (3/9) 소스 파일 추가

15 HelloSDK 예제 작성 (4/9) 코드 입력 #include <windows.h>
// WinMain( ) 함수에서 참조하므로 함수 원형을 선언한다. LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { HWND hwnd; MSG msg; WNDCLASS wndclass // 윈도우 클래스를 초기화하고 운영체제에 등록한다. wndclass.style = CS_HREDRAW | CS_VREDRAW; wndclass.lpfnWndProc = WndProc; wndclass.cbClsExtra = 0; wndclass.cbWndExtra = 0; wndclass.hInstance = hInstance;

16 HelloSDK 예제 작성 (5/9) wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wndclass.hCursor = LoadCursor(NULL, IDC_ARROW); wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); wndclass.lpszMenuName = NULL; wndclass.lpszClassName = "HelloClass"; if(!RegisterClass(&wndclass)) return -1; // 윈도우를 생성하고 화면에 보이게 한다. hwnd = CreateWindow("HelloClass", "HelloSDK Application", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL); ShowWindow(hwnd, nCmdShow); UpdateWindow(hwnd);

17 HelloSDK 예제 작성 (6/9) // 메시지 대기열에서 메시지를 하나씩 꺼내 처리한다.
while(GetMessage(&msg, NULL, 0, 0) > 0){ TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { HDC hdc; PAINTSTRUCT ps; char *str = "Hello, SDK";

18 HelloSDK 예제 작성 (7/9) // 메시지 종류에 따라 응용 프로그램이 적절히 처리한다.
switch(message) { case WM_CREATE: return 0; case WM_PAINT: hdc = BeginPaint(hwnd, &ps); TextOut(hdc, 100, 100, str, lstrlen(str)); EndPaint(hwnd, &ps); case WM_LBUTTONDOWN: MessageBox(hwnd, "마우스를 클릭했습니다.", "마우스 메시지", MB_OK);

19 HelloSDK 예제 작성 (8/9) case WM_DESTROY: PostQuitMessage(0); return 0; }
// 응용 프로그램이 처리하지 않으면 윈도우 운영체제가 처리한다. return DefWindowProc(hwnd, message, wParam, lParam);

20 HelloSDK 예제 작성 (9/9) 실행 화면

21 HelloSDK 예제 분석 (1/7) 헤더 파일 메인 함수 #include <windows.h>
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { ...

22 HelloSDK 예제 분석 (2/7) 윈도우 클래스 초기화와 등록
wndclass.style = CS_HREDRAW | CS_VREDRAW; wndclass.lpfnWndProc = WndProc; wndclass.cbClsExtra = 0; wndclass.cbWndExtra = 0; wndclass.hInstance = hInstance; wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION); wndclass.hCursor = LoadCursor(NULL, IDC_ARROW); wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); wndclass.lpszMenuName = NULL; wndclass.lpszClassName = "HelloClass"; if(!RegisterClass(&wndclass)) return -1;

23 HelloSDK 예제 분석 (3/7) 윈도우 생성
hwnd = CreateWindow("HelloClass", "HelloSDK Application", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL); ShowWindow(hwnd, nCmdShow); UpdateWindow(hwnd);

24 HelloSDK 예제 분석 (4/7) 메시지 루프
while(GetMessage(&msg, NULL, 0, 0) > 0){ TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam;

25 HelloSDK 예제 분석 (5/7) 윈도우 프로시저
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { HDC hdc; PAINTSTRUCT ps; char *str = "Hello, SDK"; // 메시지 종류에 따라 응용 프로그램이 적절히 처리한다. switch(message) { case WM_CREATE: return 0; case WM_PAINT: hdc = BeginPaint(hwnd, &ps);

26 HelloSDK 예제 분석 (6/7) TextOut(hdc, 100, 100, str, lstrlen(str));
EndPaint(hwnd, &ps); return 0; case WM_LBUTTONDOWN: MessageBox(hwnd, "마우스를 클릭했습니다.", "마우스 메시지", MB_OK); case WM_DESTROY: PostQuitMessage(0); } // 응용 프로그램이 처리하지 않으면 윈도우 운영체제가 처리한다. return DefWindowProc(hwnd, message, wParam, lParam);

27 HelloSDK 예제 분석 (7/7) 요약 이벤트 발생 응용 프로그램 #1 시스템 윈도우 프로시저 메시지 대기열
메시지 대기열 #1 메시지 대기열 #2 메시지 대기열 #3 ... 응용 프로그램 #1 메시지 루프 메시지 핸들러 #1 메시지 핸들러 #2 메시지 핸들러 #3 DefWindowProc 윈도우 프로시저

28 HelloMFC 예제 작성 (1/9) 프로젝트 생성

29 HelloMFC 예제 작성 (2/9) 1단계 옵션 설정

30 HelloMFC 예제 작성 (3/9) 소스 파일 추가

31 HelloMFC 예제 작성 (4/9) 코드 입력 #include <afxwin.h> // 클래스 선언부
class CHelloApp : public CWinApp { public: virtual BOOL InitInstance(); }; class CMainFrame : public CFrameWnd CMainFrame();

32 HelloMFC 예제 작성 (5/9) protected: afx_msg void OnPaint();
afx_msg void OnLButtonDown(UINT nFlags, CPoint point); DECLARE_MESSAGE_MAP() }; // 응용 프로그램 객체 CHelloApp theApp; // 클래스 정의부 BOOL CHelloApp::InitInstance() { m_pMainWnd = new CMainFrame; m_pMainWnd->ShowWindow(m_nCmdShow);

33 HelloMFC 예제 작성 (6/9) m_pMainWnd->UpdateWindow(); return TRUE; }
CMainFrame::CMainFrame() { Create(NULL, "HelloMFC Application"); void CMainFrame::OnPaint() char *msg = "Hello, MFC"; CPaintDC dc(this);

34 HelloMFC 예제 작성 (7/9) dc.TextOut(100, 100, msg, lstrlen(msg)); }
void CMainFrame::OnLButtonDown(UINT nFlags, CPoint point) { MessageBox("마우스를 클릭했습니다.", "마우스 메시지"); // 메시지맵 BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd) ON_WM_PAINT() ON_WM_LBUTTONDOWN() END_MESSAGE_MAP()

35 HelloMFC 예제 작성 (8/9) 프로젝트 설정 변경

36 HelloMFC 예제 작성 (9/9) 실행 화면

37 HelloMFC 예제 분석 (1/7) 헤더 파일 클래스 선언부 #include <afxwin.h>
class CHelloApp : public CWinApp { public: virtual BOOL InitInstance(); };

38 HelloMFC 예제 분석 (2/7) 클래스 선언부 (cont’d)
class CMainFrame : public CFrameWnd { public: CMainFrame(); protected: afx_msg void OnPaint(); afx_msg void OnLButtonDown(UINT nFlags, CPoint point); DECLARE_MESSAGE_MAP() };

39 HelloMFC 예제 분석 (3/7) 응용 프로그램 객체 MFC 응용 프로그램의 구조 CHelloApp theApp;
하나의 응용 프로그램 객체 여러 종류의 클래스 선언 및 정의

40 HelloMFC 예제 분석 (4/7) 클래스 정의부 BOOL CHelloApp::InitInstance() {
m_pMainWnd = new CMainFrame; m_pMainWnd->ShowWindow(m_nCmdShow); m_pMainWnd->UpdateWindow(); return TRUE; } CMainFrame::CMainFrame() { Create(NULL, "HelloMFC Application"); }

41 HelloMFC 예제 분석 (5/7) 클래스 정의부 (cont’d) void CMainFrame::OnPaint() {
char *msg = "Hello, MFC"; CPaintDC dc(this); dc.TextOut(100, 100, msg, lstrlen(msg)); } void CMainFrame::OnLButtonDown(UINT nFlags, CPoint point) MessageBox("마우스를 클릭했습니다.", "마우스 메시지");

42 HelloMFC 예제 분석 (6/7) 메시지맵 BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
ON_WM_PAINT() ON_WM_LBUTTONDOWN() END_MESSAGE_MAP()

43 HelloMFC 예제 분석 (7/7) 요약 WinMain( ) // MFC의 내부에 숨겨진 프로그램 실행의 시작점 {
// ptr은 포인터로서 응용 프로그램 객체의 주소값을 가지고 있다. ... ptr->InitInstance( ); // 초기화: 프레임 윈도우 객체를 생성한다. // 프레임 윈도우 객체의 생성자에서 // 실제 윈도우가 만들어진다. ptr->Run( ); // 메시지 루프: 프레임 윈도우에게 메시지를 보낸다. // 프레임 윈도우가 받은 메시지의 종류에 따라 // 해당 메시지 핸들러가 적절히 호출된다. ptr->ExitInstance( ); // 종료: 각종 청소 작업을 수행한다. }

44 비주얼 C++ 통합 개발 환경

45 메뉴 팝업 메뉴 = 컨텍스트 메뉴 메뉴

46 툴바 툴바 사용자 정의 툴바 추가

47 워크스페이스 ClassView FileView ResourceView

48 편집기

49 AppWizard

50 ClassWizard


Download ppt "윈도우 운영체제와 윈도우 응용 프로그램의 특징을 이해한다."

Similar presentations


Ads by Google