练习:鼠标类设计之2_类和接口

前言

        续鼠标类设计之1,前面解决了鼠标信号问题,这里解决显示问题

引入

        鼠标伴随操作系统而生,考虑在屏幕上怎样显示

思路

        1>鼠标显示是一个动态效果,所以需要一个“动态效果类”对象,添加进鼠标类的属性里。

        在面向对象的程序中,对象模拟的个体可以有动作---漆匠;对象模拟的动作也可以是对象。所以有了Painter类和Paint类。-----------来自“初识类”

        这里建立起一个MouseMove的类,并将其作为成员属性添加进鼠标类中


class Mouse{
    public:
        /*下列状态表示左击,右击,双击,拖拽,卷动,鼠标平移,升降,冻结*/
        enum State{LCLICK,RCLICK,DCLICK,DRAG,ROLL,MOVE,RISE,FREEZE};
    private:
        State state;
        MouseMove mouseMove;             //新增鼠标移动类对象
    public:
        Mouse();
        State getState(MouseInfo mi);    //传入鼠标信息类对象,获取状态
}

        2>鼠标显示是动态效果,采用一种思路:动态=静态效果的叠加

        所以建立一个类来实现静态的,初始的效果,也就是资源类,映射到硬件寄存器。目的是屏幕上显示出鼠标的外观。假设鼠标外观是个箭头,命名新类Arrow.

静态类实现

        现在已经有了静态类的目的:屏幕上生成一个箭头,来实现它.

class Arrow{
    private:
        vector<Point> points;
    public:
        Arrow(int x,int y);
        接口函数;
}

----接口函数是硬件供应商提供的,把采集到的点传入,得到箭头形状.

     这里我们能做的是采集相应的点.可以在构造方法里写出来..具体如何采集,可以自己硬写,也可以用计算机图形学的知识,笔者没有这方面的知识积累,所以先放一下.

效果类实现

        鼠标在屏幕上移动的效果,可以看作在不同的位置画箭头.

        有了这个思路,可以写出效果类        

class MouseMove{
    private:
        MouseInfo mi;                                     //鼠标信息类对象传入
    public:
        MouseMove(MouseInfo MI):mi(MI){};                 //构造函数
        void work();                               
}

        实现鼠标的移动

void MouseMove::work(){
    int moveTemp=mi.move;                                //提取鼠标横坐标
    int riseTemp=mi.rise;                                //提取鼠标纵坐标
    Arrow *arrow=new Arrow(moveTemp,riseTemp);           //生成箭头
    接口函数;                                            //显示箭头
    if(mi.move!=moveTemp||mi.rise!=riseTemp){
        Arrow *new_arrow=new Arrow(mi.move,mi.rise);     //重新生成箭头
        接口函数;                                        //重新显示箭头 
        delete(arrow);
    }
}

代码重构

        如果你没有被上面的代码所吓倒,那么我们可以继续.

        如果我们想要鼠标不只是"箭头"这一种图案,而需要更多选择,例如鼠标做成一朵花flower的图案,那么上面的代码肯定不满足要求.

        现在考虑把MouseMove设置成接口,    

class MouseMove{
                                  
    public:
       
     Virtual   void work()=0;                               
}

相关推荐

  1. 练习鼠标设计2_接口

    2024-02-20 19:16:01       52 阅读
  2. 练习:鼠标设计1_内容解析

    2024-02-20 19:16:01       49 阅读
  3. 接口抽象

    2024-02-20 19:16:01       67 阅读
  4. 抽象接口

    2024-02-20 19:16:01       56 阅读
  5. 接口、抽象内部

    2024-02-20 19:16:01       41 阅读
  6. 对象(2

    2024-02-20 19:16:01       31 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-20 19:16:01       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-20 19:16:01       106 阅读
  3. 在Django里面运行非项目文件

    2024-02-20 19:16:01       87 阅读
  4. Python语言-面向对象

    2024-02-20 19:16:01       96 阅读

热门阅读

  1. 基于python+django+vue.js开发的健身房管理系统

    2024-02-20 19:16:01       48 阅读
  2. 某movie搜索接口

    2024-02-20 19:16:01       45 阅读
  3. 深入理解C语言中的联合体(union)

    2024-02-20 19:16:01       45 阅读
  4. js之事件循环

    2024-02-20 19:16:01       51 阅读
  5. Qt之QChar类的字符判断

    2024-02-20 19:16:01       41 阅读
  6. Qt标准对话框设置

    2024-02-20 19:16:01       50 阅读
  7. 算法训练营day31,贪心算法5

    2024-02-20 19:16:01       53 阅读
  8. 阿里云上关于EDAS发布方式

    2024-02-20 19:16:01       35 阅读
  9. HTML单击图片独立放大

    2024-02-20 19:16:01       57 阅读
  10. 32RTC&BKP

    32RTC&BKP

    2024-02-20 19:16:01      54 阅读