小弟最近遇到一个需求 : 
1:用swt
2:shell中有一个mapinfo的地图
3:用一个swt的组件(label,canvas等等,只要能画图形的就可以) 覆盖在地图的上面(难点)
4:组件要透明,可以看到下面的地图,然后在组件上画东西(几何图形之类的)
小弟搞了N久,未有结果,组件要么透明,直接看到了桌面,要么透明能看到shell的背景,无论怎样都看不到下面的地图
相当之郁闷,总的来说问题就一个,组件要覆盖在地图上面,能透过组件看见地图请大大们帮忙,或提示一下
1:用什么组件?
2:用什么布局?
3:如何实现透明,但是能看到下面的地图?小弟一共97分,全部贡献出来,希望有好的解决办法,小弟也曾想过抓地图的图像,当作组件的背景,但是过于牵强
全靠csdn的大大们了

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【zhangyuwei_】截止到2008-07-07 22:19:59的历史汇总数据(不包括此帖):
    发帖的总数量:11                       发帖的总分数:150                      
    结贴的总数量:3                        结贴的总分数:70                       
    无满意结贴数:0                        无满意结贴分:0                        
    未结的帖子数:8                        未结的总分数:80                       
    结贴的百分比:27.27 %               结分的百分比:46.67 %                  
    无满意结贴率:0.00  %               无满意结分率:0.00  %                  
    楼主该结一些帖子了
      

  2.   

    3种思路:
     
    1 因为SWT没有 transparent widget一说,但某些平台有可以透明control,比如Windows,这需要你把修改swt的jni文件,使之可以创建透明窗口,并把java interface定义在OS类中。简单来说就是正对某种平台扩展SWT,就如 http://feeling.sourceforge.net/ 做的一样,它就有透明窗口,把代码下来看看。 推荐这种做法,难度小。2 Eclipse的graphical editor有一种画图框架draw2d,其中figure就可以透明(opaque),host在canvas上,canvas不能透明,所以不能直接用,但可以用它的想法,就是在一块区域自己画,并维护这块区域的数据结构,数据交互。比如你的地图在某个composite上,那么这个composite就可以作为host,在composites收到paint event时,把透明区域化出来,以后composite上收到的任何鼠标键盘操作,转交给另外一个专么针对这块透明区域的event dispatcher来处理。 假设你在透明区域的A点单击了一下,然后在B点单击了一下,composite的维护一个point[2]的数据结构,在B点单击完了之后,event dispatcher调用的某个event listener填充point[2]的两个点,并通知composite把A,B点形成的rectangle重画,效果就出来了。当然这个实现起来会非常麻烦,首先透明区域就有一个有限状态机,这需要你对图形编程很了解。3 使用swt host AWT/Swing,Swing是支持透明概念的。希望能有所帮助。
      

  3.   

    因为你的具体需求还是不清楚,按你描述的,如果是我,我会这样做:
    ①把map当做shell的背景图片
    ②为shell添加paint事件listener,不要任何组件,把你想不想显示的部分画成你需要的效果,你没有画的部分自然可以显示出来的
      

  4.   

    结贴了,对于chiny 大大提供的帮助,我会去试试,如果有了结果,我会来把结果贴出来的,不论怎样,谢谢各位大大的指点