C ++ публичные и частные классы, с движениями экрана?

Я застрял, мне нужна помощь, я не могу опубликовать все файлы здесь, потому что это проект с почти 20 файлами C ++. Но в основном все сводится к движениям на экране.

-Класс «MyClass» — это экран, он имеет конструктор, который вызывает функции. экран имеет маленькую коробочку внизу. когда вы нажимаете мышь вниз, вверх или перемещаете ее, она посылает сигнал или «событие», и вызывается одна из трех функций ниже;

-function-mouseMotion, он должен переместить маленькую коробочку туда, куда указывает мышь, когда вы перемещаете мышь, что-то вроде перетаскивания. эта функция должна быть активна всякий раз, когда вы нажимаете кнопку мыши, например, когда мышь не работает
-function-mouseButtonDown, когда вы нажимаете кнопку мыши, маленький прямоугольник должен перемещаться из нижней части экрана туда, где находится курсор.
-function-mouseButtonUp, когда вы щелкаете мышью, эта функция вызывается и все движения маленького прямоугольника должны прекратиться.

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

Какой логарифм вы бы использовали, я новичок в с ++

using namespace WALY;

class MyClass : public Frame {
private:
void(*switchAction) (void);

Frame* box;

static void mouseButtonDown (Frame* f, const Event* e);
static void mouseButtonUp (Frame* f, const Event* e);
static void mouseMotion (Frame* f, const Event* e);public:
MyClass (Frame* parent, void (*switchFunc) (void));
void activate (void);
void deactivate (void);

};MyClass::MyClass(Frame *parent, void (*switchFunc)(void)) : Frame (parent),       switchAction (switchFunc)
{
box = new Frame (this, 250, 700);     // creating the box on the screen
box->setAlign (ALIGN_C);
Rect boxRect;
boxRect.x = boxRect.y = 0;
boxRect.w = 80;
boxRect.h = 50;
box->setScrollRect (boxRect);
box->useSolidBackground (0x808080);setCallbackFunc (MOUSE_DOWN, mouseButtonDown);        // registering functions into wally library
setCallbackFunc (MOUSE_UP, mouseButtonUp);
setCallbackFunc (MOUSE_MOTION, mouseMotion);

deactivate ();

}

void MyClass::activate(void)
{
setActive(true);
setVisible(true);
}

void MyClass::deactivate(void)
{
setVisible(false);
setActive(false);
}
void
MyClass::mouseMotion (Frame* f, const Event* e)
{
MyClass* wywtcyc = (MyClass*)f;
wywtcyc->box->setX (e->motion.x);
wywtcyc->box->setY (e->motion.y);
}

void MyClass::mouseButtonDown (Frame* f, const Event* e)
{
// (e->button.x)
}

void MyClass::mouseButtonUp (Frame* f, const Event* e)
{
}

0

Решение

Логика может быть как ниже:

Объявите переменные:

  • mouseIsDown = False;
  • освобожден = Ложь;

В mouseMotion:

if (mouseIsDown && ! released) {
// your current code
}

В mouseButtonDown:

if (mouseIsDown) {
released = True;
} else {
mouseIsDown = True;
released = False;
}

В mouseButtonUp:

if (mouseIsDown) {
mouseIsDown = False;
released = True;
}
0

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

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

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