2013-09-16 5 views
1

Я пытаюсь использовать DirectX Input для управления вводной мышью. Но когда я пытаюсь получить координаты X и Y моей мыши, значения являются неправильными (отрицательными или кажутся случайными).Входы управления Мышь с DirectX DirectInput

я покажу вам код, который я использовал:

bool System::frame() 
{ 
    bool result; 
    if (input->isButtonDown(BUTTON_L)) //if left button is down 
    { 
     result = ReadMouse(); 
     if(!result) 
      return false; 
     ProcessInput(); 
    } 
} 

bool System::ReadMouse() 
{ 
    HRESULT result; 

    //this->mouseState is a DIMOUSESTATE ; this->mouse is a LDIRECTINPUTDEVICE8 
    result = this->mouse->GetDeviceState(sizeof(DIMOUSESTATE), (LPVOID)&this->mouseState); 
    if(FAILED(result)) 
    { 
     if((result == DIERR_INPUTLOST) || (result == DIERR_NOTACQUIRED)) 
      this->mouse->Acquire(); 
     else 
      return false; 
    } 
    return true; 
} 

void System::ProcessInput() 
{ 
    this->mouseX = this->mouseState.lX; 
    this->mouseY = this->mouseState.lY; 

    if(this->mouseX < 0) 
     this->mouseX = 0; 
    if(this->mouseY < 0) 
     this->mouseY = 0; 

    if(this->mouseX > this->ScreenWidth) 
     this->mouseX = this->ScreenWidth; 
    if(this->mouseY > this->ScreenHeight) 
     this->mouseY = this->ScreenHeight; 
    return; 
} 

Мой последний тест даст this->mouseX = -657 и this->mouseY = -36 вместо 200 и 200 (приблизительно). Я проверяю функцию, когда я инициализирую мышь, они, похоже, работают (я следил за учебником).

ответ

1

Я думаю, причина в том, что DirectInput дает вам относительные данные для положения мыши. См.: http://msdn.microsoft.com/en-us/library/windows/desktop/ee418272(v=vs.85).aspx для объяснения того, как интерпретировать данные с мыши и как перейти в абсолютный режим.

Рекомендуется использовать API-интерфейс Raw Input вместо DirectInput. (http://msdn.microsoft.com/en-us/library/windows/desktop/ms645536(v=vs.85).aspx)

Смежные вопросы