// Global variables ------------------------------------------------------------------- static Engine* ApplicationHandle = 0; // Default message handler ------------------------------------------------------------ static LRESULT CALLBACK WndProc(HWND hwnd, UINT umessage, WPARAM wparam, LPARAM lparam) { switch(umessage) { // Check if the window is being destroyed case WM_DESTROY: { PostQuitMessage(0); return 0; } // Check if the window is being closed case WM_CLOSE: { PostQuitMessage(0); return 0; } // All other messages pass to the message handler in the system class default: { return ApplicationHandle->MessageHandler(hwnd, umessage, wparam, lparam); } } } // Application message handler -------------------------------------------------------- LRESULT CALLBACK MessageHandler(HWND hwnd, UINT umessage, WPARAM wparam, LPARAM lparam) { switch(umessage) { // Check if a key has been pressed on the keyboard case WM_KEYDOWN: { // If a key is pressed send it to the input object so it can record that state mInput->KeyDown((unsigned int)wparam); return 0; } // Check if a key has been released on the keyboard case WM_KEYUP: { // If a key is released then send it to the input object so it can unset the state for that key mInput->KeyUp((unsigned int)wparam); return 0; } // All other messages pass to the default message handler default: { return DefWindowProc(hwnd, umessage, wparam, lparam); } } }