1. Win32 API 프로그래밍 개요
- Win32 API 프로그래밍이란?
윈도우 운영체제가 제공하는 함수를 이용한 C 언어 기반의 프로그래밍이다.
-프로그래밍 방식의 변화
윈도우 운영체제 이전
: 프로그래밍이 운영체제를 제어, 모든 프로그래밍을 프로그래머가 전담했다
키보드, 마우스 등을 직접 프로그래밍했다.
윈도우 운영체제 이후
: 키보드, 마우스 등이 운영체제에 드라이버의 형태로 모두 들어갔다,
운영체제가 응용 프로그램에 메시지를 보내줌으로써 모든 정보를 얻는다.
2. 프로그래밍 구조 비교
-프로그래밍 형식의 변화
C: main()
=> WinMain() : 응용 프로그램 윈도우 생성
=> WinProc() : 메시지 처리
3. 윈도우 데이터형
윈도우의 데이터형은 아주 많다(MSDN에 검색하여 알 수 있다)
하지만 모든 데이터형을 외울 필요가 없고 자주 쓰이는 것들만 이번에 알아가보자.
윈도우의 데이터형은 기존 C의 데이터형을 윈도우 스타일로 재정의한 것이다.
데이터형 | 정의 |
BYTE | typedef unsigned char BYTE; |
BOOL | typedef int BOOL; |
CHAR | typedef char CHAR; |
COLORREF(색상을 저장하기 위한 데이터형) | typedef DWORD COLORREF |
DWORD | typedef unsigned long DWORD |
데이터형 | 정의 |
PVOID | typedef void* PVOID; |
HANDLE | typedef PVOID HANDLE; |
HDC | typedef HANDLE HDC; |
HGDIOBJ | typedef HANDLE HGDIOBJ; |
HINSTANCE | typedef HANDLE HINSTANCE; |
HWND | typedef HANDLE HWND |
LPVOID | typedef void* LPVOID: |
LPWORD | typedef WORD* LPWORD; |
데이터형 | 정의 |
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; |
데이터형 | 정의 |
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) //64비트 운영체제 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. 인스턴스와 핸들
운영체제는 멀티 태스킹 운영체제이다.
같은 메모장에 다른 데이터가 들어가 있다.
이 응용 프로그램들을 운영체제는 어떻게 다루고 구분하는가?
=> 인스턴스(Instance)와 핸들(Handle)
-인스턴스와 핸들의 실체?
HINSTANCE, HWND => HANDLE이고
HANDLE => PVOID,
PVOID => void* : 4 바이트의 양의 정수값
#인스턴스란 무엇인가?
-응용프로그램의 아이디(절대 중복되지 않는다.)
-같은 종류의 프로그램은 같은 인스턴스를 가진다.
ex) 메모장의 인스턴스가 14745600이라면
메모장 창이 여러 개 켜져 있을 때 그것들의 인스턴스는 모두 14745600이다.
#핸들이란 무엇인가?
-운영체제에서 할당한 자원의 아이디
-같은 종류의 응용 프로그램이라 할지라도
창마다 다른 핸들을 가진다.
#공통점
1) 운영체제에서 할당하는 값
2) 중복되지 않는 값 => 아이디의 속성
#윈도우 프로그래밍에서 가장 중요한 핸들
앞에 H가 붙는 데이터형은 전부 핸들이다.
HWND, HDC, HPEN, HBRUSH 등 => void*
5. 헝가리안 표기법
#헝가리안 표기법이란 무엇인가?
변수, 함수명의 명명 규칙이다.
변수명만으로 용도 파악이 용이
#규칙
1)의미 있는 단어를 연결하고 첫 문자는 대문자로 사용한다
2)데이터형을 의미하는 접두사를 붙인다 ex) fCount, nNumber(i'n't)
데이터형 | 접두사 |
BOOL, bool | b |
char | ch, c |
int, short | i, n |
long | l |
float | f |
double | d |
배열 | a |
DWORD | dw |
문자열 | sz, s, str |
포인터 | p |
핸들 | h |
전역변수 | g_ ex) g_nVariable |
윈도우 메시지 | msg |
위의 모든 내용은
유튜브 아워즈팜X나우캠퍼스, "Win32 API 1강. Win32 API 프로그래밍 구조",
https://www.youtube.com/watch?v=OQ09ZSxUIgs&list=PLOKPEzlY4JKTFx1udqQRdYb1ydob9V5u3&index=4, (2023.04.17)을 참고했다.
'Win32 API' 카테고리의 다른 글
Win32 API 프로그래밍 구조 (0) | 2023.04.18 |
---|