static int GetMouseCmd( Mouse *mouse, bool isPressed, int useMouseMove, Vec2i pos) { int cmd = 0; bool (*mouseFunc)(const Mouse *, const int) = isPressed ? MouseIsPressed : MouseIsDown; if (useMouseMove) { cmd |= MouseGetMove(mouse, pos); } else { if (MouseWheel(mouse).y > 0) cmd |= CMD_UP; else if (MouseWheel(mouse).y < 0) cmd |= CMD_DOWN; } if (mouseFunc(mouse, SDL_BUTTON_LEFT)) cmd |= CMD_BUTTON1; if (mouseFunc(mouse, SDL_BUTTON_RIGHT)) cmd |= CMD_BUTTON2; if (mouseFunc(mouse, SDL_BUTTON_MIDDLE)) cmd |= CMD_MAP; return cmd; }
/// // ESWindowProc() // // Main window procedure // LRESULT WINAPI ESWindowProc ( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam ) { LRESULT lRet = 1; switch (uMsg) { case WM_CREATE: break; case WM_SIZE: { ESContext *esContext = (ESContext*)(LONG_PTR) GetWindowLongPtr ( hWnd, GWLP_USERDATA ); if ( esContext ) { esContext->width = LOWORD( lParam ); esContext->height = HIWORD( lParam ); InvalidateRect( esContext->hWnd, NULL, FALSE ); } } case WM_PAINT: { ESContext *esContext = (ESContext*)(LONG_PTR) GetWindowLongPtr ( hWnd, GWLP_USERDATA ); if ( esContext && esContext->drawFunc ) esContext->drawFunc ( esContext ); if ( esContext ) ValidateRect( esContext->hWnd, NULL ); } break; case WM_CLOSE: PostQuitMessage(0); break; case WM_DESTROY: PostQuitMessage(0); break; case WM_CHAR: { POINT point; ESContext *esContext = (ESContext*)(LONG_PTR) GetWindowLongPtr ( hWnd, GWLP_USERDATA ); GetCursorPos( &point ); if ( esContext && esContext->keyFunc ) esContext->keyFunc ( esContext, (unsigned char) wParam, (int) point.x, (int) point.y ); } break; case 0x020A://WM_MOUSEWHEEL: { int zDelta = (short)HIWORD(wParam); int xPos = LOWORD(lParam); int yPos = HIWORD(lParam); zoomCamera(zDelta); break; } case WM_MOUSEMOVE: { int xPos = LOWORD(lParam); int yPos = HIWORD(lParam); mouseMotionFunc(xPos,yPos); break; } case WM_RBUTTONUP: { int xPos = LOWORD(lParam); int yPos = HIWORD(lParam); mouseFunc(2,1,xPos,yPos); break; } case WM_RBUTTONDOWN: { int xPos = LOWORD(lParam); int yPos = HIWORD(lParam); mouseFunc(2,0,xPos,yPos); break; } case WM_LBUTTONDOWN: { int xPos = LOWORD(lParam); int yPos = HIWORD(lParam); // gDemoApplication->mouseFunc(0,0,xPos,yPos); mouseFunc(0,0,xPos,yPos); break; } case WM_LBUTTONUP: { int xPos = LOWORD(lParam); int yPos = HIWORD(lParam); //gDemoApplication->mouseFunc(0,1,xPos,yPos); mouseFunc(0,1,xPos,yPos); break; } default: lRet = DefWindowProc (hWnd, uMsg, wParam, lParam); break; } return lRet; }