MSDB.UIFramwork学习札记(二)

根据个人的学习习惯将UIFramwork分成了前面的几个部分,今天来学习Image Elements 功能块。首先从基础类UIElements开始。
UIElements 是一个抽象类是所有其他Image Unit类的基础。我尝试从UIElments类的构成来还原作者的设计思路。UIElements由五大块构成,分别是:
事件对象
    在事件对象的定义中,作者定义了 
        public event MouseEventHandler MouseMove;  //Mouse Move事件
        public event MouseEventHandler MouseDown; //Mouse Down事件
        public event MouseEventHandler MouseUp; //Mouse Up事件
        public event EventHandler Click; //Click事件
        public event EventHandler Invalidate; //Invalidate事件 ,使绘图区无效以达到及时刷新绘图层的目的
      以上五类事件是从各类Image Unit(待绘对象)的事件中抽取出来的通用事件。每个待绘对象都需要处理这五大类事件。
公共字段

        private byte opacity;   //透明绘图处理
        private bool visible;   //可视化处理
        private string name;

        protected int height;
        protected int width;
        protected int left;
        protected int top;

        private Color foreground;
        private Color background;

        private UIElement parent;

       待绘对象的通用属性抽取。。
构造函数
       构造函数处理不做赘述,其中,作者将byte opacity 设置成255的值,以方便后续进行不透明处理
属性
      属性部分对字段进行get set 方法处理,其中需要对三个属性进行说明:
        public Rectangle Rectangle   //返回Elment 对象的区域范围。由left、top、width、height属性来确定。
        public Color Foreground     //在进行前景色和背景色的属性设置中,作者在set方法中加入了OnInvalidate()方法,使用此方法可以是在设置Elements的
        public Color Background   //Foreground和Background属性时可以达到及时刷新的效果。
方法
      public bool HitTest(Point point);
       HitTest方法可以提供判断待绘对象所属范围。从而帮助处理待绘对象的鼠标事件。
     protected virtual void OnRender(Graphics graphics);
        定义OnRender虚方法提供UIElements的继承类自身呈现特色的方法实现。
     public void OnInvalidate()和 public void OnInvalidate(UIElement element)方法
         OnInvalidate都是使区域无效的处理,作者在此重写了这个方法,OnInvalidate()方法 用来处理UIElement自身的Invalidate事件。OnInvalidate(UIElement element)方法用来处理继承自UIElement的类的Invalidate事件。
     OnClick(EventArgs),OnMouseMove(MouseEventArgs),OnMouseUp(MouseEventArgs),OnMouseDown(MouseEventArgs)
        这一系列的方法通过传递主界面的事件参数来处理待绘对象自身特有的各类事件处理。

      以上是本人对UIElement类的总结,从这个类的构成学习可以看到作者面向对象技术的娴熟,可以作为我们做其他的面向对象技术应用开发的很好的一个参照案例。也许内容过于简单,大家权当再复习一遍面向对象的入门吧 :)
  PS:对于OnInvalidate方法我不知道我的描述是否正确,请大家指教!
      

你可能感兴趣的:(UI)