1.2 자료 형식
Win32 API에서는 다양한 시스템 형식을 제공하고 있습니다. 여러분이 C언어나 C++언어와 Win32 API를 이용한다면 프로그래밍 언어에서 제공하는 형식과 Win32 API에서 제공하는 형식을 모두 사용할 수 있습니다. 그리고 이들 형식 사이에는 공통적인 부분이 있어 상호 호환성을 제공하는 형식들이 있습니다.
C언어나 C++언어로 Win32 API를 사용할 때 포함해야 할 여러가지 헤더파일이 있는데 개발 편의를 위해 기본적인 Win32 API를 이용할 때 windows.h 파일만 포함해서 사용할 수 있게 여러 헤더 파일을 windows.h 파일에 포함하고 있습니다. 그리고 windows.h 파일에 포함하는 헤더 파일 중에 대부분의 형식은 windef.h 파일에 정의하고 있습니다.
다음은 windef.h 파일에서 일부 형식을 정의하고 있는 구문을 발췌(일부 수정)한 것입니다.
#define CONST const
typedef unsigned char BYTE;
typedef BYTE * LPBYTE;
typedef unsigned short WORD;
typedef unsigned short USHORT;
typedef WORD * LPWORD;
typedef int INT;
typedef int * LPINT;
typedef unsigned int UINT;
typedef unsigned long ULONG;
typedef long * LPLONG;
typedef unsigned long DWORD;
typedef DWORD * LPDWORD;
typedef void * LPVOID;
typedef CONST void * LPCVOID;
typedef int BOOL;
typedef BOOL * LPBOOL;
typedef float FLOAT;
typedef UINT_PTR WPARAM;
typedef LONG_PTR LPARAM;
typedef LONG_PTR LRESULT;
#define FALSE 0
#define TRUE 1
대부분의 형식은 C언어의 형식 이름을 대문자로 표기한 것과 같습니다. 그리고 포인터 형식은 LP가 붙고 상수형에는 C가 붙는 규칙성을 확인할 수 있습니다. BOOL 형식은 C++언어의 bool 형식이 아닌 int 형식이므로 주의하시기 바랍니다.
이 외에도 간단한 여러가지 자료형을 제공하고 있습니다. 이들 중 자주 사용하는 형식은 다음과 같아요.
typedef struct tagRECT
{
LONG left;
LONG top;
LONG right;
LONG bottom;
} RECT, *PRECT, NEAR *NPRECT, FAR *LPRECT;
typedef struct tagPOINT
{
LONG x;
LONG y;
} POINT, *PPOINT, NEAR *NPPOINT, FAR *LPPOINT;
typedef struct tagSIZE
{
LONG cx;
LONG cy;
} SIZE, *PSIZE, *LPSIZE;
그리고 색상을 표현하는 COLORREF 형식을 제공하고 있으며 값을 설정할 때 RGB 매크로를 이용합니다.
typedef DWORD COLORREF;
#define RGB(r,g,b) ((COLORREF)(((BYTE)(r)|((WORD)((BYTE)(g))<<8))|(((DWORD)(BYTE)(b))<<16)))
특히 Win32 API에서는 응용 프로그램에서 Win32 API 개체를 사용하길 원할 때 실제 개체를 반환하지 않고 해당 개체를 제어하여 사용할 수 있는 핸들을 사용할 수 있게 하고 있습니다. Win32 API에서 제공하는 개체를 사용하는 핸들 형식은 H로 시작하며 종류에 따라 핸들 형식명이 다릅니다.
typedef void * HANDLE; (winnt.h 파일에 정의)
#define DECLARE_HANDLE(name) struct name##__{int unused;}; typedef struct name##__ *name
DECLARE_HANDLE (HWND);
DECLARE_HANDLE (HDC);
HANDLE은 파일 개체, 프로세스 개체 등 많은 Win32 API 개체를 제어할 때 사용하는 형식이며 HWND는 윈도우 개체를 제어할 때 HDC는 그리기 작업에 필요한 정보 개체인 DC(Device Context)를 설정하고 그리기 작업을 할 때 사용합니다. 이 외에도 제어할 개체의 종류에 따라 다양한 핸들 형식을 정의하고 있는데 보시는 것처럼 실제 개체 형식이 무엇인지는 알 수 없게 정의하였습니다. 윈도우즈 응용 프로그래밍에서 개발자는 이러한 핸들을 어떻게 사용하는지만 신경쓰지 실제 개체를 위해 어떠한 내부 자료를 사용하는지 알 필요는 없습니다.
'프로그래밍 기술 > Windows API' 카테고리의 다른 글
2.2 그리기 예 [Windows API] (0) | 2016.04.07 |
---|---|
2.1 WM_PAINT 메시지 [Windows API] (2) | 2016.04.07 |
2. 기본 그리기 [Windows API] (0) | 2016.04.07 |
1.4 윈도우 클래스 등록 및 윈도우 개체 생성 [Windows API] (0) | 2016.04.06 |
1.3 첫 번째 윈도우즈 프로그램 만들기 [Windows API] (0) | 2016.04.06 |
1.1 Windows 커널의 핵심 모듈 [Windows API] (0) | 2016.04.06 |
1. Windows API 소개 (0) | 2016.04.06 |