• 검색 결과가 없습니다.

Visual C++ Programming

N/A
N/A
Protected

Academic year: 2023

Share "Visual C++ Programming"

Copied!
706
0
0

로드 중.... (전체 텍스트 보기)

전체 글

(1)

998 Sang Il Kim

Visual C++

Programming

숭실대학교 정보과학대학원

김상일

hava@shinbiro.com

(2)

Visual C++ Programming

(C) 1998 Sang Il Kim

2

C++ 의 특징

 C++ 은 1980 년 미국 벨 연구소의 Bjarne Stroustrup 박사에 의해 개발  1980 년 발표 당시에는 “ C with class” 라는 이름으로 발표

 “C++” 라는 이름은 1983 년부터 사용되기 시작

함수  연산자의 다중정의 참조자 , 클래스

함수 , 포인터 구조체 , 공용체 풍부한 연산자

⊙ 객체지향 프로그래밍 ⊙

C C++

(3)

998 Sang Il Kim

Bjarne Bjarne Stroustrup Stroustrup

C++ 의 특징

(4)

Visual C++ Programming

(C) 1998 Sang Il Kim

4

C++ 의 특징

예약어 기능

class new delete friend inline operator this private protected public virtual

클래스를 정의

선언 메모리 영역을 할당 메모리 영역을 해제

클래스를 다른 클래스

함수의 ”친구”로 선언 인라인 함수를 정의

선언

연산자를 다중정의

해당 클래스 객체 자신을 가리키는 포인터 클래스의 비공개 멤버를 선언

클래스의 보호 멤버를 선언

클래스의 공개 멤버를 선언

클래스의 가상 함수를 선언

(5)

998 Sang Il Kim

C++ 의 특징

 I/O 스트림

 기존의 표준 C stream 인 stdin, stdout, stderr, stdprn 외에도 C++ 에서 는

cout, cin 등의 지정된 stream 들이 있어 이 stream 과 insertor(<<), extractor(>>) 함수를 이용한 입출력 방식을 주로 사용 .

 Insertor(<<) 함수를 이용한 출력

 cout stream 과 insertor 함수를 사용할 경우에는 iostream.h 파일을 include 해야 한다 .

C C++

#include <stdio.h>

void main(void)

{ printf(“Hello World!\n”);

}

#include <iostream.h>

void main(void)

{ cout << “Hello World!\n”;

}

(6)

Visual C++ Programming

(C) 1998 Sang Il Kim

6

C++ 의 특징

 변수선언

 변수 사용 위치에서 선언하고 선언과 동시에 그 값을 초기화  #include<iostream.h>

void main() {

int hap=0;

for(int i=0; i<=100; i++) hap += i;

cout << hap << “\n”;

} 상수를 알아서 찾아줌

 데이터 항목을 하나 이상 표시 #include<iostream.h>

void main(void)

{ int my_int = 5;

float my_float = 5.333;

cout << "The value of my_int is : " << my_int << ”\n";

cout << "The value of my_float is : " << my_float << ”\n";

}

(7)

998 Sang Il Kim

C++ 의 특징

 전역 식별 연산자 (::) (Global Scope Resolution Operator) :: 변수명칭

해당 변수는 전역변수임을 의미 #include<iostream.h>

int suja=123;

void main() {

int suja=10;

cout << suja << ”\n";

cout << ::suja << ”\n";

}

(8)

Visual C++ Programming

(C) 1998 Sang Il Kim

8

 Extractor(>>) 함수를 이용한 입력

 cin stream 과 extractor 함수를 사용할 경우에는 iostream.h 파일을 include 해야 한다 .

 키보드로 부터 데이터를 입력 #include<iostream.h>

void main(void) {

int my_int;

float my_float;

cin >> my_int;

cin >> my_float;

cout << “my_int = “ << my_int << “\nmy_float = “ << my_float << “\n”;

}

C++ 의 특징

(9)

998 Sang Il Kim

C++ 의 특징

 new 와 delete 연산자

C C++

#include<stdio.h>

void main(void) {

int *i;

i = malloc(sizeof(int));

*i = 10;

printf(“%d”, *i);

free(i);

}

#include<iostream.h>

void main(void) {

int *i = new int;

//int *i = new int[10];

i=10; //

10 개의 배열을 동적으로 할당

cout << i;

delete i;

}

(10)

Visual C++ Programming

(C) 1998 Sang Il Kim

1 0

Enumerator

 열거형 정의 및 선언법  정의

: 사용자가 정의하는 특별한 명칭을 갖는 정수들의 집합체를 말한다 .

 선언법

enum [ 태그명 ] { 열거요소 , 열거요소 ,…};

예 ) enum color { black, blue, green, cyan, red }; ( 형틀 정의 ) enum color screen; ( 변수 정의 ) enum color { black, blue, green, cyan, red } screen;

enum 은 열거형을 나타내는 예약어이다 . color 은 열거형의 tag 명

black, blue, green, cyan, red 는 열거요소

screen 이라는 열거형은 black, blue, green, cyan, red 로 구성된다 . 그 외의 요소를 갖게 되면 에러 발생

(11)

998 Sang Il Kim

Enumerator

 열거형 선언자

 선언자 변수 , 배열 , 포인터 , 함수 등이 올 수 있다 .

 일반변수 enum color rainbow; /* color 형을 가질 수 있는 변수 */

 배열 enum color rainbow[10]; /* 배열의 요소가 color 형 변수 */

 포인터 변수 enum color rainbow, *rp;

rp = &rainbow;

/* color 형 변수의 주소를 가리키는 color 형 포인터 변수 rp */

 열거형을 돌려주는 함수

enum color rain(); /* color 형을 돌려주는 함수 */

(12)

Visual C++ Programming

(C) 1998 Sang Il Kim

1 2

Enumerator

 열거형의 특징

◐ 열거 요소는 내부적으로 정해진 상수로 표현된다 . 예 ) enum color { black, blue, green, cyan, red };

black=0, blue=1, green=2, cyan=3, red=4 ◐ 열거 요소에 부여하는 정수는 임의적이어도 된다 .

예 ) enum color { black=5, blue, green=15, cyan, red=25 };

black=5, blue=6 green=15, cyan=16, red=25 로 처리된다 . ◐ 열거형 변수에 열거형에 해당하는 정수를 대입할 수 있다 .

예 ) enum color { black=5, blue, green=15, cyan, red=25 } screen;

screen=6; /* 열거 요소의 정수값으로 치환 가능 */

screen=25;

◐ 열거형 상수는 기억영역을 확보하지 않는다 .

예 ) enum color { black, blue, green, cyan, red };

black++, &blue, --green ( X ) /* 변수가 아니고 상수이기 때문 */

(13)

998 Sang Il Kim

typedef

 typedef 와 #define 과의 차이점

◐ typedef 는 컴파일러에 의해 , #define 은 전처리기에 의해 처리된다 . ◐ 표현상의 순서에 차이가 있다 .

예 ) #define INTEGER int typedef int INTEGER;

◐ #define 은 구문표현의 변화이지만 , typedef 는 의미상의 변화이다 . #define INTEGER int

위 선언문은 전처리기가 처리하고 나면 없어지고 , INTEGER 는 모두 int 로 바뀌어서 컴파일된다 .

◐ 열거형과 typedef 을 이용하여 소스를 작성하면 더욱 보기 쉽고 이해하기 쉬운 프로그램을 작성할 수 있다 .

(14)

Visual C++ Programming

(C) 1998 Sang Il Kim

1 4

Reference

 레퍼런스 방식의 함수호출

 C++ 는 기본적으로 파라미터를 값 (value) 이 아닌 레퍼런스로 보내도록 함수를 설정해 준다 .

 파라미터의 명칭은 & 를 선언하기만 하면 된다 .

#include<iostream.h>

void load_a(char &the_char); // C : void load_a(char *the_char);

void main() {

char my_char='z';

load_a(my_char); // C : load_a(&my_char);

cout << my_char << ”\n";

}

void load_a(char &the_char) // C : void load_a(char *the_char) {

the_char = 'a'; // C : *the_char = 'a';

}

(15)

998 Sang Il Kim

C++ 의 특징

 함수의 내정인자

#include <iostream.h>

void func(int a=10, int b=20, int n=5)

{ for(int i=a; i<=b; i+=n) // a  b 사이의 정수를 n 간격으로 표시 cout << i;

cout << “\n”;

}

void main()

{ func(); // func(10, 20, 5) 와 동일 func(5); // func(5, 20, 5) 와 동일 func(5, 30); // func(5, 30, 5) 와 동일 func(30, 40, 2);

void func(int inja1=1, inja2=100) { 함수의 실제내용 ;

}

(16)

Visual C++ Programming

(C) 1998 Sang Il Kim

1 6

객체지향 프로그래밍 (Object-Oriented Programming)

객체지향 프로그래밍(OOP) 은 구조적 프로그래밍 (Structured Programming) 의 개발 이래로 소프트웨어 기술 발전 사에서 매우 큰 혁명으로 여겨지고 있다 .

OOP 에 관한 여러 가지 정의와 해석이 존재하지만 , 일반적으로

추상화(Data Abstraction), 상속성 (Inheritance) 및 다형성 (Polymorphism) 등이 그 주요 특성으로 알려져 있다 .

데이터 추상화 (Data Abstraction)

OOP 에서는 데이터와 그 데이터를 처리하는 함수 (Function) 들이 하나의 독립된 객체에 캡슐화 (Encapsulation) 되어있다 . 즉 , OOP 에서는 데이터 추상화를 클래스라 불리우는 코드 단위로 사용하여 표현하는데 , 하나의 클래스는 유사한 속성과 기능을 가지는 여러 개의 객체들을 나타낸다 .

클래스가 단순한 데이터 구조 (Data Structure) 와 다른 점은 필요한

데이터 구조의 정의뿐 아니라 , 이 데이터 구조 위에서 작동하는 프로그램 코드 , , 함수들도 함께 가지고 있다는 점이다 .

데이터 추상화는 여러 장점이 있지만 , 무엇보다도 한 객체가 가지고 있는 데이터나 값은 그 객체만이 검색 , 수정할 수 있다는 점이다 .

이를 정보 감춤 (Information Hiding) 이라고 표현하는데 , 이런 식으로 개발된 프로그램은 모듈간의 간섭이 없어 나중에 코드를 수정하거나 추가할 때

유리하다 .

(17)

998 Sang Il Kim

객체지향 프로그래밍 (Object-Oriented Programming)

 상속성 (Inheritance)

OOP 에서는 새로운 클래스를 정의할 때 , 이미 만들어 놓은 클래스의

속성 ( 데이터의 구조와 함수들의 정의 ) 을 상속 받고 필요한 부분만 추가할 수 있는데 , 이를 클래스의 상속성이라 한다 .

이때 새로 생긴 클래스는 Sub-Class, 이전의 모태가 된 클래스를 Super-Class 라 한다 .

상속성을 사용하면 유사한 클래스들 간의 공통된 속성을 하나의

Super-Class 에 정의하여 Sub-Class 가 공유할 수 있으므로 전체 코드 크기도 줄고 프로그램 구성도 간단해진다 .

C 프로그래머들이 C++ 프로그래밍을 접할 때 이 상속성을 설계하는데 종종 어려움을 겪는데 , 이는 주어진 문제를 객체지향적으로 분석

(Object-Oriented Analysis) 하는 연습을 통하여 해결할 수 있다 .

(18)

Visual C++ Programming

(C) 1998 Sang Il Kim

1 8

객체지향 프로그래밍 (Object-Oriented Programming)

 다형성 (Polymorphism)

 대부분의 구조적 프로그래밍 언어에서는 하나의 함수가 하나의 기능을 가진다 .

그러나 OOP 에서는 하나의 함수가 사용되는 상황 (Context) 에 따라서 여러 가지 기능을 가질 수 있다 .

즉 , 클래스의 상속성 구조에서 여러 개의 클래스 사이에 동일한 이름의 함수들이 정의될 수 있고 , 각 함수의 기능 (Behavior) 은 소속된 클래스의 성격과 용도에 맞게 세분화 될 수 있다 .

예로서 그래픽 어플리케이션에서 원 , 사각형 , 자유형 등 여러 가지 그림 객체를 움직이는 MOVE 라는 함수를 생각할 수 있다 .

이때 OOP 에서는 하나의 MOVE 라는 이름의 함수를 종류별로 정의하고 , 각 형태의 그림 객체마다 이를 옮기는 최적의 방법으로 각 함수를

정의할 수 있다 .

(19)

998 Sang Il Kim

 소프트웨어에 대한 객체지향적 시각  객체 + 객체 = 프로그램

 데이터 + 함수 = 객체

 정의

 특정 데이터와 관련된 함수들을 가지는 프로그램 모듈

 실세계 영역에 있는 정보 , 물건 , 사물 , 개체 , 개념 등을 표현함  객체 = 속성 (Attributes) + 행위 (Behaviors)

= 변수 (Variables) + 함수 (Methods)  자동차

 객체의 특징

 캡슐화 (Encapsulation)

 정보은폐 (Information Hiding)

객체 (Object)

(20)

Visual C++ Programming

(C) 1998 Sang Il Kim

2 0

캡슐화 (Encapsulation)

 특정 데이터와 관련된 함수들을 한 덩어리로 묶는다 .  문제영역의 개념화 및 추상화를 효과적으로 지원함 .

 C++ 의 캡슐화 장치 class Point {

int xPosition;

int yPosition;

colorType color;

public:

void move(int x, int y);

void setColor(colorType c);



}

데이터

관련 함수들

(21)

998 Sang Il Kim

정보 은폐 (Information Hiding)

 캡슐내부의 정보를 외부에 감추는 것을 의미한다 .  캡슐화는 관련된 것들 주변에 캡슐을 씌우는 것 .

 처리하려는 데이터 구조와 함수에 사용된 알고리즘 등을 외부에서

직접 접근하지 못하도록 한다 .

 캡슐화 그 자체가 캡슐 안의 내용들이 외부에 보이지 않는 것을 의미

하지는 않는다 .

 콘택 600

 인터페이스

 외부 객체들이나 프로그램들이 접근할 수 있는 데이터와 함수들을

정의하여

 외부에서 이 인터페이스를 통해서 정보를 검색하거나 함수를

실행하도록 한다 .

(22)

Visual C++ Programming

(C) 1998 Sang Il Kim

2 2

 C++ 의 인터페이스 장치

class Point {

int xPosition;

int yPosition;

colorType color;

public:

void move(int x, int y);

void setColor(colorType c);



}

정보 은폐 (Information Hiding)

관련된 함수들

데이터

xPosition: 10 yPosition: 20 color: blue

move (int, int);

setColor (colorType);



외부 인터페이스 블랙박스

(23)

998 Sang Il Kim

객체 (Object)

 정의

 객체란 캡슐화와 정보은폐의 개념을 프로그램에서

효과적으로 사용할 수 있도록 한 장치임 .

 객체의 조건

 상태 (State) 를 가져야 한다 .

 행위 (Behavior) 를 가져야 한다 .

 고유의 식별자 (Identity) 를 가져야 한다 .

(24)

Visual C++ Programming

(C) 1998 Sang Il Kim

2 4

복합 객체 (Composite Object)

 한 객체가 다른 객체들을 포함하고 있는 경우

 작은 객체를 조합하여 보다 큰 객체로 조립해 가는 과정

 Point and Circle  class Point {

int xPosition, yPosition;

public:

void move(int x, int y);

}

 class Circle {

Point center;

int radius;

public:

void move(int x, int y) {

center.xPosition += x; // Error

center.yPosition += y; // Error

center.move(x, y); // Okay

}}

(25)

998 Sang Il Kim

메시지 (Message)

 객체 접근 방법

 한 객체는 다른 객체에게 메시지를 보내어 교류한다 .

 메시지 교환 (Massage Passing)

 메시지 교환 (Message Passing) 은 객체들 사이에 정보를 교환할 수 있는 유일한 수단이다 .

 한 객체가 다른 객체의 함수를 부르는 과정을 메시지 교환 (Message Passing) 이라고 한다 .

 메시지 형태

 수신객체 , 함수명 , 함수의 Arguments

 수신객체는 이 메시지를 받을 객체를 나타낸다 .  <receiver>.<operation_name> <arguments>

 myPoint.move(10, 5);

(26)

Visual C++ Programming

(C) 1998 Sang Il Kim

2 6

클래스 (Class)

 개념

 클래스는 객체의 타입 (Object Type) 이다 .

 정의

 클래스는 유사한 객체들이 갖는 공통된 데이터와

함수들을 정의한 객체의 기본 규격 (Specification) 이다 .  유사한 객체들의 타입을 정의한다 .

 인스턴스 (Instance)

 어떤 클래스에서 생성된 객체 혹은 한 클래스에 속하는 각각의 객체 .

 한 클래스에 속한 모든 객체들은 같은 종류의 데이터와 함수들을 가진다 .

 생성된 각 객체는 클래스에서 정의된 변수들에 대한

메모리를 할당 받는다 .

(27)

998 Sang Il Kim

클래스 (Class)

 직원 클래스

class Employee { char *name;

positionType position;

int salary;

phoneNumberType phoneNumber;



public:

void promote(positionType newPosition);

void changeSalary(int newSalary);



}

 Employee YoungHee();

(28)

Visual C++ Programming

(C) 1998 Sang Il Kim

2 8

상속 (Inheritance)

 개념

 한 클래스가 여러 종류의 서브 클래스로 세분화된다 .

 그래픽 클래스는 선 , 다각형 , 원 등으로 세분화

 학생 클래스는 학부학생과 대학원생등으로 세분화

 기존의 클래스 위에 필요한 데이터와 함수들을 추가하여 새로운 클래스를 만드는 경제적인 방법 .

 재사용성 증대

 용어 (Terminology)

 슈퍼 클래스 (Super class, Base class)

 서브 클래스 (Subclass, Derived class, Extended class)

 클래스 상속 구조 (Class Inheritance Hierarchy)

(29)

998 Sang Il Kim

상속 (Inheritance)

 대학 인사관리 시스템

 class Student : public Person{…}

Person

Employee

Staff Temporary

Faculty

Student

(30)

Visual C++ Programming

(C) 1998 Sang Il Kim

3 0

다중 상속 (Multiple Inheritance)

 다중 상속

 한 클래스가 여러 개의 슈퍼클래스를 가지는 경우  여러 슈퍼 클래스들로부터의 재사용

 class Graduate : public Student , public Faculty{…}

Person

Employee

Staff Temporary

Faculty Student

Graduate Visiting Faculty Temp.Staff UnderGrad

(31)

Visual C++ Programming

(C) 1998 Sang Il Kim

3 1

추상 클래스 (Abstract Class)

 서브 클래스들의 공통된 특성을 추출하여 묘사하기 위한 클래스

 Printer Software

 모든 종류의 프린터가 공통으로 가지는 특성을 추상클래스에 정의

 변수 : 프린터의 상태 , 속도  함수 : print();

 프린트마다 인쇄하는 방법이 다르므로 이 추상 클래스

안에서는 Print 라는 함수를 완전히 구현할 수 없다 .

 실제 구현은 여러 서브클래스에서 각 프린터 종류에

맞게 하면 된다 .

(32)

Visual C++ Programming

(C) 1998 Sang Il Kim

3 2

추상 클래스 (Abstract Class)

 추상 클래스 ‘ Printer’

( 추상클래스 ) Printer

도트 매트릭스

프린터 레이저

프린터 잉크젯

프린터

(33)

998 Sang Il Kim

다형성 (Polymorphism, 다양한 형태 )

 복수의 클래스가 하나의 메시지에 대해 각 클래스가

가지고 있는 고유한 방법으로 응답할 수 있는 능력 .

 별개로 정의된 클래스들이 같은 이름의 함수를 별도로

가지고 있어 하나의 메시지를 각기 다른 방법으로 해석

하여 필요한 함수를 수행할 수 있는 것을 말한다 .

 가상함수 (Virtual Function) 를 사용하여 구현

 Compile time Polymorphism

 함수 , 연산자의 Overloading

 Run time Polymorphism

 가상함수를 이용한 함수의 Overriding

(34)

Visual C++ Programming

(C) 1998 Sang Il Kim

3 4

다형성 (Polymorphism)

 Printer 함수의 다중정의

텍스트 파일 print();

포맷 파일 print();

그래픽 파일 print();

 파생클래스에서의 멤버 접근 권한

private protected public

항상 접근할 수 없다

private 로 상속받으면 private

protected 로 상속받으면 protected

public 로 상속받으면 protected

private 로 상속받으면 private

protected 로 상속받으면 protected

public 로 상속받으면 public

(35)

998 Sang Il Kim

Class Library

 Template ( 템플릿 )

 템플릿은 임의의 데이터 유형에 재사용할 수 있는 범용 코드를 허용함으로써 클래스 계열이 컴파일러에 의해 어떻게 생성되는가를 정의하는 역할을 한다 .  템플릿은 컴파일할 때에 클래스 그룹들을 컴파일러가 어떻게 구성해야 하는 가를 정의하며 , 필요할 때마다 특정 유형을 만드는 데 사용할 수 있는 범용 정의를 컴파일러가 만들도록 한다 .

 템플릿은 여러 개의 데이터 유형에 적용할 수 있는 범용 코드를 작성할 수 있기 때문에 작업을 더 쉽게 수행할 수 있다 .

 STL(Standard Template Library, 표준 템플릿 라이브러리 )

 STL 은 뛰어난 융통성과 훌륭한 성능을 바탕으로 많은 곳에 적용할 수 있는 범용 데이터 구조와 알고리즘을 제공함으로써 완전히 재사용이 가능한

범용 프로그래밍을 가능하게 하고 있다 .

 마이크로소프트 비주얼 C++ 과 볼랜드 C++ 은 자신의 가장 최신 컴파일러

(36)

Visual C++ Programming

(C) 1998 Sang Il Kim

3 6

“If you can dream it, you can do it”

꿈꿀 수 있다면 , 달성이 가능하다

(37)

998 Sang Il Kim

CHAPTER 1

마이크로소프트 윈도우와

Visual C++

(38)

Visual C++ Programming

(C) 1998 Sang Il Kim

3 8

CHAPTER 1

 윈도우 그래픽 디바이스 인터페이스 (GDI)

 장치 독립적인 인터페이스를 제공 .

 사용자는 디바이스 컨텍스트 (device context) 라는 데이터 구조체를 참조하는 GDI 함수를 호출한다 .

 윈도우는 물리적인 장치에 디바이스 컨텍스트 객체를 맵핑하고 , 적합한 입출력 명령을 보낸다 .

 리소스 기반 프로그래밍

 리소스 파일에는 Bitmap, Icon, Menu, Dialog Box, String 등이

포함된다 .

(39)

998 Sang Il Kim

 윈도우에서 제공되는 리소스 데이터  Accelerator

사용자가 빠르게 명령을 호출할 수 있도록 해주는 단축키 .  Bitmap

그래픽 이미지를 이진 파일의 형식으로 변환하여 사용되는 이미지 .  Cursor

스크린 상에서 마우스의 현재 위치를 나타내 주는 3232 Pixel 크기의 비트맵 .

 Dialog Box  Font

 Icon  Menu

 String Table 스트링은 단순한 문자열들의 집합 .

주로 메뉴 , 다이얼로그 박스 , 에러 메시지를 나타내기 위해 사용된다  User-defined Resource 프로그래머가 응용 프로그램에 지원하기

CHAPTER 1

(40)

Visual C++ Programming

(C) 1998 Sang Il Kim

4 0

CHAPTER 1

 프로그램 코드 *.c OR *.cpp

 리소스 데이터 *.rc

 리소스 데이터는 응용 프로그램 안에서 공통적으로 사용되는 정적 데이터들의 집합 .

 리소스 편집기 (App Studio) 를 사용하여 프로그램에 필요한 리소스 데이터를 작성한다 .

 *.rc 리소스 컴파일러 Link *.EXE

 리소스 데이터는 일반적으로 프로그램의 .EXE 파일에 포함되어 있지만 , 보통의 프로그램 데이터 세그먼트에 존재하지 않고 별도의 장소에 보관된다 .  리소스 데이터는 필요로 할 때만 메모리에 적재된다 .

 대부분의 리소스 데이터는 읽기 전용 데이터이다 .

 Visual C++ 의 요소 (Components)  개발시스템

 C 스타일의 Win32 프로그램을 작성하는 방법 .  C++ 과 MFC 를 사용하는 방법 .

(41)

998 Sang Il Kim

Source Code (Sample.cpp)

CompilerC++

Object File (Sample.obj)

Linker Executable

Program (Sample.exe)

CHAPTER 1

(42)

Visual C++ Programming

(C) 1998 Sang Il Kim

4 2

◐ 윈도우 상에서의 실행 파일 생성 과정 ◑

Developer Studio

Linker Compiler

Resource Compiler Source

files Windows header

files

Windows, runtime, and MFC libraries

OBJ files

Runtime header files

Executable (EXE)

Resource file (RES)

Bitmaps, icons, and other resources Resource.h

Resource script file(RC)

MFC header files

Resource compilation Code compilation

CHAPTER 1

(43)

998 Sang Il Kim

CHAPTER 1

 Microsoft Developer Studio97 과 구현과정 Project

 서로 연관되어 있는 파일들의 집합

 이 파일들이 컴파일과 , 링크 과정을 거쳐 실행 가능한 프로그램이나 DLL 로 만들어진다 .

 Make file

 컴파일러 옵션 , 링크 옵션 저장 .  소스 파일간의 상호 연관성을 표현 .  Visual C++ 4.0 : (.mak)

 Visual C++ 5.0 : (.dsp)

 기존의 프로젝트에 대한 작업

 Developer Studio 에서 워크 스페이스 파일 (.dsw) 을 열고난 후

(44)

Visual C++ Programming

(C) 1998 Sang Il Kim

4 4

CHAPTER 1

APS BSC CLW DSP DSW MAK NCB OPT PLG CPP H

파일 ( 확장

자 ) 설명

리소스 뷰 지원

소스 브라우저 정보 파일 클래스 위저드 지원 프로젝트 파일 *

워크 스페이스 파일 * 외부 메이크 파일

클래스 뷰 지원

워크스페이스 환경설정 보유 빌드 로그 파일

소스 파일

헤더 파일

(45)

998 Sang Il Kim

CHAPTER 1

 VC++ 의 CASE(Computer-Aided Software Engineering) 도구

 AppWizard ( 자동 코드 생성기 )

 프로그램의 틀을 자동적으로 생성해 주는 도구  AppStudio (Resource Editor, 리소스 편집기 )  자원 (Resource) 들을 편집하는 도구

 사용자 인터페이스 요소들 ( 메뉴 , 다이얼로그 , 단축키 등 ) 을

시각적으로 디자인할 수 있도록 도와 준다 .

 ClassWizard ( 자동 코드 생성기 )

 AppStudio 에서 시각적으로 디자인된 요소들을 실제 프로그램 코드와 연결시키는 작업을 한다 .

 새로운 클래스를 정의한다 .

(46)

Visual C++ Programming

(C) 1998 Sang Il Kim

4 6

CHAPTER 1

 C/C++ Compiler

 Visual C++ 컴파일러는 C 소스 코드와 C++ 소스 코드의 확장자에 따라 , 프로젝트 파일에 설정된 소스 코드를 어떠한 방식으로 컴파일 할 것인가를 결정하기 때문에 C 구조로 작성된 C 소스 코드와 C++

구조로 작성된 C++ 소스 코드를 모두 컴파일 할 수 있다 .

 Resource Compiler

 RC 파일을 컴파일해서 링커시에 필요한 .res 파일을 생성한다 .  .rc : 텍스트 파일  .res : 이진파일

 Linker

 링커는 컴파일러로 만들어진 .obj 파일과 .res 파일을 읽고 ,

LIB 파일과 결합하고 , DLL 과 연결시켜 EXE 파일을 작성한다 .

(47)

998 Sang Il Kim

CHAPTER 1

 Debugger

 중단점 (BreakPoint) 을 설정하여 해당 부분에 멈추거나 , 한 문장씩 코드를 실행하며 값들을 추적해 볼 수 있다 .

 디버깅하기 위해서는 컴파일러 , 링커 옵션에서 디버깅 정보를 생성 해내도록 설정해야 한다 .

 Debug 모드

프로그램 코드를 생성하고 이것을 실행 파일로 만드는 Build 과정에서 디버깅 정보가 실행 파일에 포함되도록 한다 . 그러나 실행 파일에

디버깅 정보가 포함되기 때문에 실행 파일이 원래보다 크게 생성된다 .  Release 모드

일반적으로 정상적으로 실행될 수 있는 프로그램을 완성하기 전까지는 디버깅을 해야 하므로 Debug 모드에서 빌드 과정을 수행하고 , 완전한

프로그램이 완료되었을때는 Release 모드로 전환하여 실행 파일을 생성한다 .

(48)

Visual C++ Programming

(C) 1998 Sang Il Kim

4 8

CHAPTER 1

 윈도우 진단 도구 (Windows Diagnostic Tools)  Spy++ : 윈도우 메시지를 감시

DevStudio\Vc\bin\Spyxx.exe

 MFC Tracer : 응용 프레임워크 진단 매크로 DevStudio\Vc\bin\Tracer.exe

 Source Browser

 파일 수준이 아닌 클래스나 함수 수준에서 어플리케이션을 분석하거나 편집할 수 있다 .

 Definitions and References ( 정의와 참조 )  Call Graph/Caller Graph ( 함수의 호출관계도 )

 Derived Class Graph/Base Class Graph ( 클래스 계층도 )

 File Outline ( 파일 개요 )

(49)

998 Sang Il Kim

 Online Help

 Developer Studio 97 에는 HTML 에 기초를 둔 도움말 시스템이 내장되어 있다 .

 설명서 방식 : Help - Contents 를 선택하면

Workspace window 가 InfoView 모드로 전환된다 .  Topic 별 방식 : Help - Search 를 선택하면주제와 항목이 표시된다 .  단어별 방식 : Help - Search - Query tab - 단어입력

 F1 이용 : 커서를 원하는 함수 , 클래스 이름으로 이동해서 F1 키를

누른다 .

CHAPTER 1

(50)

Visual C++ Programming

(C) 1998 Sang Il Kim

5 0

CHAPTER 1

 컴포넌트 갤러리 (Component Gallery)

 서로 다른 프로젝트간에 소프트웨어 컴포넌트를 공유할 수 있다 .  ActiveX 컨트롤

Visual C++ 4.0 : OLE Control(OCX)  C++ 소스 모듈

리소스나 소스파일을 추가할 수 있다 .  Developer Studio 컴포넌트

프로젝트에 특정 기능을 추가할 수 있는 툴을 포함하고 있다 .

 Microsoft Foundation Class Library 버전 4.21  어플리케이션 프레임워크를 정의하는 라이브러리 .

 ActiveX Template Library(ATL)

 MFC 와는 분리된 ActiveX 컨트롤을 생성하기 위한 툴 .

(51)

998 Sang Il Kim

MFC (Microsoft Foundation Class)

 Microsoft 가 자체적으로 개발한 윈도우용 C++ 프로그램 라이브러리

C++ Application

MFC

Windows API

윈도우 API 를 캡슐화한 MFC

(52)

Visual C++ Programming

(C) 1998 Sang Il Kim

5 2

MFC (Microsoft Foundation Class)

 장점

 효율성(Efficiency)  안전성 (Safety)

 확장성(Extensibility)

새로운 기능이나 객체 안에 내용의 추가가 쉽도록 만들자는 개념

 재사용성(Reusability)

이미 개발된 코드를 다른 필요한 곳에 부품처럼 재사용이 가능하도록 하여 소프트웨어의 생산성을 향상시킴

 유지보수성(Maintainability)

프로그램에 에러가 발생하거나 새로운 운용 환경에 적응시킬 때, 혹은 시스템의 기능을 개선하고자 하는 등 프로그램에 변경이 가해져야 하는 경우 ,

프로그램을 수정하기 용이한 정도

 이식성(Portability)

서로 다른 기종 간에 호환성이 실현되는 것으로서 그 보다는 좀더 강한 의미 .

프로그램 등의 변동 없이 바로 어느 한 기종에서 다른 기종으로 옮겨서 사용하는 것이 가능한 것 . 어느 한 컴퓨터 환경에서 다른 컴퓨터 환경으로 옮겨 갈 때 변경의 정도가 적을수록 이식성이 높은 것이다 .

(53)

998 Sang Il Kim

MFC

 윈도우와 관련된 클래스

 Window management : 윈도우 관리

 Graphic Device Interface(GDI) : 그래픽 장치 인터페이스  Multiple Document Interface(MDI) : 다중 문서 인터페이스  Menus : 메뉴

 Dialog boxes : 대화상자

 Windows controls : 윈도우 컨트롤

 Windows common dialogs : 윈도우용 일반 다이얼로그

 OLE(Object Linking & Embedding) : 오브젝트 연결과 삽입

 Application services : 어플리케이션 서비스

(54)

Visual C++ Programming

(C) 1998 Sang Il Kim

5 4

MFC

 일반적인 목적의 클래스

Run-Time Type Information : 실행 타입 정보 Object Persistence : 객체 보존성

Collection Classes : 집합체 클래스 Strings : 문자열

Files : 파일

Time and Date : 시간과 날짜

Exception Handling : 예외 처리

(55)

998 Sang Il Kim

MFC

 구조적인 클래스

Commands : 명령 관련 클래스들

Documents and Views : 도큐먼트와 뷰

Printing and Print Preview : 프린트와 프린트 미리 보기

Dialog Data Exchange and Validation(DDX/DDV) :

다이얼로그 데이터 교환 , 확인

Context-Sensitive Help : 도움말

(56)

Visual C++ Programming

(C) 1998 Sang Il Kim

5 6

MFC

 비주얼 클래스

Form View : 형태 뷰 Edit View : 편집 뷰

Scrolling View : 스크롤 뷰 Splitter Window : 분할 뷰

Toolbars and Status bar : 툴 바와 상태 바 Dialog Bar and other Control Bars :

다이얼로그 바와 다른 컨트롤 바

VBX Controls : VBX 컨트롤

(57)

998 Sang Il Kim

MFC

 데이터 베이스 클래스

Database Engine classes : 데이터베이스 엔진 클래스 Record Field Exchange(RFX) : 레코드 필드 교환

Record View : 레코드 뷰

 OLE 클래스

Visual Editing servers : 비주얼 편집 서버

Visual Editing containers : 비주얼 편집 컨테이너 Drag and Drop Structured Storage : 끌어다 놓기 OLE Automation servers : OLE 자동화 서버

OLE Automation clients : OLE 자동화 클라이언트

(58)

Visual C++ Programming

(C) 1998 Sang Il Kim

5 8

MFC

 유저 인터페이스 클래스

Enhanced toolbars : 기능이 추가된 툴 바 Miniframe windows : 미니프레임 윈도우

Tabbed dialogs : 탭 다이얼로그 ( 탭에 의해 포커스 이동 )

 Win32 에 대한 지원

New Win32 APIs : Win32 API 함수들 지원 Multithreading : 멀티 Thread 관련된 클래스 Unicode support : 유니코드 지원

Shared 32-bit DLLs : 공유된 32 비트 DLL

(59)

998 Sang Il Kim

MFC

 MFC 3.1 과 3.2 에서 포함된 내용

 Windows 95 Common Controls : 윈도우 95 컨트롤  Simple MAPI : 단순한 MAPI

 Windows Sockets : 윈도우 소켓

 Swap-tuned DLL versions : 최적화된 DLL 지원

 MFC 4.0 에 포함된 내용

 Containment of OLE Controls : OLE 컨트롤

 DAO(Data Access Objects) : MFC 자체 데이터베이스 엔진  Simplified Windows 95 Common Controls :

간단한 윈도우 95 공통 컨트롤

 Windows 95 Common Dialogs : 윈도우 95 일반 다이얼로그

 Thread synchronization Objects : 스레드 동기화 오브젝트

(60)

Visual C++ Programming

(C) 1998 Sang Il Kim

6 0

CView

◐ MFC 클래스 라이브러리 마인드 맵 (Mind Map) ◑

CObject CCmdTarget

CGdiObject CDC

CScrollView CFormView CRecordView CEditView CWinApp

CDocTemplate CFrameWnd CWnd

CSingleDocTemplate CMultiDocTemplate

CClientDC CWindowDC CPaintDC CMetaFileDC

CPen CBrush CFont CBitmap CPalette CRgn

GetEditControl GetPrinterFont GetSelectedText SetPrinterFont SetTabStops

(61)

998 Sang Il Kim

MFC

 기본 클래스(CObject)

 거의 대부분의 클래스가 이 클래스로부터 파생되었다 .

 기본 클래스는 데이터를 직렬화 (Serialize) 하고 Run-time 클래스 정보를 얻어내거나 Debugging 시에 출력 진단의 역할을 담당한다 .

 윈도우 어플리케이션 구조 클래스

 MFC 에서 중요한 클래스들은 모두 포함되어 있다 .  CWinApp, CWnd, CDocument, CView 등이 있다 .

 윈도우 어플리케이션 프로그램의 뼈대 역할을 하면서 기본적인 기능을 수행한다 .

1. 윈도우 어플리케이션 클래스

 CWinApp : 윈도우 어플리케이션 오브젝트를 생성시키는 기본 클래스 . 어플리케이션 프로그램을 초기화 시키고 , 실행하거나 종료하는

(62)

Visual C++ Programming

(C) 1998 Sang Il Kim

6 2

MFC

 윈도우 어플리케이션 구조 클래스

2. 명령 관련 (Command-Related) 클래스

 CCmdTarget : 윈도우 메시지를 받고 , 응답하는 오브젝트 클래스들의 기본클래스  CCmdUI : 메뉴 또는 컨트롤바와 같은 오브젝트를 업데이트 하는데 쓰인다 .

예) 오브젝트의 상태 변경 (enable/disable, check/uncheck) 3. 도큐먼트와 뷰 클래스

 CDocTemplate : 도큐먼트 템플릿에 대한 기본 클래스  CSingleDocTemplate : SDI 도큐먼트 템플릿

 CMultiDocTemplate : MDI 도큐먼트 템플릿

 CDocument : 어플리케이션이 지정한 도큐먼트의 기본 (Base) 클래스

사용자의 도큐먼트들은 이CDocument 클래스로부터 상속받아 사용한다 .  CView : 도큐먼트 안에 있는 데이터를 뷰를 통하여 화면에 보일 수 있도록 하는 클래스 사용자의 View 들은 이 CView 클래스로부터 상속받아 사용한다 .

 CPrintInfo : 프린트 관련 정보들을 저장하고 다루는 구조체

 CCreateContext : CCreateContext 는 도큐먼트 , 뷰 , 프레임 윈도우 , 도큐먼트 템플릿에 대한 포인터를 지정하고 있는 구조체

(63)

998 Sang Il Kim

MFC

CStatic CComboBox

CObject

CCmdTarget

CMenu

CDC CGdiObject

CDialog

CEdit

CFrameWnd

CControlBar CWnd

CView CClientDC

CWindowDC CPaintDC CMetaFileDC

CPenCBrush CFont CBitmap CPalette CRgn

CFormView CScrollView CEditView

CMDIFrameWnd CMDIChildWnd CToolBar

CStatusBar CDialogBar CFileDialog CColorDialog CFontDialog

CPrintDialog

CFindReplaceDialog

CButton CListBox CSplitterWnd CVBControl

CScrollBar

(64)

Visual C++ Programming

(C) 1998 Sang Il Kim

6 4

MFC

 Visual Objects 관련 클래스 1. CWnd 클래스

 CWnd : 모든 윈도우에 대한 기본 클래스로서 기본적인 SDK 함수들을 MFC 에 맞도록 캡슐화 (Encapsulation) 시켜 놓았다 .

 CFrameWnd : 메인 프레임에 관한 윈도우 클래스

CMDIFrameWnd : MDI 프로그램에서 사용되는 메인 프레임 윈도우 클래스 CMDIChildWnd : MDI 프로그램의 자식 (Child) 윈도우 클래스

2. CView 클래스

 CView : 도큐먼트 안에 있는 데이터를 화면에 출력하는 역할을 하는 클래스  CScrollView : CView 의 기본 특성 외에 화면 스크롤이 가능한 뷰이다 .

 CFormView : 다이얼로그 리소스에 기반 하여 쉽고 빠르게 구현할 수 있는 클래스 다이얼로그 리소스 안에 출력 형태가 정의되어 있다 .

 CEditView : 텍스트 편집 , 단어 검색 , 치환 그리고 스크롤을 자체적으로 해결한 뷰 간단한 텍스트 에디터를 만드는데 편리한 클래스이다 .

(65)

998 Sang Il Kim

MFC

 Visual Objects 관련 클래스 3. 다이얼로그 (Dialog) 클래스

 CDialog : 다이얼로그 클래스들에 대한 기본 (Base) 클래스  모달 (Modal) 다이얼로그

 모드리스 (Modeless) 다이얼로그

MFC 가 제공하는 기본 다이얼로그는 모달 다이얼로그이다 .

 CDataExchange : 다이얼로그 박스에 대한 초기화와 타당성 (validation) 정보를 제공한다 .

 CFileDialog : 파일을 열거나 저장 , 디렉토리 찾아가기 등의 일을 하는 표준 다이얼로그 클래스

 CPrintDialog : 파일을 프린트하거나 프린트 옵션을 지정하는 표준 다이얼로그 클래스

 CFontDialog : 폰트를 선택 , 글자 크기와 속성을 지정하는 표준 다이얼로그 클래스

 CColorDialog : 색상을 선택하기 위한 표준 다이얼로그 클래스

 CFindReplaceDialog : 문자를 검색 , 지정한 문자열로 치환하는 표준 다이얼로그 클래스

(66)

Visual C++ Programming

(C) 1998 Sang Il Kim

6 6

MFC

 Visual Objects 관련 클래스 4. 제어 (Control) 클래스

 CStatic : 윈도우나 다이얼로그 박스의 어느 위치에 고정된 텍스트

 CButton : 다이얼로그 박스에서 흔히 볼 수 있는 체크 박스나 라디오 버튼  CEdit : 편집이 가능한 박스

 CListBox : 여러 아이템을 박스 안에 나열해서 표현 , 한 아이템을 선택하는 것이 가능한 박스

 CComboBox : 에디트 컨트롤과 리스트 박스로 구성된 박스  CControlBar : 제어바에 대한 기본 클래스

 CStatusBar : 윈도우 하단에 있는 상태바에 대한 클래스

 CScrollBar : 윈도우 우측이나 좌측에 있는 스크롤바에 대한 클래스  CToolBar : 윈도우 상단에 위치한 작은 비트맵 버튼들과 관련된 클래스  CDialogBar : 모드리스 다이얼로그 박스에 관련된 클래스

 CVBControl : 비주얼베이직에서 사용되던 VBX 를 제어할 수 있는 클래스  CSplitterWnd : 여러 개의 틀로 나뉘어질 수 있는 윈도우를 제어하는 클래스

(67)

998 Sang Il Kim

MFC

 Visual Objects 관련 클래스 5. 메뉴 (Menu) 클래스

 CMenu : 응용 프로그램에서 메뉴와 팝업 메뉴를 쉽게 구현할 수 있도록 작성된 클래스

6. 디바이스 컨텍스트 (Device-Context) 클래스  CDC : 디바이스 컨텍스트에 대한 기본 클래스

화면 출력과 프린터와 같은 비화면 출력을 다룰 수 있는 함수들이 있다.  CPaintDC : 윈도우의 화면 출력에 사용된다 . 주로 OnPaint() 에 의해 사용된다 . 이 클래스를 생성할 때 자동적으로 BeginPaint 가 실행되고 소멸될 때에 EndPaint 가 실행된다.

 CClientDC : 윈도우의 클라이언트 영역에 화면 출력한다 .  CWindowDC : 전체 윈도우에 대한 화면 출력 클래스 .

클라이언트 영역뿐만 아니라 메인 프레임 영역에도 적용 가능하다 .  CMetaFileDC : 윈도우 메타파일에 대한 클래스

◐ 메타파일 : 그래픽 이미지를 생성해 낼 수 있는 GDI 명령들이 저장된 파일 . 이미지를 BMP 나 PCX 와 같이 통째로 저장하는 것이 아니고 그래픽

(68)

Visual C++ Programming

(C) 1998 Sang Il Kim

6 8

MFC

 Visual Objects 관련 클래스

7. Drawing( 그리기 ) Object 클래스

 CGdiObject : GDI 객체들의 기본 클래스

 CBitmap : 비트맵을 생성하고 , 출력 , 변경시키기 위한 클래스  CBrush : 브러시를 선택하고 속성을 조절할 수 있는 클래스

 CFont : 폰트를 선택하고 속성을 조절할 수 있는 클래스

 CPalette : 출력장치와 응용 프로그램간 팔레트를 조절할 수 있는 클래스  CPen : 펜을 선택하고 속성을 조절할 수 있는 클래스

 CRgn : 다각형 또는 타원을 그릴 수 있도록 조절하는 클래스

(69)

998 Sang Il Kim

MFC

독립 클래스들

CObject

CException

CFile

CByteArray CWordArray CDWordArray CPtrArray CObArray CStringArray CUIntArray CPtrList COblist CStringList

CArchiveException CFileException CMemoryException

CNotSupportedException CResourceException

CUserException

CStdioFile CMemFile CMapPtrToWord

CMapPtrToPtr CMapStringToOb CMapStringToPtr CMapStringToString CMapWordToOb CMapWordToPtr

CArchive CPoint CDumpContext CSize CRuntimeClass CString CMemoryState CTime CRect CTimeSpan

(70)

Visual C++ Programming

(C) 1998 Sang Il Kim

7 0

MFC

 일반 목적 클래스와 독립적 클래스 1. 파일 처리와 관련된 클래스

 CFile : 2 진 파일들에 대한 프로그램 인터페이스를 제공한다 .

 CMemFile : 메모리를 파일처럼 쓸 수 있도록 하는 프로그램 인터페이스 제공  CStdioFile : 일반적인 텍스트 파일을 다룰 수 있는 프로그램 인터페이스 제공  CArchive : CFile 과 같이 사용되어 데이터 객체에 대한 Serialization 을 구현하는데 중요한 인터페이스 제공

2. 진단 (Diagnostics)

 CDumpContext : 메모리의 내용을 통째로 보이도록 하는 클래스

 CMemoryState : 메모리 사용에 대한 체크를 할 수 있도록 하는 클래스  CRuntimeClass : 런타임 시 어떤 객체의 클래스 관련 정보를 정확하게 아는데 사용

(71)

998 Sang Il Kim

MFC

 일반 목적 클래스와 독립적 클래스 3. 예외 처리 (Exceptions)

: 치명적인 에러 발생 시에 컴퓨터가 멈추는 일을 막는다 .  CException : 여러 가지 예외 처리들에 대한 기본 클래스  CArchiveException : 데이터 기록에 대한 예외 처리 클래스  CFileException : 파일에 관련된 예외 처리 클래스

 CMemoryException : 메모리 고장에 관한 예외 처리 클래스

 CNotSupportedException : 지원되지 않는 특성을 호출하였을 때 발생하는 예외처리  CResourceException : 윈도우 리소스를 메모리에 로딩 하는 데 실패할 경우

 CUserException : 사용자가 정의할 수 있는 클래스 . 예외 처리에 들어가기 전에 문제가 무엇인지를 윈도우에게 알려야 한다 .

4. 집합체 (Collections) 관련 클래스  배열 관련 클래스

 CByteArray : BYTE 형태의 원소들을 배열로 저장

 CDWordArray : 더블 워드 형태의 원소들을 배열로 저장

 CObArray : CObject 에서 파생된 클래스 또는 CObject 클래스 그 자체에 대한 포인터를 배열로 저장

 CPtrArray : 함수 (void) 포인터를 배열로 저장  CStringArray : CString 객체를 배열로 저장

참조

관련 문서

두 개의 배기 시스템은 배기 가스를 원활하게 배출함으로써 엔진의 흡입 능을 향상 시키고, 엔진 동력을 더욱 증가 시킨다.. 배기파이프

그러 므로 기관이 공기 중에 진행할 때 연소실로 들어오는 공기를 디퓨저 (diffuser)에 통과시켜 압력으로 바꾸고 여기에 연료를 분사하여 연 소시킨다.. 디퓨저는

 라우팅은 네트워크의 토폴로지와 상태를 고려하여 어느 네트워 크로 보낼 것을 결정하는 과정으로 거리 벡터 라우팅과 링크 상태 라우팅 알고리즘이 사용된다. 

O 점화 케이블이 없이 점화 코일과 점화 플러그가 직접 연결된 장치이다 O 알루미늄 커버 아래에 점화 장치와 두 개의 코일이 있다. O 고전압 케이블이 없고 몰드된

내연기관에서 주로 이용하는 윤활유는 원유에서 제조한 광물성 윤활유이다. 광물성 윤활유는 원유를 온도 차이 에 의해서 분류할 때 중유와 아스팔트 사이에서

안전 벨트를 착용하지 않거나 부정확하게 착용 한 상태에서 에어백이 작동하면 오히려 에 어백 작동에 의해 부상을 입을

좌석 등받이를 과도하게 뒤로 기울이 면, 차량 충돌 또는 급정차 시 승차자가 안 전벨트 아래로 미끄러질 수 있습니다... 다만, 시동이 꺼진 상태에서 너 무 자주

그렇지 않으면 어린이 보조 좌석 에 앉아 있는 어린이가 늘어져 있는 안전벨트를 잡 아당겨 몸에 압박을 당해서 심하게 다치거나 사망할 수 있습니다.. • 어린이