Movimiento exclusivo del mouse con WM_INPUT

Microsoft parece recomendar el uso de WM_INPUT para la input. Solo quiero get una input relativa del mouse y ocultar el cursor del mouse todos juntos por un momento (para la input basada en gestos). Sin embargo, el uso de RIDEV_CAPTUREMOUSE|RIDEV_NOLEGACY al registrar el dispositivo de input solo evita que el mouse click otras windows, pero el cursor del mouse aún está visible y no está restringido a mi window. ¿Cómo puedo ocultarlo y hacerlo reaparecer exactamente donde lo dejé cuando mi captura de input comenzó después de poco time?

Sé que esto se ha preguntado antes en el context de los controles FPS, pero siempre parecía estar en un context diferente, principalmente con API que ya implementan un agarre de mouse como este.

También se mencionó que podría ocultar el cursor y restablecerlo en el centro de su window después de cada movimiento. Sin embargo, AFAIR , DirectInput permite tomar el cursor del mouse exclusivamente. Entonces, dado que eso fue desaprobado a favor de WM_INPUT , ¿es la "vieja manera" sin DX el path a seguir, o hay algo nuevo que funcione bien con WM_INPUT ?

¡Gracias!

Si lo entiendo correctamente, simplemente quiere ocultar el mouse cuando comienza su gesto, y luego hacer que el mouse aparezca de nuevo en la position en que desapareció.

Obtener la position del mouse antes de ocultar:

 POINT posRelative; POINT posAbsolute; GetCursorPos(&posAbsolute); posRelative.x = posAbsolute.x; posRelative.y = posAbsolute.y; ScreenToClient(hwnd, &posRelative); 

luego muéstralo / escondelo:

 bool hideCursor = true; while(hideCursor != IsRealCursorHidden()) { ShowCursor(hideCursor ? 0 : 1); } bool IsRealCursorHidden() { int internalCount = ShowCursor(0); internalCount = ShowCursor(1); return (internalCount < 0 ) ? true : false; } 

y luego mostrar el cursor en la position original deseada nuevamente:

 SetCursorPos(pos.x, pos.y); 

Editar:

GetCursorPos estará en el espacio de la pantalla, por lo que si tienes una resolución diferente, tendrás que tener esto en count.

La ventaja de usar WM_INPUT es que su juego recibe datos brutos del mouse en el nivel más bajo posible.

WM_INPUT es solo para input sin procesar, no conoce ni se preocupa por el cursor y las coorderadas absolutas. Las características específicas del cursor son específicas del sistema de windows, por lo que para PC puede usar los methods estándar para manipular el cursor. Es C # pero traducirlo a código no administrado no debería ser difícil.

 [DllImport("user32.dll", EntryPoint = "SetCursorPos")] public extern static Int32 SetCursorPosition(Int32 x, Int32 y); [DllImport("user32.dll")] static extern int ShowCursor(bool bShow);