Bonjour,
Dans quelques heures ça fera une semaine que je me bat contre les différents systèmes d'inputs.Tout ce que je veux faire est de stocker dans 2 variables la position en x et en y de la souris avec pour origine le bord supérieur gauche ma fenêtre.

Ayant commencé à faire du DirectX 9 je me suis naturellement orienté vers Dinput.
Après avoir réglé les problèmes de link je tombe directement sur un autre : impossible d'afficher correctement la position x/y du pointeur ( j'ai -8546460 en x et en y ).

Voilà ce que j'ai écrit pour initialiser le tintouin:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
void Fenetre::DInputInit(HINSTANCE hInstance){
		// General
		hr = DirectInput8Create(hInstance,DIRECTINPUT_VERSION,IID_IDirectInput8,(void**)&diObject, NULL);
		testErreur("DirectInput8Create");
 
		// Clavier
		ZeroMemory(keys, sizeof(keys));
		hr = diObject->CreateDevice(GUID_SysKeyboard, &diKeyboardDevice, NULL);
		testErreur("CreateDevice-Keyboard");
		hr = diKeyboardDevice->SetDataFormat( &c_dfDIKeyboard );
		testErreur("Data Format !");
		hr = diKeyboardDevice->SetCooperativeLevel(hWnd,DISCL_FOREGROUND | DISCL_NONEXCLUSIVE);
		testErreur("CooperativeLevel-Keyboard");
		hr = diKeyboardDevice->Acquire();
		testErreur("Impossible de récupérer le clavier, aquire impossible");
 
		// Souris
		ZeroMemory( &m_mouseState, sizeof(m_mouseState) );
		hr = diObject->CreateDevice(GUID_SysMouse, &diMouseDevice, NULL);
		testErreur("CreateDevice-Mouse");
		hr = diMouseDevice->SetDataFormat( &c_dfDIMouse2 );
		testErreur("Data Format !");
		hr = diMouseDevice->SetCooperativeLevel(hWnd,DISCL_FOREGROUND | DISCL_NONEXCLUSIVE);
		testErreur("CooperativeLevel-Mouse");
		hr = diMouseDevice->Acquire();
		testErreur("Impossible de récupérer la souris, aquire impossible");
	}
A côté j'ai une DIMOUSESTATE2 m_mouseState;
Et pis une fonction de lecture :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
void Fenetre::ReadInputSouris(){
		diMouseDevice->GetDeviceState( sizeof(DIMOUSESTATE2), &m_mouseState );
		m_mouseState.lX = m_x;
		m_mouseState.lY = m_y;
	}
Et dans la boucle while(1) de mon main j'ai :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Fenetre.beginRender();	
			  Fenetre.ReadInputSouris();
			  std::ostringstream oss;
			  oss << Fenetre.m_mouseState.lX << " / " << Fenetre.m_mouseState.lY;
 
			  RECT rct;
			  rct.left=2;
			  rct.right=200;
			  rct.top=10;
			  rct.bottom=rct.top+20;       
 
			  m_font->DrawText(NULL, oss.str().c_str(), -1, &rct, 0, fontColor );
 
			  Fenetre.endRender();
J'ai aussi fait pas mal de tests avec les Raws Inputs. Je pense que ce que j'ai fait est viable cependant j'ai un plantage bizarre.
J'essaye de debugger le truc mais je n'en attend pas grand chose


Si quelqu'un a une méthode viable ou un indice quelconque je suis preneur