I'm missing some details here. What I found out due to experimentation are the following facts:
- MouseUp and MouseDown contain the just the single mouse button whose change of state (pressed or released) generated the event, while MouseMove contains all mouse buttons which are currently being pressed as BitMask.
- MouseWheel events don't contain any mouse button information at all.
- MouseUp always is followed by a MouseMove event without moving the mouse.
- The "Clicks" count on MouseDown events does only cont up to 2, and restarts at 1 again (so it cannot be used to identify triple or quadruple clicks).
- The "Clicks" count on MouseUp events always seems to be 1.
- When leaving the control while at least one button is pressed, there is no MouseLeave event, but the MouseMove events continue. You can even press additional buttons and get the MouseDown event and further MouseMove events. But when you release one button while still holding other buttons, you get an MouseUp event, and then don't get any more events until you re-enter the window, where the first event you get is an MouseLeave event, followed by a MouseEnter event, and then the MouseMove events with the now current set of pressed buttons.
Those were tested with Vista 64 on .NET 3.5 - I have no Idea whether this behaviour is guaranteed or may differ on other implementations / versions. These oddities and the accompagnying lack of documentation makes it difficult to implement state machines for complex mouse interactivity. I'd like to see some clearification and possibly justification here.