Проблемы с GetCursorPos

0

У меня проблемы с GetCursorPos. Я использую directx для рисования квадрата, где находится курсор, но мой код не работает, и я понятия не имею, почему...

LPPOINT cursorPos = 0;
GetCursorPos(cursorPos);
square->setPosition(D3DXVECTOR2(40.0f,60.0f));  // as a test: works fine...
square->setPosition(D3DXVECTOR2(cursorPos->x, cursorPos->y)); // -> crash

Я также пробовал:

LPPOINT cursorPos = 0;
GetCursorPos(cursorPos);
float posX = cursorPos->x;  // no crash...
float posY = cursorPos->y;  // no crash...
std::cout << posX << posY <<std::endl; // CRASH!

Что я делаю не так??

Теги:
winapi
directx

1 ответ

5
Лучший ответ

Когда вы объявляете LPPOINT, вы объявляете указатель на объект POINT. Поэтому, когда вы пишете

LPPOINT cursorPos = 0;

Вы создаете указатель под названием cursorPos и устанавливаете его в NULL. Вызов

GetCursorPos(cursorPos);

то сбой, поскольку GetCursorPos ожидает, что вы GetCursorPos указатель POINT который вы хотите заполнить, и указатель NULL. Следовательно, когда вы пишете

square->setPosition(D3DXVECTOR2(cursorPos->x, cursorPos->y)); // -> crash

Вы читаете указатель NULL при попытке прочитать x и y. Это приводит к неопределенному поведению, которое здесь является крахом. В другом случае вы также получаете неопределенное поведение, и просто не происходит сбой.

Чтобы исправить это, попробуйте объявить фактический объект POINT, например:

POINT cursorPos;

затем вызывая

GetCursorPos(&cursorPos);

затем, прочитав позицию как

square->setPosition(D3DXVECTOR2(cursorPos.x, cursorPos.y));

Надеюсь это поможет!

  • 0
    О хорошо Я думал, что GetCursorPos объявит объект, потому что я нашел его в учебнике ... Кажется, теперь глупо! Большое спасибо!!!
  • 1
    @ theCNG27, Ой, есть много учебников с простым неправильным кодом. Знание достаточного количества C ++ в первую очередь имеет большое значение.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню