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

윈도우 API는 일반적인 C문법과 다르게 Winmain에서 코드가 실행된다.

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

    // TODO: 여기에 코드를 입력합니다.

    // 전역 문자열을 초기화합니다.
    LoadStringW(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
    LoadStringW(hInstance, IDC_DX3D2310, szWindowClass, MAX_LOADSTRING);
    MyRegisterClass(hInstance);

    // 애플리케이션 초기화를 수행합니다:
    if (!InitInstance (hInstance, nCmdShow))
    {
        return FALSE;
    }

    HACCEL hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_DX3D2310));

    MSG msg = {};
    InitDevice();
    // 기본 메시지 루프입니다:
    while (msg.message != WM_QUIT) // 메세지에 종료가 들어오지 않으면 true를 반환한다.
    {
        if (PeekMessage(&msg, nullptr, 0, 0, PM_REMOVE)) // 메세지 들어왔을때만 처리하고 아닐때는 버림.
        {
            if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
            {
                TranslateMessage(&msg);
                DispatchMessage(&msg);
            }
        }   // 게임프로그래밍에서 많이 쓰는 루프방법.
        else
        {
            // Update
            // 이러면 프레임이 잘 나온다.
            Render();
        }

    }
    ReleaseDevice();

    return (int) msg.wParam;
}

위부분의 while문에서 코드가 반복되며, 루프가 진행될 때 메세지를 처리하고, 아닐경우 진행하는 방식으로 데이터를 처리함.

 


저 while문까지 진행되는 순서도.

 

wWinMain이 실행됨

 

InitInstance 로 애플리케이션을 초기화한다.

실패시 FALSE로 터트림.

 

MSG초기화.

 

InitDevice를 실행하여 Instance에 데이터를 기입함.

 

그후, while문 진입. 종료인터럽트가 들어오지 않으면 반복함.

 

이다.

 

이걸 잘라서 기입해보면,

이렇게 나눌 수 있는데, 각각 내부를 뜯어보면 다음과 같다.

위와같이 나누었으면, 공통사항과 공통사항이 아닌것을 각각 class로 나누어서. 실행시키면 된다

728x90