MFC에서 사용되는 윈도우 데이터 형에 대해서 알아 보겠습니다.
안녕하세요. 애드소프트 입니다.
이전 포스팅을 해보셨다면 약간 생소한 데이터 형을 많이 보셨을 것입니다.
LPCTSTR, LPTSTR와 같이 비슷하지만 다른 데이터형들이 많이 존재하는데 이렇게 나눠진 이유가 있습니다.
눈으로 봐서는 어떤 데이터형인지 잘 알 수 없는 형들이 존재합니다.
#ifdef UNICODE
typedef LPCWSTR LPCTSTR;
#else
typedef LPCSTR LPCTSTR;
#endif
선언을 따라가 보면 LPCWSTR 이나 LPCSTR을 애칭을 만들어 주는것을 볼 수 있습니다.
이는 MBCS(멀티 바이트 문자 집합)이라고 하여 DBCS(더블 바이트 문자 집합)라고도 합니다. 이는 1또는 2바이트로 구성되며, 2바이트 보다 큰 문자 집합은 지원되지 않습니다.
현재 Windows는 유니코드를 표준으로 사용되고 있습니다.
유니코드는 16비트문자 인코딩입니다. 모든 언어에 대해 충분 한 인코딩을 제공 합니다. 모든 ASCII 문자는 유니코드에 확장 문자로 포함됩니다.
본론으로 돌아가서 LPCWSTR와 LPCSTR의 차이는 유니코드와 멀티바이트의 차이로 볼 수 있습니다.
LPCWSTR을 따라가보면 다음과 같이 선언되어 있습니다.
typedef const wchar_t* LPCWSTR;
LPCSTR을 따라가보면 다음과 같이 선언되어 있습니다.
typedef const char* LPCSTR;
위와 같이 같은 LPCTSTR 이라도 MBCS를 호환으로 생성했냐에 따라 유니코드 또는 멀티바이트로 동적으로 선언되어 사용됩니다. 두가지는 혼용될 수 없습니다만 Convert 함수를 통해 변환 사용은 가능합니다.
MFC에서 많이 사용되는 데이터 형에 대해 알아보겠습니다.
BOOL - Boolean 값을 나타내는 정수 값습니다. 0 또는 1 값을 사용하지만 선언은 int 형으로 선언됩니다.
BSTR - 32비트 character 마지막에 NULL로 끝나는 포인터 값을 의미합니다.
BYTE - 부호없는 8비트 값을 의미 합니다. 네트워크 프로토콜의 단일 octet에 해당하는 8비트 부호없는 값입니다.
LONG - 부호없는 32비트 정수값입니다.
DWORD - 부호없는 32비트 정수이며, MFC에서 상당히 많이 사용하는 데이터형 입니다.
LPARAM - 윈도우 프로시져에서 사용되는 데이터형 중 하나입니다.
WPARAM - LPARAM과 동일합니다.
LPVOID - 32비트 void 포인터입니다.
LRESULT - 윈도우 프로시져나 볼백 할수가 리턴하는 32비트 값입니다.
UINT - 부호없는 32비트 int형입니다.
WNDPROC - 윈도우 프로시저 함수를 포인트하는 32비트 포인트 값입니다.
WORD - 16비트 unsigned int 값입니다.
POSITION - MFC에서 위치를 나타낼때 쓰는 포인터 값입니다.
LPCRECT - RECT 구조체의 포인트 값입니다.
다음 정도의 데이터 형들이 MFC에서 많이 사용됩니다.
다른 데이터형도 많이 쓰이지만 윈도우에 있는 데이터형만 추려보았습니다.
포스팅을 이만 마치도록 하겠습니다.
감사합니다.