API 특징 및 장점
1. 그래픽 기반(GUI)의 운영체제
2. 멀티 태스킹이 가능
3. 메시지 구동 시스템
4. 장치에 독립적
5. 일관성
6. 리소스와의 분리
변수 명명법
윈도우즈 프로그래밍에서는 변수에 이름을 붙이는 방법이 도스와는 많이 다름.
윈도우즈에서는 워낙 많은 변수가 사용되므로 대체로 변수 이름을 길게 쓰며 되도록 가독성이 좋게 하기 위해 대문자와 소문자를 적당히 혼합하여 사용함.
윈도우 프로그래밍에서 주로 사용되는 접두어
접두어 |
원래말 |
의미 |
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)을 붙여 번호로 관리함
문자열보다 정수를 사용하는 이유는 처리 속도가 훨씬 더 빠르고 간편하기 때문
핸들의 특징
1. 핸들은 일단 정수값이며 대부분의 경우 32비트 값임
2. 핸들은 운영체제가 발급하며 사용자는 쓰기만 함
3. 같은 종류의 핸들끼리는 절대로 중복된 값을 가지지 않음
4. 핸들은 정수형이므로 값을 가지겠지만 그 실제값이 무엇인지는 몰라도 상관없음
윈도우즈에서 핸들은 예외없이 접두어 H로 시작되며 핸들값을 저장하기 위해 별도의 데이터형까지 정의해 두고 있음 (ex: HWND, HPEN, HBRUSH, HDC 등)
비트 OR 연산자
윈도우 프로그래밍에서는 함수 파라미터로 옵션을 지정해서 넣어주는데, 이 때 여러가지 옵션을 적용하고 싶은 경우는 "Function(op_A, op_B, op_C, op_D, ...) 이런식으로 표현해 볼 수 있음. 하지만 옵션이 많은 경우나 안쓰는 경우데도 모두 파라미터 자리를 채워줘야하는 불편함이 있음. 그래서 윈도우 프로그래밍에서는 주로 OR연산자를 이용하여 비트별로 시스템 내부에서 옵션을 받아들임.
=> Function( op_A | op_B | op_C | op_D | ... )
유니코드
유니코드는 16비트의 단일한 값으로 지구상의 모든 문자를 표현할 수 있는 문자 코드 체계
유니코드를 지원하려면 문자형이나 문자열에 대해 C언어의 타입을 바로 쓰지 말고 유니코드 설정에 따라 변경되는 중간 타입을 사용해야 함
C 타입 |
유니코드 타입 |
char |
TCHAR |
char* |
LPSTR |
const char* |
LPCTSTR |
실제로 TCHAR의 경우 wchar_t 타입으로 정의되어 있으며 wchar_t는 unsigned short형으로 또 정의가 되어 있음. 즉, TCHAR는 부호없는 16비트 정수형
64비트 API
64비트에서 달라지는 가장 큰 차이점은 주소 공간이 확대됨으로 해서 포인터의 크기가 64비트로 확장되었다는 점이 있음. 포인터 타입외에 int나 long은 여전히 32비트를 유지하는데 이런 정수 타입까지 64비트로 확장하면 낭비가 너무 심하기 때문.
64비트 개발 환경은 이식의 편의를 위해 여러 가지 중간 타입을 제공하는데 고정 타입보다는 가급적이면 중간 타입을 사용하는 것이 유리.
고정되어있는 타입들
길이 |
부호있음 |
부호없음 |
32비트 |
INT32, LONG32 |
UINT32, ULONG32, DWORD32 |
64비트 |
INT64, LONG64 |
UINT64, ULONG64, DWORD64 |
컴파일 되는 환경에 따라 바뀌는 타입
INT_PTR, LONG_PTR, UNIT_PTR, ULONG_PTR, DWORD_PTR 등 뒤에 _PTR이 붙은 타입은 운영체제의 비트수에 따라 크기가 가변적이며 포인터와 같은 길이를 가짐