프로그래밍 공부
작성일
2023. 10. 4. 14:19
작성자
WDmil
728x90

윈도우 API

정의

API = 어플리케이션 프로그램 인터페이스

API는 함수가 2000개가 넘을정도로 매우 많은 함수를 사용한다.

마이크로 소프트가 윈도우를 개발할 때 만든 함수는 매우 많다.

그 많은 함수를 사용해서 앱을 개발하는 환경을 만든걸 WinAPI 라고 한다.

 

윈도우에서는 앞에 H가 붙으면 핸들이라는뜻. 무언가를 조종할 수 있다는 의미이다.

 

LP = Long Pointer

LongPointer인데, 숏포인터는 원래 16bit단위에서 사용했으나, 32bit단위로 넘어가면서 굳이 사용할 필요가 없어졌다.

그러나, 예전부터 사용해온 관행으로, WinAPI에서 LP라는 단어를 붙여서 사용하게 된 것이다.

그냥 예전부터 써왔으니까? 라고 생각하면 된다.

별 의미가 없다.

LPRECT같은 부분에서 LP 가 붙은건. 그 RECT의 pointer이라고 생각하면 된다.


WinAPI 의 시작

윈도우 API의 구조도를 크게 나누면 위와같다.

Main()함수,

Proc 함수.

로. 두개의 항목으로 나눌 수 있다.


Main

창 생성

디바이스의  크기를 잡는 역할을 한다.

 

창생성을 짚고 넘어가기전에, 먼저. Class와 Object, Instance를 확인해야한다.

Class Object Instance
실체는 없는단계. 정의만 하는단계 실체화 하는데, 이름만 만들어두는 단계 메모리가 할당 단계. 구성까지 하는단계
int CreatePen(); {}  { auto* pen; auto* pen = new int(10); return pen }

모든 객체는 InitInstance 까지 해야. 실질적으로 사용할 수 있다.

먼저 define으로 객체를 정의해주어야 한다.
윈도우 창의 사이즈를, RECT로 정의한뒤 사용한다.

RECT로 rc를 정의한뒤, 해당 사이즈를 hWnd에 삽입하여, 윈도우 창의 크를 잡아주면된다.

 

 

메시지 생성

컴퓨터는 매우 많은 메세지를 생성하게 된다.

그러나 동시에 처리할 수 없기 때문에, 큐에 전부 하나하나 넣어서 FIFO 형태로 처리하게 된다.

그러나, 이럴경우에는, 메세지가 없어도, 해당 큐를 탐색하게되고. 프레임이 이유없이 낭비되는 경우가 생길 수 있다.

그럼으로 게임 프로그래밍에서는 다음과 같은 메시지 루프를 사용한다.

게임프로그래밍에서는 메세지 처리가. 프레임마다 게임이 처리되게 된다.


proc

메세지를 처리한다.

main의 메세지 셍성에서 proc으로 메세지를 보내서 처리하게 한다.

메시지 루프에서 메시지가 들어왔을때 PeekMessage를 통해 proc에서 데이터를 처리한다.

위 Class에서 WndProc이 무엇인지 확인하고 연결해준다.
연결된 Proc은 위와같다.

윈도우 프로시저가 해당 메시지를 확인하고. 메시지 대로 데이터를 처리하게 된다.

 

    HWND hWnd : 메세지를 받을 윈도우의 핸들
    UINT iMessage : 어떤 메세지를 받았는지?
    WPARAM wParam : 메세지에 따른 부가 정보
    LPARAM lParam  : 메세지에 따른 부가 정보

 

WINAPI에서 게임프로그래밍을 할때 처리해야할 부분은 위 두가지, 루프문 정렬, 화면처리 이다.


DX 기본작업

CPU와 GPU의 정보를 전달해야한다.

 

백버퍼를 생성한다.

화면이 깜빡깜빡하는걸 방지하기 위해 생성한다.

전면버퍼와 후면버퍼가 나뉘어서 생성되며 화면에 띄워준다.

체인처럼 보여서 스왑체인 이라고 한다.

 

728x90