flex:弹出一个能拖动的canvas!

在flex里,如果我们需要弹出一个窗口,经常选择的弹出组件是TitleWindow。

可是这个TitleWindow的样式过于呆板了,看久了难免会视觉疲劳,所以我宁愿弹出的一个自定义的Canvas。弹出一个Canvas是很容易的事情,只要把PopUpManager.createPopUp()方法的第二个参数改成你要弹出的组件类名就可以了。可是要做出一个功能齐全的弹出窗口还需要的解决几个问题:1,关闭按钮 2能够拖动。如果还想有的话,还可以有最大化和最小化按钮,弹出效果等。

关闭按钮的问题很好解决,只要加个能点击的东西(比如Button),在点击的时候调用PopUPManager的removePopUp()方法即可。 

能够像TitleWindow一样能够在窗口里自由拖动它该如何实现呢?

我想在sdk的TitleWindow的源代码里应该有答案。先打开帮助文档,浏览一下TitleWindow的属性和方法。我找到了isPopUp属性和startDragging和stopDragging方法 ,哈哈,我想就是它们了。isPopUp是UIComponent的属性,startDragging和stopDragging方法是继承自Panel的。所以打开Panel的源文件吧!

(panel的源文件在这里:D:\Program Files\Adobe\Flex Builder 3\sdks\3.3.0.4852\frameworks\projects\framework\src\mx\containers,其中D:\Program Files\Adobe\Flex Builder 3是你flex builder的安装路径)

打开Panel.as,搜索startDragging这个关键字 ,然后顺着这个函数找下去你就会找到使TitlePanel能够拖动的函数了。嘻嘻。

下面就是能够使TitleWindow(它继承自Panel)能够拖动的思路:

当点击标题栏时,触发了MouseDown事件,在事件处理函数(titleBar_mouseDownHandler)里调用startDragging方法,在startDragging里又加了三个监听函数,监听鼠标活动,当鼠标移动时(systemManager_mouseMoveHandler)移动组件,鼠标离开时stropDragging。 

照着这个思路你可以自己写代码,也可以直接把这部分考到你的自定一组件里去。

下面是我自定义的基于Canvas的弹出组件:

 

 下面是这个组件的源代码:/Files/orchid/codesource.rar

与大家共同学习吧! 

posted @ 2009-10-31 12:12  orchid  阅读(4225)  评论(2编辑  收藏  举报