bool KWindow::Run() { GameInit(); MSG msg; ZeroMemory(&msg, sizeof(msg)); // 메세지 큐에서 메세지 1개를 가져온다. while( true ) { // PM_NOREMOVE, PM_REMOVE if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) { // 키 해석해라. TranslateMessage(&msg); // 메세지 프로시져에 전달해라. DispatchMessage(&msg); if (msg.message == WM_QUIT) { break; } MsgEvent(msg); } else { GameRun(); } } GameRelease(); return true; };
INT WINAPI WinMain(HINSTANCE hInstance, HINSTANCE prevHInstance, LPSTR lpCmdline, INT nCmdshow) { g_hInstance = hInstance; WNDCLASSEX wndClass; memset(&wndClass, 0, sizeof(WNDCLASSEX)); wndClass.cbSize = sizeof(WNDCLASSEX); wndClass.style = CS_DBLCLKS | CS_OWNDC | CS_HREDRAW | CS_VREDRAW; wndClass.lpfnWndProc = WindowProc; wndClass.cbClsExtra = 0; wndClass.cbWndExtra = 0; wndClass.hInstance = hInstance; wndClass.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH); wndClass.lpszMenuName = NULL; wndClass.lpszClassName = WND_CLASS_NAME; if (!RegisterClassEx(&wndClass)) { return 0; } g_hwnd = CreateWindowEx(NULL, WND_CLASS_NAME, WND_TITLE, WS_POPUP | WS_VISIBLE, WND_X, WND_Y, WND_WIDTH, WND_HEIGHT, NULL, NULL, hInstance, NULL); if (g_hwnd == NULL) { return 0; } ShowWindow(g_hwnd, nCmdshow); UpdateWindow(g_hwnd); if(!GameInitialize()) { return 0; } MSG msg; while(TRUE) { if (PeekMessage(&msg,NULL,0,0,PM_REMOVE)) { if (msg.message == WM_QUIT) { break; } TranslateMessage(&msg); DispatchMessage(&msg); } GameLoop(); } GameRelease(); return 0; }