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

Slides:



Advertisements
Similar presentations
Computer Graphics 1 윈도우 프로그래밍 실습 II 김 창 헌김 창 헌.
Advertisements

메시지 처리의 기본 개념 메시지 발생된 이벤트의 종류와 정보를 전달하는 일종의 상수 값 윈도우 프로그래밍 가장 중요한 것은 메시지를 처리하는 것 윈도우 시스템 Application 이벤트 발생 메시지 전송 메시지 처리 화면에 출력.
Computer Graphics 윈도우 프로그래밍 김 창 헌김 창 헌. Computer Graphics 2 윈도우 시스템  윈도우  스크린 위에서 독립적으로 움직일 수 있는 사각형 영역  윈도우 시스템  유저와 어플리케이션간의 그래픽 스크린을 통한 인터페이스 를.
Message Process for SDI Chung-Buk HRD Institute of KCCI Dept. of Information & Communication PhD. Kang, Won-Chan.
CH5 디버그를 해보자 디버그 디버거 : 실행중인 응용 프로그램을 지정한 장소에서 정지하고, 그 시 점에서 변수, 메모리, 콜 스택의 내용을 참조하는것이 가능 Build -> Start Debug -> Go.
강의 내용 : DirectX 개요 DirectX 9 을 이용한 시각화. 목 차 DirectX 출현 배경 DirectX 현재 버전 DirectX 장점 DirectX 구성요소 DirectX SDK 다운로드 및 설치 DirectX SDK 폴더 구성 및 역할 샘플 코드 브라우저.
CH1 개발 효율이 높은 프로그램 구조
미디어 프로그래밍 II 소개.
Visual C++ Programming Document/View Architecture
컴퓨터 공학 설계 및 실험 I MFC programming
2장. 윈도우즈 입출력 1/211 1.
윈도우 일반 공주영상대학 게임과 이 은 순.
7장. MDI 프로그래밍 MDI 프로그래밍에 대한 내용을 배우도록 한다. 지금까지 배운 것은 생성된 윈도우에 단일 화면이 존재하는 형태였다. 이것을 SDI라고 부르고 Single Document Interface의 약자이다. 하나의 문서를 하나의 화면에 보여주는 형태의.
Visual C++ Programming
Windows Programming Chapter 1. Introduction to SDK
MFC Application Frameworks (AFX)
C++ Espresso 제1장 기초 사항.
Lecture 2 MFC and Application Frameworks
Visual C++ Programming Dialog Box
제1장 윈도우 프로그래밍 1.1 윈도우 프로그래밍의 개념 1.2 윈도우 프로그램의 기본 구조
MFC의 메시지 처리.
Visual C++ Programming Document/View Architecture 3
제1장 윈도우 프로그래밍 1.1 윈도우 프로그래밍의 개념 1.2 윈도우 프로그램의 기본 구조
5장. 단축키와 비트맵 윈도우 프로그램에는 화면에서 사용자들의 입력을 받아 들이고 출력을 위한 코드 외 부분이 존재한다. 이 부분을 주로 리소스라고 부르고 이들은 주로 화면에 나타난다. 메뉴, 툴바, 비트맵, 단축키, 대화상자 등이 여기에 속한다. 이 부분들은 우리의 프로그램의.
윈도우의 화면 출력 원리를 이해한다. CDC 클래스를 이용한 화면 출력 기법을 배운다.
Chapter 09. 소켓 입출력 모델(I).
제12장 유연한 카메라 클래스 만들기 학기 컴퓨터게임(DirectX).
MFC를 이용한 네트워크게임 졸업 프로젝트 담당 교수 : 김재형 교수님 김 성준 김 민기.
MFC 발전 과정과 주요 특징을 개괄적으로 이해한다.
Department of Digital Contents Sang Il Park
윤 홍 란 MFC 기초 윤 홍 란
Windows Programming 시작하기
Win32 API Programming 이 계 임.
강사 : 이준근 Win32 API 강사 : 이준근
태양계 시뮬레이션 팀 명: 복학생 강유진 박지혜.
범용 소켓 클래스 만들기.
Department of Digital Contents Sang Il Park
25장. 메모리 관리와 동적 할당.
Window socket programming
MFC Application Frameworks (AFX)
MFC 프로그래밍에 관한 팁 / Keyboard / Timer
MFC 프로그래밍에 관한 팁 / Keyboard
Visual C++ Programming
제8장 스텐실.
Visual C++ Programming Output and File
강사 : 이준근 Win32 API 강사 : 이준근
Visual C++ Programming Common Controls
프로그래밍2 및 실습 C언어 기반의 C++ 2.
Visual C++ Programming MFC Programming의 이해
Windows Programming 시작하기
날짜: 팀명: TEAM-SIX 발표자: 이기영
MFC Internals.
Chapter 09. 소켓 입출력 모델(I).
Lab 4 보고서 교재 5장 사용자 인터페이스 예제 - 사용자 인터페이스 갱신
컴퓨터의 기초 제 2강 - 변수와 자료형 , 연산자 2006년 3월 27일.
GUI 소켓 애플리케이션 Chapter 08. * 학습목표 윈도우 GUI 애플리케이션의 구조와 동작 원리를 이해
WSAAsync Select 김대열 Bit - Academy Sunmoon University, Korea.
Lab 9 Guide: 인터넷 프로그래밍 예제 * 일대일 채팅 프로그램 (교재 27장, 쪽)
C89(C++03) 프로그래밍 (Part 2) 7 배열 8 변수 범위 9 포인터 10 유도 자료형.
3장. 제어 메시지 처리하기 1/211 1.
Windows 프로그래밍 환경 및 MFC의 구조
게임과 1학년 Flipping - 파일을 읽어서 출력하는 프로그램
17장. 포인터의 포인터.
C.
1 2 4 &
MFC 응용 프로그램 구조 두 개의 윈도우로 구성된 일반적인 MFC 프로그램 프레임 윈도우
윈도우 운영체제와 윈도우 응용 프로그램의 특징 SDK 응용 프로그램 MFC 응용 프로그램
C++ 언어의 특징
윤성우의 열혈 C++ 프로그래밍 윤성우 저 열혈강의 C++ 프로그래밍 개정판 Chapter 02. C언어 기반의 C++ 2.
MFC 기초 윈도우 응용프로그램 개발 간략한 역사 Microsoft Foundation Classes
Presentation transcript:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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;

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);

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";

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);

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

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

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

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;

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

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

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);

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);

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

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

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

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

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

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);

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

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()

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

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

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

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() };

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

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"); }

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("마우스를 클릭했습니다.", "마우스 메시지");

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

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

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

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

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

워크스페이스 ClassView FileView ResourceView

편집기

AppWizard

ClassWizard