WINDOWS

WIN API (1)

게임 개발 2023. 2. 13. 19:08

WIN API

 

int APIENTRY wWinMain(_In_    HINSTANCE hInstance,
                     _In_opt_ HINSTANCE hPrevInstance,
                     _In_     LPWSTR    lpCmdLine,
                     _In_     int       nCmdShow)
{
    MyRegisterClass(hInstance);

 

WIN API에서 _IN_ 은 필수적으로 필요로 하는 매개변수로,

_IN_은 우리가 수정할 수 없는 매개변수로 0값을 절대적으로 들어오지 못하게 만든다.

만약 0값이 들어오게 되면 프로그램은 폭파된다.

 

hlnstance = 게임의 주소값이 들어가는 자리이다.

nCmdShow = 작업 관리자나 아래에는 창이 들어와있지만 보여주지 않을 것이냐 보여줄 것이냐

하는 역할을 담당한다.

 

MyRegisterClass(hlnstance);

창을 만들기 위해서 클래스를 등록한다는 뜻이다.

 

 MSG msg;
    /*
    typedef struct tagMSG {
    HWND        hwnd;
    UINT        message;
    WPARAM      wParam; -> 키보드 인식
    LPARAM      lParam; -> 마우스 인식
    DWORD       time; -> 언제 들어왔는지
    POINT       pt; -> 사용 안하니까 몰라도 괜찮다
    */

WM_KEYDOWN; -> 실제로 누르면 이런 메시지가 들어온다는 것을 받아들이는 구문

키보드가 입력을 받았다는 것만 알지 A키를 누른 것인지 B키를 누른건지 모르는데

이를 인식시켜 주는 것이 wParam 이다.

위의 태그가 그 좌표를 알려준다.

마우스 역시 이동하여 좌표값을 인식시켜 주는 것이 있는데 

이 역할은 IParam이 한다.

 

GetMessage는 while 문은 어디다가 표시하냐라는 문장이다.

즉, GetMessage가 원래는 계속 실행이 되는 것인데

메시지가 없으면 while 문이 빠져나가진 않고 잠재우는 것이다.

 

즉 다시 말해서 GetMassage는 sleeptime이 존재하는 함수이다.

담아둘 메시지가 없으면 잠재우며

 

while (GetMassage&msg, NULL, 0, 0) /
{
	if(msg.message == WM_QUIT)
    	return static_cast<int>(msg.wParam);
    
    DispatchMessage(&msg);
}
 

while (GetMessage (&msg, NULL, 0, 0)) 에서

첫번째 매개변수에 &가 없으면 사본이 들어가서 아무 것도 넣어지지 않는다.

NULL은 메시지를 다 받으려고 NULL 값을 넣어준 것이다.

뒤에 있는 것은 메시지 필터인데

일단 메세지를 받기는 다 받아야 하니, 0,0으로 설정된 것이다.

만약 1,2로 설정되어 있다면 1~2까지 안받겠다는 이런 뜻이다.

 

if문 msg.message == WM_QUIT 에서 WM_QUIT는 메시지를 끝내겠다는 뜻이다.

 

	winClass.style          = CS_HREDRAW | CS_VREDRAW; // 얘네 설정 안해주면 줄였다 늘렸을 때 그 영역이 안나온다
    winClass.lpfnWndProc    = WndProc;  // 함수 포인터임
    winClass.cbWndExtra     = 0;  // 윈도우 여분 메모리 둘 다 사용 안합니다.
    winClass.cbClsExtra     = 0;  // 클래스 여분 메모리 둘 다 사용 안합니다.
    winClass.hInstance      = hInstance;
    winClass.hIcon          = LoadIcon(NULL, IDI_APPLICATION); // 밑에 시작쪽에 있는게 큰 아이콘 NULL에 핸들 값이 넣어주면  Icon을 변경해줄 수 있다.
    //NULL이면 윈도우즈에 기본적으로 제공하는 Icon을 사용하겠다라는 뜻이다.
    winClass.hIconSm        = LoadIcon(NULL, IDI_APPLICATION); // 손 대면 조그맣게 뜨는게 작은 아이콘 NULL에 핸들 값이 넣어주면  Icon을 변경해줄 수 있다.
    //NULL이면 윈도우즈에 기본적으로 제공하는 Icon을 사용하겠다라는 뜻이다.
    winClass.hCursor        = LoadCursor(NULL, IDC_ARROW);
    winClass.hbrBackground  = (HBRUSH)(COLOR_WINDOW+1); //+1~3까지 그냥 색깔 바꿔주는 것
    // 그림을 그리면 종이가 필요하지 않냐, 그 종이 색깔 말하는 것이다.
    winClass.lpszMenuName   = NULL;
    winClass.lpszClassName  = L"WINCLASS";

'WINDOWS' 카테고리의 다른 글

윈도우 핸들 (Windows Handle Object)  (0) 2024.05.24
영역 범위 함수  (0) 2023.02.14