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:
A côté j'ai une DIMOUSESTATE2 m_mouseState;
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"); }
Et pis une fonction de lecture :
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 void Fenetre::ReadInputSouris(){ diMouseDevice->GetDeviceState( sizeof(DIMOUSESTATE2), &m_mouseState ); m_mouseState.lX = m_x; m_mouseState.lY = m_y; }
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.
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'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
Partager