Win32API

Win32 API 1강

111-000-111 2021. 7. 17. 15:16

- 프로그램 형식의 변화
기존의 main()에서
WinMain() : 응용 프로그램 윈도우 생성
WndProc() : 메시지 처리

로 바뀜

 

 

 

- 윈도우 데이터형 : 데이터형을 아는 것은 사용할 메모리를 아는 것
기존 C, C++ 데이터 형 그대로 가져가지만 윈도우 데이터형이 대거 추가됨.
MSDN을 활용할 것(검색어 : Windows Data Types)
내부적으로는 C, C++의 데이터 형이 사용되지만, 이를 윈도우 스타일로 재정의하여 사용

 

BYTE : typedef unsigned char BYTE;
BOOL : typedef int BOOL; (TRUE=1, FALSE=0)
CHAR : typedef char CHAR;
COLORREF : typedef DWORD COLORREF; (RGB 값을 저장하기 위한 데이터형)
DWORD : typedef unsigned long DWORD;
PVOID : typedef void * PVOID; (보이드형 메모리 주소를 저장하는)
핸들과 관련된 것은 void 포인터로 정의되어있음.
HANDLE : typedef PVOID HANDLE; 
HDC : typedef HANDLE HDC;
HGDIOBJ : typedef HANDLE HGDIOBJ;
HINSTANCE : typedef HANDLE HWND;
LP로 시작하면 포인터형
LPVOID : typedef void * LPVOID;
LPWORD : typedef WORD *LPWORD; (WORD에 대한 포인터 변수)
LPSTR : typedef CHAR *LPSTR;
LPWSTR : typedef WCHAR *LPWSTR;
LPTSTR : #ifdef UNICODE
                typedef LPWSTR LPTSTR;
           #else
               typedef LPSTR LPTSTR;
           #endif
TCHAR : #ifdef UNICODE
               typedef WCHAR TCHAR;
           #else
               typedef char TCHAR;
           #endif
UINT : typedef unsigned int UINT;
VOID : #define VOID void
WINAPI : #define WINAPI __stdcall
WORD : typedef unsigned short WORD; 0 ~ 65535
WPARAM : typedef UINT_PTR WPARAM;
UINT_PTR : #if defined(_WIN64)
                    typedef unsigned __int64 UINT_PTR;
               #else
                   typedef unsigned int UINT_PTR;
LPARAM : typedef LONG_PTR LPARAM;
LONG_PTR : #if defined(_WIN64)
                    typedef __int64 LONG_PTR;
                #else
                    typedef long LONG_PTR;
                #endif

 

 

 

- 인스턴스와 핸들 (☆☆☆☆☆)
운영체제는 멀티태스킹 운영체제이다.
운영체제가 응용 프로그램을 실행하거나 구분하기 위하여 인스턴스와 핸들을 사용한다.
인스턴스와 핸들은 4바이트의 양의 정수값이다.


* 인스턴스
인스턴스는 응용 프로그램의 아이디이다.
같은 종류의 프로그램은 같은 인스턴스를 가진다.


* 핸들
운영체제에서 할당한 자원의 아이디이다. (자원 : 윈도우, 펜, 브러쉬 등)
동종의 응용 프로그램이라 할지라도 각각의 윈도우 자원은 다르기 때문에 핸들 값은 다르다.


* 인스턴스와 핸들의 공통점
운영체제에서 할당하는 값이다.
중복되지 않는 값이다. -> 아이디의 속성과 유사하다.


* 윈도우 프로그래밍을 할 때 가장 중요한 요소는 핸들이다.
HWND, HDC, HPEN, HBRUSH 등 H로 시작하는 자료형들이 핸들에 해당된다.(이들은 결국 void*에 해당된다.)

 

 

 

- 헝가리언 표기법
변수명 또는 함수명의 명명 규칙이다. 관례적으로 사용되고, 변수명만으로도 파악이 용이하다.


* 사용 방법
의미 있는 단어를 연결하되 첫 문자는 대문자로 한다. (ex. Person + Count = PersonCount)
데이터형을 의미하는 접두사를 붙임 (ex. fCount, nNumber) 접두사는 소문자로 한다.


* 변수명에 붙이는 접두사

데이터형                접두사                  예                    비고

BOOL, bool             b                        bVariable

char                      ch, c                    cVariable           주로 c를 사용

int, short                i, n                      nVariable           주로 n을 사용

long                      l                         lVariable

float                      f                         fVariable

double                  d                         dVariable

배열                      a                        aVariable[10]

DWORD                dw                       dwVariable

문자열                  sz,s,str                   szVariable         주로 str 사용

포인터                  p                         pVariable

핸들                     h                         hVariable

전역변수               g_                        g_nVariable       전역변수임을 g_로 표현, 정수형이므로 뒤에 n을 붙인 예

윈도우 메시지        msg                      msgMessage