LRESULT WINAPI MsgProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam ) { switch( msg ) { case WM_DESTROY: PostQuitMessage( 0 ); break; // ************ KEYBOARD MESSAGES ************ // case WM_KEYDOWN: if( !( lParam & 0x40000000 ) ) // no thank you on the autorepeat { kServ.OnKeyPressed( wParam ); } break; case WM_KEYUP: kServ.OnKeyReleased( wParam ); break; case WM_CHAR: kServ.OnChar( wParam ); break; // ************ END KEYBOARD MESSAGES ************ // // ************ MOUSE MESSAGES ************ // case WM_MOUSEMOVE: { int x = (short)LOWORD( lParam ); int y = (short)HIWORD( lParam ); if( x > 0 && x < D3DGraphics::SCREENWIDTH && y > 0 && y < D3DGraphics::SCREENHEIGHT ) { mServ.OnMouseMove( x,y ); if( !mServ.IsInWindow() ) { SetCapture( hWnd ); mServ.OnMouseEnter(); } } else { if( wParam & (MK_LBUTTON | MK_RBUTTON) ) { x = max( 0,x ); x = min( D3DGraphics::SCREENWIDTH - 1,x ); y = max( 0,y ); y = min( D3DGraphics::SCREENHEIGHT - 1,y ); mServ.OnMouseMove( x,y ); } else { ReleaseCapture(); mServ.OnMouseLeave(); mServ.OnLeftReleased( x,y ); mServ.OnRightReleased( x,y ); } } break; } case WM_LBUTTONDOWN: { int x = (short)LOWORD( lParam ); int y = (short)HIWORD( lParam ); mServ.OnLeftPressed( x,y ); break; } case WM_RBUTTONDOWN: { int x = (short)LOWORD( lParam ); int y = (short)HIWORD( lParam ); mServ.OnRightPressed( x,y ); break; } case WM_LBUTTONUP: { int x = (short)LOWORD( lParam ); int y = (short)HIWORD( lParam ); mServ.OnLeftReleased( x,y ); break; } case WM_RBUTTONUP: { int x = (short)LOWORD( lParam ); int y = (short)HIWORD( lParam ); mServ.OnRightReleased( x,y ); break; } case WM_MOUSEWHEEL: { int x = (short)LOWORD( lParam ); int y = (short)HIWORD( lParam ); if( GET_WHEEL_DELTA_WPARAM( wParam ) > 0 ) { mServ.OnWheelUp( x,y ); } else if( GET_WHEEL_DELTA_WPARAM( wParam ) < 0 ) { mServ.OnWheelDown( x,y ); } break; } // ************ END MOUSE MESSAGES ************ // } return DefWindowProc( hWnd, msg, wParam, lParam ); }