void Events::Poll() { GamePad::Clear(); Joystick::Clear(); Keyboard::Clear(); Mouse::Clear(); while (SDL_PollEvent(&mEvent)) { switch (mEvent.type) { case SDL_QUIT: OnQuit(); break; case SDL_APP_TERMINATING: OnAppTerminating(); break; case SDL_APP_LOWMEMORY: OnAppLowMemory(); break; case SDL_APP_WILLENTERBACKGROUND: OnAppWillEnterBackground(); break; case SDL_APP_DIDENTERBACKGROUND: OnAppDidEnterBackground(); break; case SDL_APP_WILLENTERFOREGROUND: OnAppWillEnterForeground(); break; case SDL_APP_DIDENTERFOREGROUND: OnAppDidEnterForeground(); break; case SDL_WINDOWEVENT: OnWindowEvent(); break; case SDL_SYSWMEVENT: OnSysWMEvent(); break; case SDL_KEYDOWN: OnKeyDown(mEvent.key.keysym.sym, mEvent.key.keysym.mod, mEvent.key.repeat); Keyboard::SetKey(mEvent.key.keysym.sym, true); break; case SDL_KEYUP: OnKeyUp(mEvent.key.keysym.sym, mEvent.key.keysym.mod, mEvent.key.repeat); Keyboard::SetKey(mEvent.key.keysym.sym, false); break; case SDL_TEXTEDITING: OnTextEditing(); break; case SDL_TEXTINPUT: OnTextInput(); break; case SDL_MOUSEMOTION: OnMouseMotion(mEvent.motion.x, mEvent.motion.y, mEvent.motion.xrel, mEvent.motion.yrel); Mouse::SetPosition(mEvent.motion.x, mEvent.motion.y); break; case SDL_MOUSEBUTTONDOWN: switch(mEvent.button.button) { case SDL_BUTTON_LEFT: OnMouseLeftButtonDown(mEvent.button.x, mEvent.button.y); break; case SDL_BUTTON_RIGHT: OnMouseRightButtonDown(mEvent.button.x, mEvent.button.y); break; case SDL_BUTTON_MIDDLE: OnMouseMiddleButtonDown(mEvent.button.x, mEvent.button.y); break; case SDL_BUTTON_X1: OnMouseLeftButtonDown(mEvent.button.x, mEvent.button.y); break; case SDL_BUTTON_X2: OnMouseLeftButtonDown(mEvent.button.x, mEvent.button.y); break; } break; case SDL_MOUSEBUTTONUP: switch(mEvent.button.button) { case SDL_BUTTON_LEFT: OnMouseLeftButtonUp(mEvent.button.x, mEvent.button.y); break; case SDL_BUTTON_RIGHT: OnMouseRightButtonUp(mEvent.button.x, mEvent.button.y); break; case SDL_BUTTON_MIDDLE: OnMouseMiddleButtonUp(mEvent.button.x, mEvent.button.y); break; case SDL_BUTTON_X1: OnMouseLeftButtonUp(mEvent.button.x, mEvent.button.y); break; case SDL_BUTTON_X2: OnMouseLeftButtonUp(mEvent.button.x, mEvent.button.y); break; } break; case SDL_MOUSEWHEEL: OnMouseWheel(mEvent.wheel.x, mEvent.wheel.y); Mouse::SetScroll(mEvent.wheel.x, mEvent.wheel.y); break; case SDL_JOYAXISMOTION: OnJoyAxisMotion(); break; case SDL_JOYBALLMOTION: OnJoyBallMotion(); break; case SDL_JOYHATMOTION: OnJoyHatMotion(); break; case SDL_JOYBUTTONDOWN: OnJoyBallButtonDown(); break; case SDL_JOYBUTTONUP: OnJoyBallButtonUp(); break; case SDL_JOYDEVICEADDED: OnJoyDeviceAdded(); break; case SDL_JOYDEVICEREMOVED: OnJoyDeviceRemoved(); break; case SDL_CONTROLLERAXISMOTION: OnControllerAxisMotion(mEvent.caxis.axis, mEvent.caxis.value, mEvent.caxis.which); GamePad::SetAxis(mEvent.caxis.axis, mEvent.caxis.value, mEvent.caxis.which); break; case SDL_CONTROLLERBUTTONDOWN: OnControllerButtonDown(mEvent.cbutton.button, mEvent.cbutton.which); GamePad::SetButton(mEvent.cbutton.button, true, mEvent.cbutton.which); break; case SDL_CONTROLLERBUTTONUP: OnControllerButtonUp(mEvent.cbutton.button, mEvent.cbutton.which); GamePad::SetButton(mEvent.cbutton.button, false, mEvent.cbutton.which); break; case SDL_CONTROLLERDEVICEADDED: OnControllerDeviceAdded(mEvent.cdevice.which); GamePad::Add(mEvent.cdevice.which); break; case SDL_CONTROLLERDEVICEREMOVED: OnControllerDeviceRemoved(mEvent.cdevice.which); GamePad::Remove(mEvent.cdevice.which); break; case SDL_CONTROLLERDEVICEREMAPPED: OnControllerDeviceRemapped(mEvent.cdevice.which); break; case SDL_FINGERDOWN: OnFingerDown(); break; case SDL_FINGERUP: OnFingerUp(); break; case SDL_FINGERMOTION: OnFingerMotion(); break; case SDL_DOLLARGESTURE: OnDollarGesture(); break; case SDL_DOLLARRECORD: OnDollarRecord(); break; case SDL_MULTIGESTURE: OnMultiGesture(); break; case SDL_CLIPBOARDUPDATE: OnClipboardUpdate(); break; case SDL_DROPFILE: OnDropFile(); break; case SDL_USEREVENT: OnUserEvent(); break; default: OnUndefined(); break; } } }
LRESULT APIENTRY MainWndProc (HWND hWnd, UINT message, DWORD wParam, LONG lParam) { LONG lRetCode = 0L ; BOOL bCallDefWinProc = FALSE ; switch (LOWORD (message)) { // switch case WM_LBUTTONDBLCLK: ShowPerfmonMenu (!Options.bMenubar) ; if (Options.bMenubar) { PrepareMenu (GetMenu (hWnd)) ; } break ; case WM_COMMAND: if (PerfmonCommand (hWnd,wParam,lParam)) return(0); else bCallDefWinProc = TRUE ; break; case WM_MENUSELECT: MenuBarHit (wParam) ; break ; case WM_NCHITTEST: /* if we have no title/menu bar, clicking and dragging the client * area moves the window. To do this, return HTCAPTION. * Note dragging not allowed if window maximized, or if caption * bar is present. */ wParam = DefWindowProc(hWnd, message, wParam, lParam); if (!Options.bMenubar && (wParam == HTCLIENT) && !IsZoomed (hWndMain)) return HTCAPTION ; else return wParam ; break ; case WM_SHOWWINDOW: PrepareMenu (GetMenu (hWnd)) ; break ; case WM_SIZE: OnSize (hWnd, LOWORD (lParam), HIWORD (lParam)) ; break ; case WM_GETMINMAXINFO: { MINMAXINFO *pMinMax ; pMinMax = (MINMAXINFO *) lParam ; pMinMax->ptMinTrackSize.x = MinimumSize ; pMinMax->ptMinTrackSize.y = MinimumSize ; } break ; case WM_NOTIFY: { LPTOOLTIPTEXT lpTTT = (LPTOOLTIPTEXT)lParam; if (lpTTT->hdr.code == TTN_NEEDTEXT) { LoadString (hInstance, lpTTT->hdr.idFrom, lpTTT->szText, sizeof(lpTTT->szText)/sizeof(TCHAR)); return TRUE; } else { bCallDefWinProc = FALSE ; break; } } case WM_F1DOWN: if (dwCurrentDlgID) { CallWinHelp (dwCurrentDlgID) ; } else if (dwCurrentMenuID) { CallWinHelp (dwCurrentMenuID) ; dwCurrentMenuID = 0 ; } break ; case WM_CREATE: OnCreate (hWnd) ; ViewChart (hWnd) ; PrepareMenu (GetMenu (hWnd)) ; break ; case WM_DESTROY: WinHelp (hWndMain, pszHelpFile, HELP_QUIT, 0) ; PostQuitMessage (0); break ; case WM_QUERYENDSESSION: // please shut it down return (1) ; break ; case WM_ENDSESSION: if (wParam == TRUE) { // close any log file before closing down PerfmonClose (hWnd) ; return (1) ; } else bCallDefWinProc = TRUE ; break ; case WM_CLOSE: PerfmonClose (hWnd) ; break ; case WM_ACTIVATE: { int fActivate = LOWORD (wParam) ; bPerfmonIconic = (BOOL) HIWORD (wParam) ; if (bPerfmonIconic == 0 && fActivate != WA_INACTIVE) { // set focus on the Legend window if (iPerfmonView == IDM_VIEWCHART) { SetFocus (hWndGraphLegend) ; } else if (iPerfmonView == IDM_VIEWALERT) { SetFocus (hWndAlertLegend) ; } else if (iPerfmonView == IDM_VIEWLOG) { SetFocus (hWndLogEntries) ; } else if (iPerfmonView == IDM_VIEWREPORT) { SetFocus (hWndReport) ; } } } break ; case WM_SYSCOLORCHANGE: DeletePerfmonSystemObjects () ; CreatePerfmonSystemObjects () ; WindowInvalidate (PerfmonViewWindow()) ; break ; case WM_WININICHANGE: if (!lParam || strsamei((LPTSTR)lParam, szInternational)) { GetDateTimeFormats () ; } break ; case WM_DROPFILES: OnDropFile (wParam) ; return (0) ; break ; default: bCallDefWinProc = TRUE ; break; } // switch if (bCallDefWinProc) { lRetCode = DefWindowProc (hWnd, message, wParam, lParam) ; } return (lRetCode); } // MainWndProc