我被困了,我需要帮助,我不能在这里发布所有文件,因为这是一个包含近20个c ++文件的项目。但它基本上都归结为屏幕上的动作。
- 类“MyClass”是屏幕,它有一个调用函数的构造函数。屏幕底部有一个小盒子。当您向下,向上或向下移动鼠标时,它会发送一个信号或“事件”,并调用以下三个函数之一;
-function-mouseMotion,当您移动鼠标时,它应该将小方框移动到鼠标指向的位置,即拖动。每当您按下鼠标时,此功能应该处于活动状态,例如每当鼠标按下时 -function-mouseButtonDown,当你按下鼠标时,小方框应该从屏幕底部移动到光标所在的位置。 -function-mouseButtonUp,当你取消你的鼠标时,这个函数将被调用,小方框的所有动作都应该停止。
现在代码是,每当我把ouse带到屏幕上时,小盒子会立即跳转并开始跟随鼠标。但是我们的教授希望我们改变这些功能,这样当我在屏幕上介绍moue时,什么都不应该发生。当我单击鼠标时,该框应该到达鼠标所在的位置。如果我在移动鼠标时单击并按住鼠标,则该框应该一直跟随鼠标。最后,如果我取消单击鼠标,则该框需要保留在我取消它的位置。
你会使用什么样的alograithm,对c ++来说是新手
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 :(得分:0)
逻辑可能如下所示:
声明变量:
在mouseMotion中:
if (mouseIsDown && ! released) {
// your current code
}
在mouseButtonDown中:
if (mouseIsDown) {
released = True;
} else {
mouseIsDown = True;
released = False;
}
在mouseButtonUp中:
if (mouseIsDown) {
mouseIsDown = False;
released = True;
}