碰到一个问题:
比如VEP、VC或者delphi的窗体设计器,我设计一个自定义的按钮,按钮的形状比较复杂,然后放到控件板上。
在设计期间通过拖拉的方式把该控件加到控件版的某个位置,它就能显示运行时期的外观。我不清楚的是:窗体设计器怎么得到你这个控件在运行时期的形状。
分析源代码吗?不可能,因为一般只有编译过的文件
难道在设计期间也可以运行?

解决方案 »

  1.   

    难道不可以吗?呵呵呵!一边编译,一边运行。不过,大多数的GUI只支持标准的组件,那些运行期间才有的东西是不会有的。
    所以,我认为不是运行产生的图形界面。而是根据组件的相互关系,内部计算出来的。也可以理解成伪运行。
      

  2.   

    实现这样的设计器是很复杂的,关于所见即所得GUI设计器的原理,下面有个地址,楼主可以参考一下:
    http://blog.csdn.net/mych/archive/2008/05/23/2474004.aspx
      

  3.   

    好像不是伪运行。
    我仔细看过android的layout设计器的源代码,把原本应该在android窗体上显示的窗体显示在了swt窗体上。canvas等UI类都被重新包装过了。
      

  4.   

    所见即所得,只要是符合标准的javabean,都可以。但为什么只要是javabean就可以呢?就要好好去了解什么是javabean,呵呵。
      

  5.   

    研究了ADT插件layout编辑器的源代码,可以肯定是在设计期间就在运行了。
    不过android组件不能直接在SWT上显示,需要对组件进行进一步包装,在具体绘制的时候运用适配器模式,把调用转发给AWT的graphics2D对象,整个机制还是很复杂的。
      

  6.   

    我认为通过introspect机制实现的。同时无论是在运行期还是在设计期,都是通过绘制实现的,可以想象一下,假如你自己实现一个界面设计器,是如何实现的。
      

  7.   

    这确实是个很复杂的问题。如果属于设计器的开发语言和设计器的生成一致的话,还可以搞。如果不一致,实在是难,比如用VC做java语言的GUI设计器
      

  8.   

    大哥,那是运行出来的效果。
    你用vc难道不是点击exe运行的吗?