C ++公共和私有类,屏幕移动?

时间:2013-12-07 01:00:13

标签: c++ screen private public

我被困了,我需要帮助,我不能在这里发布所有文件,因为这是一个包含近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)
{
}

1 个答案:

答案 0 :(得分: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;
}