C ++ как перетаскивать растровое изображение по экрану

Привет, я пытаюсь сделать так, чтобы небольшое растровое изображение НЛО (рисование / рисование уже позаботились) можно перетаскивать по экрану. Кажется, я не могу обновить положение НЛО, а затем многократно перерисовывать его из функции MouseButtonDown () (упрощенный код для обработчика событий мыши). Любые предложения по обнаружению перетаскивания и перерисовки соответственно? Код ниже для соответствующих функций:

void MouseButtonDown(int x, int y, BOOL bLeft)
{
if (bLeft)
{
while(_bMouseMoving == true && _bMouseDragRelease == false)  {
_iSaucerX = x - (_pSaucer->GetWidth() / 2);
_iSaucerY = y - (_pSaucer->GetHeight() / 2);
InvalidateRect(_pGame->GetWindow(), NULL, FALSE);
}

// Set the saucer position to the mouse position
_iSaucerX = x - (_pSaucer->GetWidth() / 2);
_iSaucerY = y - (_pSaucer->GetHeight() / 2);

}
else
{
// Stop the saucer
_iSpeedX = 0;
_iSpeedY = 0;
}
}

void MouseButtonUp(int x, int y, BOOL bLeft)
{
_bMouseDragRelease = true;
}

void MouseMove(int x, int y)
{
_bMouseMoving = true;
}

0

Решение

Чтобы уточнить, что сказал Крис, вы получите сообщение WM_xBUTTONDOWN только один раз, и вам нужно будет использовать его для переключения состояния перетаскивания, которое вы можете запросить при получении сообщения WM_MOUSEMOVE.

Когда вы получите сообщение о перемещении мыши во время состояния перетаскивания, вы захотите сделать недействительным прямоугольник, окружающий НЛО, и прямоугольник, окружающий его.

При аннулировании прямоугольника появляются сообщения WM_PAINT, в которых вы перерисовываете все, что было позади НЛО, и НЛО на новом месте.

Или вы можете обмануть и сделать НЛО курсором при перетаскивании 🙂

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]