● API란?
Application Programming Interface의 약저이며 우리말로 풀어본다면 운영체제가 응용 프로그램을 위해 제공하는 함수의 집합이라고 정의할 수 있다.
● 특징 & 장점
1. 그래픽 기반(GUI)의 운영체제이다.
2. 멀티 태스킹이 가능하다 (GetMessage 덕분)
3. 메시지 구동 시스템이다 (이벤트 드리븐)
4. 장치에 독립적이다.
5. 일관성이 있다
6. 리소스가 분리되어 있다. (코드를 제외한 모든것이 리소스이다.)
● 여러가지 개발 방법
1. SDK (software Development Kit)
윈도우즈를 만든 마이크로소프트사에서 제공하는 윈도우즈용 프로그램 개발 킷이다. 운영체제가 제공하는 함수(API 함수)들을 사용하여 프로
그램을 작성하며 가장 원론적이고 가장 먼저 발표된 개발 방법이다 운영체제가 직접 제공하는 함수를 사용하므로 섬세한 처리를 할 수 있으며
아주 막강한 기능의 프로그램을 작성할 수 있을 뿐만 아니라 프로그램의 속도 나 크기에도 아주 유리하다.
2. 클래스 라이브러리
복잡하고 양이 많은 API 함수들을 좀 더 쉽고 빠르게 사용하기 위해 클래스로 잘 포장하여 객체위주로 프로그램을 작성하는 방법이다. 윈도우즈
프로그래밍에 필요한 클래스들을 미리 작성해 놓고 객체를 조립 하여 프로그램을 만들어 나간다. 클래스가 워낙 잘 설계되어 있기 때문에 사용하
기 무척 쉬울 뿐만 아니라 기능 또한 아주 막강하다. 윈도우즈용 클래스 라이브러리에는 마이크로소프트사의 MFC와 볼랜드사의 OWL이 대표적
이다 MFC는 비 주얼 C뷰에 포함되어 있으며 OWL은 볼랜드 C뷰 에 포함되어 있다. 현재는 MFC를 더 많이 사용하며 OWL은 거의 사용되지 않
는다.
3. 비주얼 툴
비 주얼 툴은 손으로 일일이 코드를 작성하지 않고 마우스로 마치 그림을 그리듯 화면을 디자인하며 꼭 필요한 곳에만 간단한 코드를 작성하는 아주 진보된 개발툴이다. 그래서 배우기도 쉽고 사용하기도 쉬울뿐만 아니라 기능도 타 개발방법에 비해 심하게 떨어지지 않는다 현재까지 발표된 비주얼 개발툴에는 비 주얼 베이직과 델파이 정도가 있으며 데이터 베이 스 전용의 몇몇 툴이 있다.
● API를 알아야 하는 이유
1. 운영체제를 이해하기 위해
2. 어차피 알아야 하므로
3. 자유를 얻기 위해
4. 가장 자연스러운 학습과정이므로
● 변수 명명법
cb count of bytes 바이트 수
dw double word 부호없는 long형 정수
h handle 윈도우,비트맵,파일 등의 핸들
sz Null Terminated NULL 종료 문자열
ch Character 문자형
a Array 배열
w word 부호없는 정수
i Integer 정수형
p,lp long Pointer 포인터형
b Bool 논리형
이를 헝가리식 명명법.
● 사용자 정의 데이터형
BYTE unsigned char형
CHAR char 형
WORD unsigned short형
DWORD unsigned long형
LONG long과 동일하다
BOOL 정수형이며, TRUE, FALSE중 한값을 가진다.
● 핸들에 대한 이해
핸들(handle)이란 구체적인 어떤 대상에 붙여진 번호이며 문법적으로는 32비트(또는 64비트)의 정수 값이다. 윈도우즈에서는 여러 가
지 종류의 핸들이 사용되고 있다 만들어진 윈도우에는 윈도우 핸들(hWnd)을 붙여 번호로 관리하며 아직은 잘 모르겠지만 DC 에 대해서도 핸들을 사용하고 논리적 펜‘ 브러시에도 핸들을 붙여 관리한다.
- 왜이렇게 핸들을 자주 사용하는가?
대상끼리 구분을 위해서는 문자열 보다 정수를 사용하는 것이 속도가 훨씬 더 빠르고 간편하기 때문이다.
- 핸들의 특징
1. 핸들은 일단 정수값이며 대부분의 경우 32비트값이다 핸들을 사용하는 목적은 오로지 구분을 위한 것이므로 핸들끼리 중복되지 않아야 하며
이런 목적으로는 정수형이 가장 적합하다. 정수형은 비교나 대입 연산이 가장 빠른 타입이므로 핸들로 쓰기 에 적합하다.
2. 핸들은 운영체제가 발급하며 사용자는 쓰기만 한다. 예를 들어 윈도우를 만들거나 파일을 열면 운영체제는 만들어진 윈도우나 열려진 파일에
핸들을 붙이고 그 값을 리턴한다. 사용자는 이 핸들을 잘 보관해 두었다가 해당 윈도우나 파일을 다시 참조할 때 사용한다. 사용자가 직접 핸들
을만드는경우는 없다.
3. 같은 종류의 핸들끼리는 절대로 중복된 값을 가지지 않는다. 만약 이렇게 된다면 대상을 구분하는 본래의 목적을 달성할 수 없을 것이다. 물론
다른 종류의 핸들끼리는 중복된 값을 가질 수도있다.
4. 핸들은 정수형이므로 값을 가지겠지만 그 실제값이 무엇인지는 올라도 상관없다. 핸들은 크고 작음의 성질을 가지는 숫자가 아니라 단순한 표
식일 뿐이다. 핸들형 변수를 만들어 핸들을 대입받아 쓰고 난 후에는 버리면 된다. 마치 malloc한 포인터의 실제 위치가 어디인가 신경쓸 필요
없이 사용하다가 free로 해제하면 그만인 것과 같다.
윈도우즈에서 핸들은 예외없이 접두어 H로 시작되며 핸들값을 저장하기 위해 별도의 데이터형까지 정의해 두고 있다. HWND, HPEN, HBRUSH, HDC 등이 핸들을 담기 위한 데이터형들이며 모두 부호없는 정수 이다.
● 비트 OR 연산자
윈도우즈 API 함수들도 마찬가지로 작업에 대한 세부 정보(옵션)를 인수로 전달받는다, 그런 데 전달 가능한 옵션이 여러 개 있을 경우 필요한 옵션수만큼 인수를 전달받는 것이 아니라 하나의 인수에 복수 개의 옵션을 묶어 전달하는데 이 때 사용되는 연산자가 비트 OR연산자(|)이다.
비 트 OR 연산자를 사용하면 관심없는 인수는 생략해 버 릴 수 있고 OR 연산은 교환 법칙이 성립하므로 값의 순서에 무관하며 여러 가지 옵션을 묶어서 전달하므로 호출 속도도 빠르다.
● 유니코드
유니코드는 16비 트의 단일한 값으로 지구상의 모든 문자를 표현할 수 있는 문자 코드 체계이다.
유니코드를 지원하려변 문자형이나 문자열 에 대해 C언어의 타입을 바로 쓰지 말고 유니코드 설정 에 따라 변경되는 중간 타입 을 사용해야 한
다.C 언어에 익숙한 사람들은 앞으로 문자나 문자열을 표현할 때 다음 타입 들을 쓰도록 하자
char TCHAR
char* LPSTR
const char * LPCTSTR
TCHAR는 C의 기본 타입 중 하나인 char와 일단 같지만 유니코드로 컴파일 할 때 는 wchar_t 타입
이 된다 wchar_t는 실제로는 unsigned short로 정의되어 있으며 부호없는 16비 트 정수형이다.
- 문자열을 다루는 함수
strlen lstrlen
strcpy lstrcpy
strcat lstrcat
strcmp lstrcmp
sprintf wsprintf
strlen은 char 타업의 문자열 길이만 조사하지만 lstrlen은 TCHAR 타입의 문자열에 대해서도 동작하므로 이식에 훨씬 더 유리하다 문자열 상수도 타엽이 있으므로 겹 따옴표안에 바로 문자열 상수를쓰지 말고 TEXT 매크로로 둘러싸는 것 이 좋다.
TCHAR *str="string";// 이렇게 쓰지 말고
TCHAR *str=TEXT("string"); // TEXT매크로 안에 문자열 상수를 쓴다
TEXT 매크로는 유니코드 설정에 따라 문자열 상수의 타입을 변경한다. 유니코드로 컴파일할 때는 각 문자가 16비트의 유니코드 문자가 되며 그렇지 않을 때는 8비트의 안시 (ANSI) 문자가 된다