Я застрял, мне нужна помощь, я не могу опубликовать все файлы здесь, потому что это проект с почти 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)
{
}
Логика может быть как ниже:
Объявите переменные:
В mouseMotion:
if (mouseIsDown && ! released) {
// your current code
}
В mouseButtonDown:
if (mouseIsDown) {
released = True;
} else {
mouseIsDown = True;
released = False;
}
В mouseButtonUp:
if (mouseIsDown) {
mouseIsDown = False;
released = True;
}
Других решений пока нет …