The simplest solution is to store X/Y direction angles and eventually a zoom level. Then, you modify the angles in some MouseMove event, and use them to compute camera direction.
Here's some pseudo-code for mouse drags:
OnMouseDown:
mouseDragging = true;
lastX = mouse.x;
lastY = mouse.y;
OnMouseUp:
mouseDragging = false;
OnMouseMove:
if( mouseDragging ) {
angleX += (mouse.x-lastX) * speedX;
angleY += (mouse.y-lastY) * speedY;
}
OnMouseWheel:
zoom += mouse.wheelDelta;
Given those data you can build a camera position. I don't know what are you using for this but here's an example from OpenGL:
glLoadIdentity();
glTranslatef( 0.0f, 0.0f, -zoom );
glRotatef( angleY, 1.0f, 0.0f, 0.0f );
glRotatef( angleX, 0.0f, 1.0f, 0.0f );
glTranslatef( -orbitCenterX, -orbitCenterY, -orbitCenterZ );