I have an application which has two mice devices. One is a trackball and the other is your standard computer mouse. I am using raw input (WM_INPUT) and I am able to identify both computer mice, distinguish between them and know which one sent the mouse message. Now, what I want to do is if i detect (preferably within WM_INPUT) that the trackball moved (MouseMove) I want to prevent the mouse from moving and do something else; currently the trackball does both (my function plus move the mouse cursor). Any ideas on how i can do this?
I have tried in both the WndProc under WM_MOUSEMOVE and WM_INPUT to set the handled flag to true. I have also within the window itself handled the previewmousemov e event and set the handled to true but it still the cursor moves when I move the trackball (see code below).
Is there some way to block this message from moving pass the WM_INPUT stage? or a way to push it out of the message queue so windows thinks that the message has resolved?
I have tried in both the WndProc under WM_MOUSEMOVE and WM_INPUT to set the handled flag to true. I have also within the window itself handled the previewmousemov e event and set the handled to true but it still the cursor moves when I move the trackball (see code below).
Code:
private void OnMouseMove(object sender, MouseEventArgs e) { if (TrackBallMessage == true) //set by the WM_INPUT in WndProc { e.Handled = true; //still moves the mouse :( TrackBallMessage = false; //reset our flag. } } IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled) { switch (msg) { case WM_INPUT: { if (<message came from trackball>) { handled = true; //this doesn't prevent the mouse move :( TrackBallMessage = true; //tried to signal to mouse move not to do anything, but it still does (global var) <do my function> } } break; case WM_MOUSEMOVE: { if (TrackBallMessage == true) { handled = true; //still does a mousemove :( } } break; } return IntPtr.Zero; }
Comment