88
Chap. 1 : C++ 언어 및 윈도우 프로그래밍 = 강의 핵심 내용 = 1. C++ 프로그래밍 언어 소개 2. C++ 응용 프로그래밍 작성 3. 윈도우 프로그래밍

Chap. 1 : C++ 언어 및 윈도우 프로그래밍compiler.sangji.ac.kr/lecture/cpp/CPP_chap1.pdf · 제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) [email protected]

  • Upload
    others

  • View
    3

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Chap. 1 : C++ 언어 및 윈도우 프로그래밍compiler.sangji.ac.kr/lecture/cpp/CPP_chap1.pdf · 제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) kkman@sangji.ac.kr

Chap. 1 : C++ 언어 및 윈도우 프로그래밍

= 강의 핵심 내용 =

1. C++ 프로그래밍 언어 소개

2. C++ 응용 프로그래밍 작성

3. 윈도우 프로그래밍

Page 2: Chap. 1 : C++ 언어 및 윈도우 프로그래밍compiler.sangji.ac.kr/lecture/cpp/CPP_chap1.pdf · 제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) kkman@sangji.ac.kr

제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) [email protected] 2

1.1 C++ 프로그래밍 언어 소개C++ 프로그래밍 언어

Developed by B. Stroustrup at AT&T in the early 1980s. Superset of the C languagecommercially most popular among object-oriented languages of today.

C++ supportsobjects classes, subclasses(derived classes) methods(member functions) instance variables(data members) messages(member function calls) multiple inheritance(derivation)

Page 3: Chap. 1 : C++ 언어 및 윈도우 프로그래밍compiler.sangji.ac.kr/lecture/cpp/CPP_chap1.pdf · 제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) kkman@sangji.ac.kr

제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) [email protected] 3

주요 특징(significant features)중첩성(overloading)

가상 함수(virtual function)

접근 제어, visibility control(Information Hiding)

− private, protected, public

다중 상속성(multiple inheritance )

단점(drawbacks)순수한 의미의 객체지향 언어가 아님.(a hybridlanguage)

복잡성 증가

Page 4: Chap. 1 : C++ 언어 및 윈도우 프로그래밍compiler.sangji.ac.kr/lecture/cpp/CPP_chap1.pdf · 제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) kkman@sangji.ac.kr

제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) [email protected] 4

Design Issues of C++ a better C

data abstraction

OOP

Why was C chosen as the base language for C++ ?

it is versatile, terse, and relatively low-level.

it is adequate for most system programming tasks.

it runs everywhere and on everything.

it fits into the UNIX programming environments.

Page 5: Chap. 1 : C++ 언어 및 윈도우 프로그래밍compiler.sangji.ac.kr/lecture/cpp/CPP_chap1.pdf · 제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) kkman@sangji.ac.kr

제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) [email protected] 5

Observations 1970's : 구조화 프로그래밍(Structured Programming )

1980's : 구조화 프로그래밍에서 OOP로 전환

1990's : 객체지향 프로그래밍 시대(Age of OOP )

Page 6: Chap. 1 : C++ 언어 및 윈도우 프로그래밍compiler.sangji.ac.kr/lecture/cpp/CPP_chap1.pdf · 제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) kkman@sangji.ac.kr

제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) [email protected] 6

몇가지 용어들(terminologies )객체(object)

A self-contained software structure which usually models an application domain entity.

객체 = 데이터(data) + 연산(operations)

− A combination of data and operations that represents some real world entity.

클래스(class)A template from which objects with the same representation and same behavior can be created.

Page 7: Chap. 1 : C++ 언어 및 윈도우 프로그래밍compiler.sangji.ac.kr/lecture/cpp/CPP_chap1.pdf · 제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) kkman@sangji.ac.kr

제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) [email protected] 7

인스턴스 변수(Instance variables)The variables(data) contained in an object.

메소드(method) An operation of an object is called method.

메시지(message) A request to invoke an operation.

행위(behavior), 연산(operations) The set of all methods of an object is called its behavior or interface.

Page 8: Chap. 1 : C++ 언어 및 윈도우 프로그래밍compiler.sangji.ac.kr/lecture/cpp/CPP_chap1.pdf · 제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) kkman@sangji.ac.kr

제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) [email protected] 8

캡슐화(encapsulation)The data of an object can only be accessed via the methods of the objects.

자료 추상화(data abstraction) Definition of an abstract type. Encapsulation is needed.

상속성(inheritance) A mechanism which allows a new class to be incrementally defined from an existing class.

다형성(polymorphism )A message may behave differently on different classes.

User can send a generic message and leave the exact implementation details to the receiving objects.

Page 9: Chap. 1 : C++ 언어 및 윈도우 프로그래밍compiler.sangji.ac.kr/lecture/cpp/CPP_chap1.pdf · 제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) kkman@sangji.ac.kr

제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) [email protected] 9

1.2 The C++ Sample ProgramSimple I/O Program : hello.cpp

#include <iostream.h>

void int main() {

cout << "Hello, World!\n";

}

The operator << writes its second argument onto the standard output stream cout. It is a binary operator.

Overloading : Multiple use of a name.

− << : shift left or output operator

− int power(int, int);

− int power(double, double);

Page 10: Chap. 1 : C++ 언어 및 윈도우 프로그래밍compiler.sangji.ac.kr/lecture/cpp/CPP_chap1.pdf · 제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) kkman@sangji.ac.kr

제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) [email protected] 10

프로그래밍 과정

Preprocessor

Compiler

Object File

Object Files LibrariesLinker

Executable File(s)

Header FilesSource

<hello.cpp> <iostream.h>

hello.obj

kernel32.lib

\WinRel\hello.exe

Editor

\WinDebug\hello.exe

Page 11: Chap. 1 : C++ 언어 및 윈도우 프로그래밍compiler.sangji.ac.kr/lecture/cpp/CPP_chap1.pdf · 제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) kkman@sangji.ac.kr

제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) [email protected] 11

History of C++Major C++ Timeline

1979 May Work on C with Classes starts

1983 Dec C++ named 1986 Sep 1st OOPSLA conference 1987 Nov 1st USENIX C++ conference(Santa Fe, NM)

Dec 1st GNU C++ release

1990 May 1st Boland C++ release Mar 1st ANSI X3J16 Technical meetingJuly Templates accepted(Seattle, WA) Nov Exceptions accepted(Palo Alto, CA)

1992 Feb 1st DEC C++ release Mar 1st Microsoft C++ release May 1st IBM C++ release

1994 Sep Draft ANSI/ISO standard due.

Page 12: Chap. 1 : C++ 언어 및 윈도우 프로그래밍compiler.sangji.ac.kr/lecture/cpp/CPP_chap1.pdf · 제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) kkman@sangji.ac.kr

제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) [email protected] 12

OOPLs의 계보

ALGOL

BCPLSimula

Smalltalk C

Objective C C++Eiffel

Actor

Page 13: Chap. 1 : C++ 언어 및 윈도우 프로그래밍compiler.sangji.ac.kr/lecture/cpp/CPP_chap1.pdf · 제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) kkman@sangji.ac.kr

제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) [email protected] 13

Smalltalk특징

Alan Key at Xerox PARC in the early 1970s.

순수한 객체지향 언어

지원 요소

− 객체

− 클래스, 서브 클래스 => 단일 상속성

− 메소드, 인스턴스 변수(=필드)

− 메시지

개발 환경에 비해 성능이 낮음.

Page 14: Chap. 1 : C++ 언어 및 윈도우 프로그래밍compiler.sangji.ac.kr/lecture/cpp/CPP_chap1.pdf · 제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) kkman@sangji.ac.kr

제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) [email protected] 14

1.3 윈도우 프로그래밍이란 ?윈도우 프로그래밍이란?

사용자가 발생시키는 이벤트에 대한 메시지를 처리하는 것

메시지 기반 (Message Driven) 프로그래밍

이벤트 기반 (Event Driven) 프로그래밍

윈도우 프로그래밍하는 방법Win32 SDK(Software Development Kit)

윈도우에서 애플리케이션을 개발할 때 필요한 C 언어용 표준 라이브러리.

MFC(Microsoft Foundation Class)

윈도우에서 애플리케이션을 개발할 때 필요한C++ 언어로 작성된 클래스 라이브러리.

Page 15: Chap. 1 : C++ 언어 및 윈도우 프로그래밍compiler.sangji.ac.kr/lecture/cpp/CPP_chap1.pdf · 제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) kkman@sangji.ac.kr

제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) [email protected] 15

윈도우 프로그램 기본구조기본 구조

초기화 부분 : WinMain( )

메시지를 처리하는 부분 (커널과의 통신) : WndProc( )

윈도우커널

Applicationprogram

초기화

메시지 교환

Page 16: Chap. 1 : C++ 언어 및 윈도우 프로그래밍compiler.sangji.ac.kr/lecture/cpp/CPP_chap1.pdf · 제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) kkman@sangji.ac.kr

제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) [email protected] 16

실제 프로그램에서의 형태초기화 부분

int WINAPI WinMain( … )

{

초기화 부분

}

메시지 처리 부분

LRESULT CALLBACK WndProc( … )

{

메시지 처리 루틴

}

Page 17: Chap. 1 : C++ 언어 및 윈도우 프로그래밍compiler.sangji.ac.kr/lecture/cpp/CPP_chap1.pdf · 제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) kkman@sangji.ac.kr

제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) [email protected] 17

WinMain 함수int WINAPI WinMain(

HINSTANCE hInstance,

HINSTANCE hPrevInstance, LPTSTR lpszCmdLine,

int nCmdShow)

{

① 윈도우 클래스 생성

② 윈도우 클래스 등록

③ 프레임 윈도우 생성

④ 프레임 윈도우 화면에 표시

⑤ 메시지 큐로부터 메시지를 받아 해당 프로시저로

보냄

}

초기화 함수

어플리케이션 ID

인수

윈도우 상태

Page 18: Chap. 1 : C++ 언어 및 윈도우 프로그래밍compiler.sangji.ac.kr/lecture/cpp/CPP_chap1.pdf · 제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) kkman@sangji.ac.kr

제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) [email protected] 18

프로시쥬어(procedure)윈도우는 Message Driven 방식

메시지를 처리하는 함수를 procedure라 함

보통 함수명 다음에 Proc가 붙으면 프로시저로 간주

프로시저는 여러 개가 될 수 있다.

− 윈도우 클래스마다 수행되는 프로시저가 다르다.

Page 19: Chap. 1 : C++ 언어 및 윈도우 프로그래밍compiler.sangji.ac.kr/lecture/cpp/CPP_chap1.pdf · 제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) kkman@sangji.ac.kr

제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) [email protected] 19

WinProc 함수윈도우에서 들어온 메시지를 처리하는 루틴: switch( )

LRESULT CALLBACK WinProc(

HWND hwnd, UINT message,

WPARAM wParam, LPARAM lParam)

{

switch(iMsg)

{

해당 메시지에 대한 처리

}

}

결과값 저장 자료형(32비트)

WinMain()에서 보내지는 메시지

Page 20: Chap. 1 : C++ 언어 및 윈도우 프로그래밍compiler.sangji.ac.kr/lecture/cpp/CPP_chap1.pdf · 제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) kkman@sangji.ac.kr

제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) [email protected] 20

실습 : Win32 SDK 어플리케이션 작성주제

윈도우에 “I love Window Programming !” 텍스트 출력

Page 21: Chap. 1 : C++ 언어 및 윈도우 프로그래밍compiler.sangji.ac.kr/lecture/cpp/CPP_chap1.pdf · 제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) kkman@sangji.ac.kr

제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) [email protected] 21

Step 1 : Win32 SDK 프로젝트 생성1. Visual C++ 실행, File/New

프로젝트 이름(디렉토리 생성)

디렉토리변경

Page 22: Chap. 1 : C++ 언어 및 윈도우 프로그래밍compiler.sangji.ac.kr/lecture/cpp/CPP_chap1.pdf · 제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) kkman@sangji.ac.kr

제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) [email protected] 22

Page 23: Chap. 1 : C++ 언어 및 윈도우 프로그래밍compiler.sangji.ac.kr/lecture/cpp/CPP_chap1.pdf · 제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) kkman@sangji.ac.kr

제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) [email protected] 23

Step 2 : 소스 코드 삽입File/New

Practice1.c

Page 24: Chap. 1 : C++ 언어 및 윈도우 프로그래밍compiler.sangji.ac.kr/lecture/cpp/CPP_chap1.pdf · 제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) kkman@sangji.ac.kr

제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) [email protected] 24

Step 3 : 소스 코드 입력Practice1.c

Page 25: Chap. 1 : C++ 언어 및 윈도우 프로그래밍compiler.sangji.ac.kr/lecture/cpp/CPP_chap1.pdf · 제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) kkman@sangji.ac.kr

제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) [email protected] 25

Step 4 : 프로그램 실행Build/Build Practice1.exe 실행 또는 F7

Page 26: Chap. 1 : C++ 언어 및 윈도우 프로그래밍compiler.sangji.ac.kr/lecture/cpp/CPP_chap1.pdf · 제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) kkman@sangji.ac.kr

제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) [email protected] 26

에플리케이션 분석switch(message) {

case WM_CREATE : // 윈도우가 처음 생성 메시지가 온 경우

break;

case WM_PAINT : // 화면에 출력 메시지가 온 경우

PaintDC = BeginPaint(hwnd,&PaintStruct);

// 윈도우에 텍스트를 출력

TextOut(PaintDC, 10, 10, szMsg, strlen(szMsg));EndPaint(hwnd, &PaintStruct);

break;

case WM_DESTROY : // 프로그램 종료 메시지가 온 경우

PostQuitMessage(0);

break;

default : // 그 외의 메시지가 온 경우

return DefWindowProc(hwnd, message, wParam, lParam);

}

Page 27: Chap. 1 : C++ 언어 및 윈도우 프로그래밍compiler.sangji.ac.kr/lecture/cpp/CPP_chap1.pdf · 제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) kkman@sangji.ac.kr

제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) [email protected] 27

텍스트 출력하기TextOut() 함수

기본적인 텍스트 출력

BOOL TextOut (

HDC hdc, // 디바이스 컨텍스 핸들

int nXStart, // 문자 출력 시작점 X 좌표

int nYStart, // 문자 출력 시작점 Y 좌표

LPCTSTR lpString, // 출력할 문자열

int cbString // 문자열의 길이

) ;

Page 28: Chap. 1 : C++ 언어 및 윈도우 프로그래밍compiler.sangji.ac.kr/lecture/cpp/CPP_chap1.pdf · 제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) kkman@sangji.ac.kr

제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) [email protected] 28

DrawText( ) 함수

문자를 출력할 때 어느 영역을 정하고 이 영역에 출력하는 함수

Int DrawText (

HDC hdc, // 디바이스 컨텍스 핸들

LPCSTR lpString , // 출력할 문자

int nLength, // 출력할 문자의 수

LPRECT lpRect, // 출력할 영역

UINT Flags // 출력 형식 플러그

) ;

Page 29: Chap. 1 : C++ 언어 및 윈도우 프로그래밍compiler.sangji.ac.kr/lecture/cpp/CPP_chap1.pdf · 제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) kkman@sangji.ac.kr

제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) [email protected] 29

출력 형식 플러그

행 바꿈과 라인 피드를 무시하고 한 줄로 출력DT_SINGLELINE

텍스트가 출력할 사각형의 영역을 계산DT_CALCRECT

설정된 영역의 세로 중앙에 정렬(DT_SINGLELINE과 함께 지정되어야 한다)

DT_VCENTER

설정된 영역의 가로 중앙에 정렬DT_CENTER

설정된 영역의 우측으로

(DT_SINGLELINE과 함께 지정되어야 한다)

DT_RIGHT

설정된 영역의 좌측으로DT_LEFT

설정된 영역의 하단으로DT_BOTTOM

설정된 영역의 상단으로DT_TOP

내 용플러그 값

Page 30: Chap. 1 : C++ 언어 및 윈도우 프로그래밍compiler.sangji.ac.kr/lecture/cpp/CPP_chap1.pdf · 제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) kkman@sangji.ac.kr

제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) [email protected] 30

1.4 윈도우 프로그램의 기본 형식자료형

C 언어의 표준 자료형을 대신하는 자료형

− Windows.h에 정의된 윈도우 프로그램을 위한 구조체

구조체로 시작하여 구조체로 끝난다

− H가 붙지 않는 이상한 것은 모두 구조체이다.

핸들(handle)자원을 식별하기 위한 정수

윈도우 시스템은 핸들(정수번호)을 모든 자원에 부과

핸들 자료형 : H로 시작

Page 31: Chap. 1 : C++ 언어 및 윈도우 프로그래밍compiler.sangji.ac.kr/lecture/cpp/CPP_chap1.pdf · 제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) kkman@sangji.ac.kr

제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) [email protected] 31

기본 처리 방법핸들을 받아서 사용하거나, 핸들을 만들어서 설정하여사용.

예 : 라인을 그린다.

− 그릴 화면에 대한 핸들을 받고,

− 라인을 그릴 펜이라는 핸들을 만들고,

− 펜이라는 핸들을 이용하여 그릴 화면 핸들에 라인을 그린다.

핸들 처리에 관련된 함수

− Get 계열 함수 : 핸들을 얻을 경우 사용

− Create 계열 함수 : 핸들을 만들 때 사용

− Set 계열 함수 : 함수를 설정할 때 사용

Page 32: Chap. 1 : C++ 언어 및 윈도우 프로그래밍compiler.sangji.ac.kr/lecture/cpp/CPP_chap1.pdf · 제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) kkman@sangji.ac.kr

제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) [email protected] 32

새로운 데이터 형식MSG 구조체(windows.h)

메시지 큐에 저장되는 정보(메시지)를 담고 있는 구조체

GetMessage( ) : 메시지 큐에서 메시지를 가져와 MSG 구조체에 메시지 정보를 입력

typedef struct tagMSG {

HWND hwnd;

UINT message;

WPARAM wParam;

LPARAM lParam;

DWORD time;

POINT pt;

} MSG;

Page 33: Chap. 1 : C++ 언어 및 윈도우 프로그래밍compiler.sangji.ac.kr/lecture/cpp/CPP_chap1.pdf · 제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) kkman@sangji.ac.kr

제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) [email protected] 33

WNDCLASS 구조체윈도우 속성에 대한 정보를 포함하는 구조체

typedef struct _WNDCLASS {

UINT style; // 윈도우의 스타일을 지정한다. 정수 값의 조합으로 지정WNDPROC lpfnWndProc; // 윈도우 프로시저에 대한 포인터를 지정한다.int cbClsExtra; int cbWndExtra; HANDLE hInstance; // 인스턴스에 대한 핸들HICON hIcon; // 윈도우에서 사용될 아이콘에 대한 핸들 지정HCURSOR hCursor; // 윈도우에서 사용할 커서에 대한 핸들 지정HBRUSH hbrBackground; // 윈도우 백그라운드 브러쉬에 대한 핸들 지정LPCTSTR lpszMenuName; // 윈도우에서 메뉴 이름 지정, 리소스에서 사용LPCTSTR lpszClassName; // 윈도우 클래스의 이름을 명시

} WNDCLASS;

Page 34: Chap. 1 : C++ 언어 및 윈도우 프로그래밍compiler.sangji.ac.kr/lecture/cpp/CPP_chap1.pdf · 제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) kkman@sangji.ac.kr

제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) [email protected] 34

PAINTSTRUCT 구조체텍스트나 이미지를 윈도우의 클라이언트 영역에 그리고자 할 때, 사용자 정보를 포함

typedef struct tagPAINTSTRUCT {

HDC hdc; // 디스플레이 컨텍스트에 대한 핸들을 지정.

BOOL fErase; // 윈도우의 백그라운드를 다시 그릴지 지정.

RECT rcPaint; // 그리고자 하는 영역을 사각형 구조체를 이용해 지정.

BOOL fRestore; // 시스템에 예약되어 있으며, 내부적으로 이용.

BOOL fIncUpdate; // 시스템에 예약되어 있으며, 내부적으로 이용.

BYTE rgbReserved[16]; // 시스템에 예약되어 있으며, 내부적으로 이용.

} PAINTSTRUCT;

Page 35: Chap. 1 : C++ 언어 및 윈도우 프로그래밍compiler.sangji.ac.kr/lecture/cpp/CPP_chap1.pdf · 제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) kkman@sangji.ac.kr

제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) [email protected] 35

RECT 구조체사각형 형태의 좌표를 지정하는 구조체

typedef struct tagRECT {

LONG left; // 맨 왼쪽의 좌표를 명시한다.

LONG top; // 맨 위쪽의 좌표를 명시한다.

LONG right; // 맨 오른쪽의 좌표를 명시한다.

LONG bottom; // 맨 아래쪽의 좌표를 명시한다.

} RECT;

Page 36: Chap. 1 : C++ 언어 및 윈도우 프로그래밍compiler.sangji.ac.kr/lecture/cpp/CPP_chap1.pdf · 제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) kkman@sangji.ac.kr

제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) [email protected] 36

헝가리언 표기법특이하게 지정된 변수 이름

윈도우 프로그램에서 변수 이름 지정 방법중 하나.

특징, [표1-1] 참고변수 이름은 데이터 형식을 의미하는 하나이상의 소문자로 시작.

Microsoft의 프로그래머인 Charles Simonyi를 기리는뜻으로 붙여진 이름

작성한 프로그램에서 오류나 버그가 발생하기 전에에러를 방지할 수 있음.

변수의 사용과 더불어 데이터 형식을 기술해 줌으로써, 데이터 형식 불일치 같은 코딩 오류를 방지.

Page 37: Chap. 1 : C++ 언어 및 윈도우 프로그래밍compiler.sangji.ac.kr/lecture/cpp/CPP_chap1.pdf · 제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) kkman@sangji.ac.kr

제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) [email protected] 37

윈도우 시스템의 이해

윈도우는 GUI 이다.

윈도우는 멀티태스킹을 지원한다.

윈도우는 메시지 기반 구조이다.

윈도우는 윈도우 프로시저를 호출한다.

Page 38: Chap. 1 : C++ 언어 및 윈도우 프로그래밍compiler.sangji.ac.kr/lecture/cpp/CPP_chap1.pdf · 제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) kkman@sangji.ac.kr

제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) [email protected] 38

연습문제 1-1<실습 1-1> 응용

생성된 윈도우에서 키보드를 눌렀다 떼었다 했을 경우, 윈도우의 상하/좌우 중앙에 텍스트를 출력해보자. 키보드를 눌렀을 경우는 "키보드가 눌러졌습니다." 라는 텍스트를, 키보드를 떼었을 경우는 "키보드가 떼어졌습니다." 라는 텍스트를 출력한다.

제공된 소스 분석(project1_1.c)

Page 39: Chap. 1 : C++ 언어 및 윈도우 프로그래밍compiler.sangji.ac.kr/lecture/cpp/CPP_chap1.pdf · 제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) kkman@sangji.ac.kr

제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) [email protected] 39

// ① 커널에서 들어온 메시지를 switch문을 이용하여 처리switch(message){

case WM_CREATE : // 윈도우가 처음 생성 메시지가 온 경우break;

case WM_PAINT : // 화면에 출력 메시지가 온 경우PaintDC = BeginPaint(hwnd,&PaintStruct);TextOut(PaintDC, 10, 10, szMsg1, strlen(szMsg1)); // 윈도우에 텍스트를 출력EndPaint(hwnd, &PaintStruct);break;

case WM_KEYDOWN :hdc = GetDC(hwnd);GetClientRect(hwnd, &rect);DrawText(hdc, szMsg2, strlen(szMsg2),&rect,DT_SINGLELINE|DT_CENTER|DT_VCENTER); ReleaseDC(hwnd,hdc);break;

case WM_KEYUP :hdc = GetDC(hwnd);

GetClientRect(hwnd, &rect);DrawText(hdc, szMsg3, strlen(szMsg3),&rect,DT_SINGLELINE|DT_CENTER|DT_VCENTER); ReleaseDC(hwnd,hdc);break;

case WM_DESTROY : // 프로그램 종료 메시지가 온 경우PostQuitMessage(0);break;

default : // 그 외의 메시지가 온 경우return DefWindowProc(hwnd, message, wParam, lParam);

}

Page 40: Chap. 1 : C++ 언어 및 윈도우 프로그래밍compiler.sangji.ac.kr/lecture/cpp/CPP_chap1.pdf · 제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) kkman@sangji.ac.kr

제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) [email protected] 40

1.5 Visual C++ 프로그래밍Visual C++ 개발환경에서의 주요 작업

프로젝트 생성 또는 열기 (Application Wizard)

메시지 핸들러 재정의 (Class Wizard)

MFC 버추얼 메소드 재정의 (Class Wizard)

필요한 경우 새 클래스 추가

리소스 추가 및 편집

프로젝트 빌드

디버깅

Page 41: Chap. 1 : C++ 언어 및 윈도우 프로그래밍compiler.sangji.ac.kr/lecture/cpp/CPP_chap1.pdf · 제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) kkman@sangji.ac.kr

제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) [email protected] 41

AppWizard 사용법목표

AppWizard를 사용한 프로그램 개발

Project의 확장

Device Context

문자열 출력

기타Class

Graphic 출력

Page 42: Chap. 1 : C++ 언어 및 윈도우 프로그래밍compiler.sangji.ac.kr/lecture/cpp/CPP_chap1.pdf · 제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) kkman@sangji.ac.kr

제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) [email protected] 42

AppWizard Project 생성 (1)새로운 Project 작성

File / New / Projects 선택

Page 43: Chap. 1 : C++ 언어 및 윈도우 프로그래밍compiler.sangji.ac.kr/lecture/cpp/CPP_chap1.pdf · 제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) kkman@sangji.ac.kr

제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) [email protected] 43

참고여러가지 유형의 프로젝트 생성

윈도우 어플리케이션 개발

− "MFC AppWizard (exe)" 항목 선택, 프로젝트 생성

− Application Wizard 마법사가 기본 코드 생성

− 여러가지 옵션 선택 가능

텍스트 모드 어플리케이션 개발

− "Win32 Console Application" 항목 선택.

Page 44: Chap. 1 : C++ 언어 및 윈도우 프로그래밍compiler.sangji.ac.kr/lecture/cpp/CPP_chap1.pdf · 제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) kkman@sangji.ac.kr

제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) [email protected] 44

AppWizard Project 생성 (2)Project의 종류

MFC AppWizard(exe)

MFC AppWizard(dll)

Win32 Application

Win32 Dynamic Link Library

MFC library를 사용하여 단독 실행 가능한

프로그램 작성

MFC library를 사용하여 DLL 작성

Win32 SDK를 사용하여 실행 파일 작성

Win32 SDK를 사용하여 DLL 작성

항목 의 미

Page 45: Chap. 1 : C++ 언어 및 윈도우 프로그래밍compiler.sangji.ac.kr/lecture/cpp/CPP_chap1.pdf · 제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) kkman@sangji.ac.kr

제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) [email protected] 45

AppWizard Project 생성(3)MFC AppWizard-Step 1

Page 46: Chap. 1 : C++ 언어 및 윈도우 프로그래밍compiler.sangji.ac.kr/lecture/cpp/CPP_chap1.pdf · 제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) kkman@sangji.ac.kr

제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) [email protected] 46

MFC AppWizard-Step 1 : Architecture typeSingle document

− 한번에 하나의 document 사용

− 예: notepad

Multiple document

− 여러 document 사용

− 예: 탐색기

Dialog-based

− 사용자의 입력을 위해 하나의 단순한 dialog box 제공

− 예: MFC Trace Options

언어

− resource text 지원 언어

Page 47: Chap. 1 : C++ 언어 및 윈도우 프로그래밍compiler.sangji.ac.kr/lecture/cpp/CPP_chap1.pdf · 제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) kkman@sangji.ac.kr

제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) [email protected] 47

AppWizard Project 생성(4)MFC AppWizard-Step 2 : Database option

Page 48: Chap. 1 : C++ 언어 및 윈도우 프로그래밍compiler.sangji.ac.kr/lecture/cpp/CPP_chap1.pdf · 제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) kkman@sangji.ac.kr

제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) [email protected] 48

MFC AppWizard-Step 2 : Database optionNone

− DB를 사용하지 않을때

Header files only

− 데이터베이스 코딩에 필요한 AFXDB.H 헤더 파일만을include해준다.

− 데이터베이스 기능은 직접 코딩해야 함.

A database view without file support :

− CRecordView, CRecordset 클래스를 상속받아 데이터베이스지원 기능을 생성

− 문서 저장 기능(Serialization)은 생성하지 않음

A database view, with file support

− CRecordView, CRecordset 클래스를 상속받아 데이터베이스지원 기능을 생성.

− 문서 저장 기능(Serialization)도 생성.

Page 49: Chap. 1 : C++ 언어 및 윈도우 프로그래밍compiler.sangji.ac.kr/lecture/cpp/CPP_chap1.pdf · 제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) kkman@sangji.ac.kr

제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) [email protected] 49

AppWizard Project 생성(5)MFC AppWizard-Step 3 : OLE option

Page 50: Chap. 1 : C++ 언어 및 윈도우 프로그래밍compiler.sangji.ac.kr/lecture/cpp/CPP_chap1.pdf · 제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) kkman@sangji.ac.kr

제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) [email protected] 50

MFC AppWizard-Step 3 : OLE optionOLE 복합 문서 기능

− 예) MS Word의 문서에 MS Excel의 표를 삽입

− 삽입된 Excel 표를 Word에서 직접 편집 가능

OLE Server와 Container

− 기능을 제공하는 Excel은 OLE Server이고

− 기능을 제공 받아 문서에 포함하는 Word는 OLE Container

Mini server

− 독립된 어플리케이션으로 실행될 수는 없고

− 다른 어플리케이션에 OLE server 기능 제공만 해준다

− 예: MS Equation Editor

Full server

− 다른 어플리케이션에 OLE server 기능을 제공하며

− 독립된 어플리케이션으로 실행될 수도 있다

− 예: MS Excel

Page 51: Chap. 1 : C++ 언어 및 윈도우 프로그래밍compiler.sangji.ac.kr/lecture/cpp/CPP_chap1.pdf · 제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) kkman@sangji.ac.kr

제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) [email protected] 51

AppWizard Project 생성(6)MFC AppWizard-Step 4 : 사용지 인터페이스 설정

소켓 프로그래밍하려면 선택함

툴바, 상태바, 인쇄기능, 문맥도움말 기능…

Page 52: Chap. 1 : C++ 언어 및 윈도우 프로그래밍compiler.sangji.ac.kr/lecture/cpp/CPP_chap1.pdf · 제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) kkman@sangji.ac.kr

제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) [email protected] 52

MFC AppWizard-Step 4 : 사용지 인터페이스 설정

Docking Toolbar : 툴바 지원 여부 선택

Initial Status Bar : 상태 바 지원 연부 선택

Printing and Print Preview

− Print, Print Setup, Print Preview 메뉴 기능이 생성

Context-Sensitive Help : 도움말 기능

3D controls

− 다이얼로그 박스 컨트롤의 모양을 3차원 입체로 설정

"How many files would you… "

− 파일 메뉴에 가장 최근에 작업한 팔일 목록을 몇개 표시할 것인가?

Page 53: Chap. 1 : C++ 언어 및 윈도우 프로그래밍compiler.sangji.ac.kr/lecture/cpp/CPP_chap1.pdf · 제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) kkman@sangji.ac.kr

제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) [email protected] 53

Step 4에서 "Advanced…" 버튼을 누름

문서의 확장자등록

메인 윈도우타이틀 바 제목

파일 열기 대화상자에표시될 파일 종류

Page 54: Chap. 1 : C++ 언어 및 윈도우 프로그래밍compiler.sangji.ac.kr/lecture/cpp/CPP_chap1.pdf · 제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) kkman@sangji.ac.kr

제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) [email protected] 54

참고File type ID

− 시스템 레지스트리에 등록되는 문서 종류 이름

Doc Type Name

− 클래스의 파일이름 설정

File new name (short name)

− File New 대화 상자에 나오는 파일의 이름 설정

− OLE server 일 경우 OLE object의 short 이름

File type name (long name)

− OLE server 일 경우 OLE object의 긴 이름

Use Splitter Window

− splitter 윈도우 기능 사용

Page 55: Chap. 1 : C++ 언어 및 윈도우 프로그래밍compiler.sangji.ac.kr/lecture/cpp/CPP_chap1.pdf · 제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) kkman@sangji.ac.kr

제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) [email protected] 55

AppWizard Project 생성(7)MFC AppWizard-Step 5 : 기타 사항 설정

Page 56: Chap. 1 : C++ 언어 및 윈도우 프로그래밍compiler.sangji.ac.kr/lecture/cpp/CPP_chap1.pdf · 제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) kkman@sangji.ac.kr

제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) [email protected] 56

MFC AppWizard-Step 5 : 기타 사항 설정"a shared DLL"

− MFC 라이브러리가 실행파일에 포함되지 않음

− 생성되는 실행 파일의 크기는 작지만

− 실행시 MFC의 DLL 파일을 필요로함

"a statically linked library"

− MFC 라이브러리가 실행파일에 포함됨

− 생성되는 실행 파일의 크기는 커지지만

− 실행시 MFC의 DLL 파일을 필요로 하지 않음

Page 57: Chap. 1 : C++ 언어 및 윈도우 프로그래밍compiler.sangji.ac.kr/lecture/cpp/CPP_chap1.pdf · 제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) kkman@sangji.ac.kr

제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) [email protected] 57

AppWizard Project 생성(9)MFC AppWizard-Step 6 : 생성될 클래스 파일

부모 클래스를선택

생성된 클래스들

생성된 파일

Page 58: Chap. 1 : C++ 언어 및 윈도우 프로그래밍compiler.sangji.ac.kr/lecture/cpp/CPP_chap1.pdf · 제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) kkman@sangji.ac.kr

제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) [email protected] 58

Project WorkspaceProject Workspace

프로젝트를 구성하는 클래스, 리소스(resource), 파일목록을 관리

Class ViewResource View

FileView

Page 59: Chap. 1 : C++ 언어 및 윈도우 프로그래밍compiler.sangji.ac.kr/lecture/cpp/CPP_chap1.pdf · 제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) kkman@sangji.ac.kr

제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) [email protected] 59

Project Workspace - Class View특징

클래스, 메소드, 멤버 변수를 보여준다

클래스 노드를 확장하면 클래스의 메소드와 멤버 변수 목록을 볼 수 있다

아이콘

− 클래스

− protected 메소드

− private 메소드

− public 메소드

− protected 멤버변수

− private 멤버변수

− public 멤버변수

Page 60: Chap. 1 : C++ 언어 및 윈도우 프로그래밍compiler.sangji.ac.kr/lecture/cpp/CPP_chap1.pdf · 제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) kkman@sangji.ac.kr

제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) [email protected] 60

클래스 이름 클릭, 마우스 오른쪽 버튼을 누르면Go to Definition :클래스가 정의된 헤더 파일 열기

Add Member Function : 클래스에 메소드 추가하기

Add Member Variable : 클래스에 멤버 변수 추가하기

Add Virtual Function : 클래스에 MFC 버추얼 메소드 추가하기

Add Windows Message Handler : 클래스에 메시지 핸들러 추가하기

References : 클래스 정의된 곳, 참조된 곳 목록 보기

Derived Classes : 하위 클래스의 목록, 메소드, 멤버 변수, 정의된 곳, 참조된 곳 보기

Base Classes : 상위 클래스의 목록, 메소드, 멤버 변수, 정의된곳, 참조된 곳 보기

Group by Access : 멤버의 정렬 순서 선택

Page 61: Chap. 1 : C++ 언어 및 윈도우 프로그래밍compiler.sangji.ac.kr/lecture/cpp/CPP_chap1.pdf · 제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) kkman@sangji.ac.kr

제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) [email protected] 61

실습

① CTestView 클래스 노드를 확장하기

② OnDraw 멤버 함수 더블 클릭하여 멤버 함수 정의로가기

③ GetDocument() 를 오른쪽 버튼으로 클릭Goto Reference

④ 클래스 이름 더블 클릭하여 클래스 정의로 가기

⑤ 전역 변수 theApp 더블 클릭하여 변수 정의로 가기

Page 62: Chap. 1 : C++ 언어 및 윈도우 프로그래밍compiler.sangji.ac.kr/lecture/cpp/CPP_chap1.pdf · 제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) kkman@sangji.ac.kr

제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) [email protected] 62

Project Workspace - File View프로젝트를 구성하는 파일 관리

Page 63: Chap. 1 : C++ 언어 및 윈도우 프로그래밍compiler.sangji.ac.kr/lecture/cpp/CPP_chap1.pdf · 제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) kkman@sangji.ac.kr

제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) [email protected] 63

파일 이름 더블 클릭, 텍스트 윈도우에 파일이 열린다.

오른쪽 버튼 클릭, 컴파일 또는 컴파일 옵션 설정

파일 살펴보기Test.cpp Test.h : CTestApp, CAboutDlg 클래스

Test.rc : 리소스 소스 파일

TestDoc.cpp TestDoc.h : CTestDoc 클래스

TestView.cpp TestView.h : CTestView 클래스

MainFrm.cpp MainFrm.h : CMainFrame 클래스

ReadMe.txt

StdAfx.h : pre-compiled header 파일

StdAfx.cpp : pre-compiled header의 소스 파일

Test.ico TestDoc.ico : 어플리케이션 아이콘, 도큐먼트 아이콘

Test.rc2 : 리소스 에디터로 편집할 수 없는 리소스

Toolbar.bmp : 툴바의 비트맵 파일

Page 64: Chap. 1 : C++ 언어 및 윈도우 프로그래밍compiler.sangji.ac.kr/lecture/cpp/CPP_chap1.pdf · 제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) kkman@sangji.ac.kr

제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) [email protected] 64

Project Workspace - Resource View리소스 : 메뉴, 대화상자, 템플릿, 비트맵, …

Page 65: Chap. 1 : C++ 언어 및 윈도우 프로그래밍compiler.sangji.ac.kr/lecture/cpp/CPP_chap1.pdf · 제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) kkman@sangji.ac.kr

제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) [email protected] 65

참고1Accelerator : 메뉴 항목에 대한 단축키 정의

Dialog : 대화상자 템플릿

Menu

− IDR_MAINFRAME : 메인윈도우 메뉴

− IDR_TESTTYPE : 도큐먼트 윈도우 메뉴

String Table : 문자열을 리소스로 저장

Toolbar

Bitmap

Cursor : 마우스 포인터

Icon

Page 66: Chap. 1 : C++ 언어 및 윈도우 프로그래밍compiler.sangji.ac.kr/lecture/cpp/CPP_chap1.pdf · 제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) kkman@sangji.ac.kr

제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) [email protected] 66

참고2어플리케이션의 GUI 각 요소들의 많은 부분은 실행화일에 리소스 형태로 추가.

실행화일에 추가된 리소스는 프로그램을 다시 컴파일하지 않고도 직접 수정 가능.

리소스는 프로그램이 실행될 때 모두 메모리로 로드될 필요는 없고 그 순간에 필요한 리소스만 로드될 수있기 때문에 효율적인 메모리 사용이 가능.

Page 67: Chap. 1 : C++ 언어 및 윈도우 프로그래밍compiler.sangji.ac.kr/lecture/cpp/CPP_chap1.pdf · 제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) kkman@sangji.ac.kr

제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) [email protected] 67

AppWizard Project 생성(11)Build(F7) / 실행(Ctrl+F5)

Page 68: Chap. 1 : C++ 언어 및 윈도우 프로그래밍compiler.sangji.ac.kr/lecture/cpp/CPP_chap1.pdf · 제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) kkman@sangji.ac.kr

제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) [email protected] 68

Project 의 확장 (1)Code 추가

TestView.cpp : OnDraw(CDC* pDC) { … }

Page 69: Chap. 1 : C++ 언어 및 윈도우 프로그래밍compiler.sangji.ac.kr/lecture/cpp/CPP_chap1.pdf · 제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) kkman@sangji.ac.kr

제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) [email protected] 69

TestView.cpp : OnDraw(CDC* pDC) { … }

void CTestView::OnDraw(CDC* pDC)

{

CTestDoc* pDoc = GetDocument();

ASSERT_VALID(pDoc);

// TODO: add draw code for native data here

pDC->TextOut(100, 100, "I will find a way or make one.", 30) ;

}

Page 70: Chap. 1 : C++ 언어 및 윈도우 프로그래밍compiler.sangji.ac.kr/lecture/cpp/CPP_chap1.pdf · 제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) kkman@sangji.ac.kr

제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) [email protected] 70

Device ContextCDC Class

화면, 프린터에 출력하기 위한 DC(Device Context)정보

− 화면 영역, 선의 색상, 채색 색상, 글꼴 모양

void CTestView::OnDraw(CDC* pDC){

pDC->TextOut(0, 0, “I will …. ”, 30)}

Page 71: Chap. 1 : C++ 언어 및 윈도우 프로그래밍compiler.sangji.ac.kr/lecture/cpp/CPP_chap1.pdf · 제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) kkman@sangji.ac.kr

제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) [email protected] 71

문자열 출력 (1)

TextOut()형식

void CTestView::OnDraw(CDC* pDC) {CTestDoc* pDoc = GetDocument();ASSERT_VALID(pDOC)pDC->TextOut(0, 0, “I will be a Visual C++ expert”, 30);

}

Bool TextOut(int x, int y, LPCTSTR lpszString, int nCount);

출력하려는 문자열

출력하려는 문자열의 길이

Page 72: Chap. 1 : C++ 언어 및 윈도우 프로그래밍compiler.sangji.ac.kr/lecture/cpp/CPP_chap1.pdf · 제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) kkman@sangji.ac.kr

제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) [email protected] 72

문자열 출력 (2)

Cstring Class형식

예 void CTestView::OnDraw(CDC* pDC){

CTestDoc* pDoc = GetDocument();ASSERT_VALID(pDOC)CString str(“I will be a Visual C++ expert”);pDC->TextOut(0, 0, str);

}

Bool TextOut(int x, int y, const Cstring& str);

문자열 Class

Cstring Class형의 객체

Page 73: Chap. 1 : C++ 언어 및 윈도우 프로그래밍compiler.sangji.ac.kr/lecture/cpp/CPP_chap1.pdf · 제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) kkman@sangji.ac.kr

제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) [email protected] 73

문자열 출력 (3)

Cstring Class에 정의된 멤버 연산자

멤버 함수 기능

=

+

==

+=

다른 문자열 대입

문자열 연결

문자열 비교

문자열에 다른 문자열 추가

Page 74: Chap. 1 : C++ 언어 및 윈도우 프로그래밍compiler.sangji.ac.kr/lecture/cpp/CPP_chap1.pdf · 제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) kkman@sangji.ac.kr

제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) [email protected] 74

문자열 출력 (4)

예 void CTestView::OnDraw(CDC* pDC){

CString str1, str2, str3;str1="Object Oriented Programming->";str2="Visual C++ !!!";

ASSERT_VALID(pDoc);

pDC->TextOut(10, 10, str1);

str3 = str1 + " " + str2;pDC->TextOut(10, 50, str3);

str1 += " " + str2;pDC->TextOut(10, 100, str1);

if(str1 == str3){pDC->TextOut(10, 150, "True", 4);

}else{pDC->TextOut(10, 150, "False", 5);

}}

Page 75: Chap. 1 : C++ 언어 및 윈도우 프로그래밍compiler.sangji.ac.kr/lecture/cpp/CPP_chap1.pdf · 제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) kkman@sangji.ac.kr

제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) [email protected] 75

문자열 출력 (5)실행결과

Page 76: Chap. 1 : C++ 언어 및 윈도우 프로그래밍compiler.sangji.ac.kr/lecture/cpp/CPP_chap1.pdf · 제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) kkman@sangji.ac.kr

제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) [email protected] 76

문자열 출력 (6)

Cstring Class에 정의된 멤버 함수

멤버 함수 기능

GetLength( )

Mid(int nFirst, nCount)

Left(int nCount)

Right(int nCount)

MakeUpper( )

MakerLower( )

Format(LPCTSTR lpszFormat)

문자열 길이

문자열에서 중간 문자열 추출

문자열의 왼쪽에서 문자열 추출

문자열의 오른쪽에서 문자열 추출

문자열을 대문자로 변환

문자열을 소문자로 변환

서식화된 문자열

Page 77: Chap. 1 : C++ 언어 및 윈도우 프로그래밍compiler.sangji.ac.kr/lecture/cpp/CPP_chap1.pdf · 제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) kkman@sangji.ac.kr

제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) [email protected] 77

문자열 출력 (7)

예 void CTestView::OnDraw(CDC* pDC){

CString str1, str2, str3, str4, str5;str1="Object Oriented Programming->Visual C++ !!!";

int i = str1.GetLength(); str2.Format("Length = %d", i);pDC->TextOut(10, 10, str2);

str3 = str1.Mid(7, 8);pDC->TextOut(10, 50, str3);

str4 = str1.Left(6);pDC->TextOut(10, 100, str4);

str5 = str1.Right(14);pDC->TextOut(10, 150, str5);

str5.MakeUpper();pDC->TextOut(10, 200, str5);

str5.MakeLower();pDC->TextOut(10, 250, str5);

}

//문자열 길이 구하기//서식화된 문자열

//중간문자열 추출

//왼쪽에서 문자열 추출

//오른쪽에서 문자열 추출

//문자열 대문자로 변경

//문자열 소문자로 변경

Page 78: Chap. 1 : C++ 언어 및 윈도우 프로그래밍compiler.sangji.ac.kr/lecture/cpp/CPP_chap1.pdf · 제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) kkman@sangji.ac.kr

제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) [email protected] 78

문자열 출력 (8)실행결과

Page 79: Chap. 1 : C++ 언어 및 윈도우 프로그래밍compiler.sangji.ac.kr/lecture/cpp/CPP_chap1.pdf · 제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) kkman@sangji.ac.kr

제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) [email protected] 79

문자열 출력 (9)

DrawText ()형식

int DrawText(LPCTSTR lpszString, int nCount, LPRECT lpRect, UINT nFormat);

출력하려는 문자열

출력하려는 문자열의 길이 출력 영역 출력 형식

void CTestView::OnDraw(CDC* pDC){

RECT DTRECT;CHAR *MyStr= " 천리안 \

특집 1 천리안과 함께 떠나는 98년 메뉴 여행 \특빕 2 사이버 저널리즘의 결정체, 웹진의 세계 ";

SetRect(&DTRECT, 10,10, 200, 200);pDC->DrawText(MyStr, -1, &DTRECT, DT_LEFT | DT_WORDBREAK);

}

Page 80: Chap. 1 : C++ 언어 및 윈도우 프로그래밍compiler.sangji.ac.kr/lecture/cpp/CPP_chap1.pdf · 제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) kkman@sangji.ac.kr

제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) [email protected] 80

문자열 출력 (10)실행 결과

Page 81: Chap. 1 : C++ 언어 및 윈도우 프로그래밍compiler.sangji.ac.kr/lecture/cpp/CPP_chap1.pdf · 제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) kkman@sangji.ac.kr

제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) [email protected] 81

기타 Class (1)

Class 설 명

CRect

CPoint

CSize

사각 영역 표현

한 점의 좌표 표현

폭, 높이 등의 크기 표현

Page 82: Chap. 1 : C++ 언어 및 윈도우 프로그래밍compiler.sangji.ac.kr/lecture/cpp/CPP_chap1.pdf · 제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) kkman@sangji.ac.kr

제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) [email protected] 82

Bool DrawEdge(LPRECT, lpRect, UINT nEdge, UINT nFlags)

기타 Class (2)

사각형의 속성 사각형의 4변중그리고자 하는 변 지정

Format

사각형 속성(nEdge)

값 설 명BDR_RAISEDINNERBDR_SUNKENINNERBDR_RAISEDOUTERBDR_ SUNKENOUTEREDGE_BUMPEDGE_ETCHEDEDGE_RAISEDEDGE_SUNKEN

내부가올라간모양

내부가내려간모양

외부가올라간모양

외부가내려간모양

내부가내려간모양 & 외부가올라간모양내부가올라간모양 & 외부가내려간모양내부가올라간모양 & 외부가올라간모양내부가내려간모양 & 외부가내려간모양

Page 83: Chap. 1 : C++ 언어 및 윈도우 프로그래밍compiler.sangji.ac.kr/lecture/cpp/CPP_chap1.pdf · 제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) kkman@sangji.ac.kr

제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) [email protected] 83

기타 Class (3)

사각형의 4변 중에서 그리는 변 지정(nFlags)

값 설 명BF_RECTBF_LEFTBF_BOTTOMBF_ RIGHTEF_TOPEF_TOPLEFTEF_TOPRIGHTEF_BOTTOMLEFTBF_ BOTTOMRIGHTEF_DIAGONAL_ENDBOTTOMLEFTEF_DIAGONAL_ENDBOTTOMRIGHT EF_DIAGONAL_ENDTOPLEFT EF_DIAGONAL_ENDTOPRIGHT

4변모두그림좌측변만그림

하변만그림

우측변만그림

상변만그림

상변 & 좌측변만그림상변 & 우측변만그림하변 & 좌측변만그림하변 & 우측변만그림우측상에서좌측하변으로대각선

좌측상에서우측하변으로대각선

우측하에서좌측상변으로대각선

좌측하에서좌측상변으로대각선

Page 84: Chap. 1 : C++ 언어 및 윈도우 프로그래밍compiler.sangji.ac.kr/lecture/cpp/CPP_chap1.pdf · 제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) kkman@sangji.ac.kr

제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) [email protected] 84

기타 Class (4)예제

CRect

void CTestView::OnDraw(CDC* pDC){

CRect r(10, 10, 200,100);

// TODO: add draw code for native data here

pDC->DrawEdge(r, EDGE_BUMP, BF_RECT);}

Page 85: Chap. 1 : C++ 언어 및 윈도우 프로그래밍compiler.sangji.ac.kr/lecture/cpp/CPP_chap1.pdf · 제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) kkman@sangji.ac.kr

제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) [email protected] 85

기타 Class (5)실행결과

Page 86: Chap. 1 : C++ 언어 및 윈도우 프로그래밍compiler.sangji.ac.kr/lecture/cpp/CPP_chap1.pdf · 제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) kkman@sangji.ac.kr

제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) [email protected] 86

Graphic 출력 (1)

Rectangle ()형식

Bool Rectangle(int x1, int y1, int x2, int y2);

Ellipse ()형식

Bool Ellipse(int x1, int y1, int x2, int y2);

MoveTo ()형식

CPoint MoveTo(int x, int y);

Page 87: Chap. 1 : C++ 언어 및 윈도우 프로그래밍compiler.sangji.ac.kr/lecture/cpp/CPP_chap1.pdf · 제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) kkman@sangji.ac.kr

제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) [email protected] 87

Graphic 출력 (2)

LineTo ()형식

Bool LineTo(int x, int y);

void CTestView::OnDraw(CDC* pDC){

pDC->Rectangle(10, 10, 100, 100);pDC->Ellipse(150, 10, 300, 100);pDC->MoveTo(10, 120);pDC->LineTo(300, 200);

}

Page 88: Chap. 1 : C++ 언어 및 윈도우 프로그래밍compiler.sangji.ac.kr/lecture/cpp/CPP_chap1.pdf · 제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) kkman@sangji.ac.kr

제1장: C++ 언어 및 윈도우 프로그래밍 개요, Q) [email protected] 88

Graphic 출력 (3)실행결과