Flex 多窗体显示 MDI Form
来源:互联网 发布:linux 显示中文 编辑:程序博客网 时间:2024/05/30 12:30
Flex有很多自定义的控件,实现一些很漂亮的很玄的界面效果。
添加Flexlib.swc控件,其中有一个效果是实现动态加载多窗体,并且可以重叠摆放和均匀摆放,界面类似于Mac窗体。在我们做地图开发的时候可以动态加载多个地图,然后实现多地图的联动(那就是后话了,以后再说)。现在先记录多窗体的实现Demo。
一。工程文件——属性——Flex Build Path——Library Path 添加swc
二。MDI.mxml
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
xmlns:flexlib="http://code.google.com/p/flexlib/"
creationComplete="onCreationComplete()" xmlns:ns="sample_content.*" viewSourceURL="srcview/index.html">
<mx:Script>
<![CDATA[
import mx.events.EffectEvent;
import flexlib.mdi.events.MDIEffectEvent;
import flexlib.mdi.events.MDIWindowEvent;
import flexlib.mdi.effects.MDIEffectsDescriptorBase;
import flexlib.mdi.effects.effectsLib.MDILinearEffects;//窗体效果
import flexlib.mdi.effects.effectsLib.MDIVistaEffects;//窗体效果
import flexlib.mdi.events.MDIManagerEvent;
import mx.controls.Alert;
import mx.controls.TextArea;
import mx.events.CloseEvent;
import mx.events.ListEvent;
private var eventMonitor:TextArea;
private var queuedEvent:MDIManagerEvent;
private var effectsList:Array;//把下拉效果菜单和样式菜单里面的选项定位一个数组 Array
private var stylesList:Array;
private var cssURL:String;
private function onCreationComplete():void
{
// create textfield
eventMonitor = new TextArea();
eventMonitor.percentWidth = 100;
eventMonitor.height = 150;
effectsList = new Array();//效果菜单数组
effectsList.push({data: flexlib.mdi.effects.MDIEffectsDescriptorBase, label: "No effects"});//效果菜单数组依次赋值
effectsList.push({data: flexlib.mdi.effects.effectsLib.MDIVistaEffects, label: "Vista"});
effectsList.push({data: flexlib.mdi.effects.effectsLib.MDILinearEffects, label: "Linear"});
effectsListCb.dataProvider = effectsList;
// these need refining, removing from explorer until then
stylesList = new Array();//样式菜单数组
stylesList.push({label: "Default"});//样式菜单数组依次赋值
stylesList.push({label: "Windows XP"});
stylesList.push({label: "Mac OS9"});
/*
stylesList.push({label: "Noir"});
stylesList.push({label: "Style 1"});
stylesList.push({label: "Style 2"});
stylesList.push({label: "Style 3"});
/**/
stylesListCb.dataProvider = stylesList;
// listen for window close
mdiCanvas.windowManager.addEventListener(MDIManagerEvent.WINDOW_CLOSE, confirmWindowClose);
//listen for all window events
mdiCanvas.windowManager.addEventListener(MDIManagerEvent.WINDOW_ADD, windowEventHandler);
mdiCanvas.windowManager.addEventListener(MDIManagerEvent.WINDOW_MINIMIZE, windowEventHandler);
mdiCanvas.windowManager.addEventListener(MDIManagerEvent.WINDOW_RESTORE, windowEventHandler);
mdiCanvas.windowManager.addEventListener(MDIManagerEvent.WINDOW_MAXIMIZE, windowEventHandler);
mdiCanvas.windowManager.addEventListener(MDIManagerEvent.WINDOW_CLOSE, windowEventHandler);
mdiCanvas.windowManager.addEventListener(MDIManagerEvent.WINDOW_FOCUS_START, windowEventHandler);
mdiCanvas.windowManager.addEventListener(MDIManagerEvent.WINDOW_FOCUS_END, windowEventHandler);
mdiCanvas.windowManager.addEventListener(MDIManagerEvent.WINDOW_DRAG_START, windowEventHandler);
mdiCanvas.windowManager.addEventListener(MDIManagerEvent.WINDOW_DRAG, windowEventHandler);
mdiCanvas.windowManager.addEventListener(MDIManagerEvent.WINDOW_DRAG_END, windowEventHandler);
mdiCanvas.windowManager.addEventListener(MDIManagerEvent.WINDOW_RESIZE_START, windowEventHandler);
mdiCanvas.windowManager.addEventListener(MDIManagerEvent.WINDOW_RESIZE, windowEventHandler);
mdiCanvas.windowManager.addEventListener(MDIManagerEvent.WINDOW_RESIZE_END, windowEventHandler);
mdiCanvas.windowManager.addEventListener(EffectEvent.EFFECT_START, effectHandler);
mdiCanvas.windowManager.addEventListener(EffectEvent.EFFECT_END, effectHandler);
}
private function effectHandler(event:MDIEffectEvent):void
{
var names:String = "";
for each(var win:MDIWindow in event.windows)
{
names += (names.length == 0) ? win.title : ", " + win.title;
}
eventMonitor.text += names + ": " + event.mdiEventType + " " + event.type + "/n";
eventMonitor.verticalScrollPosition = eventMonitor.maxVerticalScrollPosition;
eventMonitor.validateNow();
}
// default event handler
private function windowEventHandler(event:Event):void
{
if(event is MDIManagerEvent)
{
var mgrEvent:MDIManagerEvent = event as MDIManagerEvent;
if(eventMonitor.parent != null)
{
eventMonitor.text += mgrEvent.window.title + ": " + event.type + "/n";
eventMonitor.verticalScrollPosition = eventMonitor.maxVerticalScrollPosition;
eventMonitor.validateNow();
}
}
}
// the flex framework dispatches all kinds of events
// in order to avoid catching one of those and throwing a coercion error
// have your listener accept Event and check the type inside the function
// this is good practice for all Flex development, not specific to flexlib.mdi
private function confirmWindowClose(event:Event):void//确认是否关闭窗体
{
if(event is MDIManagerEvent && confirmCloseCb.selected)
{
// store a copy of the event in case we want to resume later (user confirms their intention)
queuedEvent = event.clone() as MDIManagerEvent;
// this is the line that prevents the default behavior from executing as usual
// because the default handler checks event.isDefaultPrevented()
event.preventDefault();
Alert.show("Seriously? Close it?", null, 3, null, handleAlertResponse);
}
}
// called when the Alert window is closed
// if the user said yes, we execute the default behavior of playing an effect
// and then removing the window by sending the stored event to
// the appropriately named executeDefaultBehavior() method
private function handleAlertResponse(event:CloseEvent):void
{
if(event.detail == mx.controls.Alert.YES)
{
mdiCanvas.windowManager.executeDefaultBehavior(queuedEvent);
}
}
private function addWindow():void//点击按钮,添加窗体
{
var win:MDIWindow = new MDIWindow();
win.width = 350;
win.title = "Window " + String(mdiCanvas.windowManager.windowList.length + 1);
mdiCanvas.windowManager.add(win);
}
private function toggleEventMonitor():void
{
if(eventMonitorCb.selected)
{
vbox.addChildAt(eventMonitor, 1);
}
else
{
vbox.removeChild(eventMonitor);
}
}
private function changeEffects():void//改变效果
{
mdiCanvas.effectsLib = effectsListCb.selectedItem.data as Class;
}
// currently not used
private function changeStyle(event:ListEvent):void//改变样式
{
switch(ComboBox(event.target).selectedLabel)
{
case 'Default' :
StyleManager.unloadStyleDeclarations(cssURL, true);
return;
break;
case 'Windows XP' :
cssURL = "WindowsXP_default.swf";
break;
case 'Mac OS9' :
cssURL = "MacOS9.swf";
break;
default:
break;
}
StyleManager.loadStyleDeclarations(cssURL);
}
]]>
</mx:Script>
<mx:VBox id="vbox" width="100%" height="100%">
<mx:ApplicationControlBar dock="true" width="100%" height="50" verticalAlign="middle">
<mx:Button label="Add Window" click="addWindow()" />
<mx:VRule height="35" />
<mx:Button label="Cascade" click="mdiCanvas.windowManager.cascade()" />
<mx:Button label="Tile" click="mdiCanvas.windowManager.tile(false, Number(10))" />
<mx:Button label="Tile + Fill Space" click="mdiCanvas.windowManager.tile(true, Number(10))" />
<mx:VRule height="35" />
<mx:CheckBox id="confirmCloseCb" label="Confirm window close" />
<mx:VRule height="35" />
</mx:ApplicationControlBar>
<flexlib:MDICanvas id="mdiCanvas" horizontalScrollPolicy="off" verticalScrollPolicy="off"
width="100%" height="100%" backgroundColor="#FFFFFF" backgroundAlpha="0"
>
<flexlib:MDIWindow id="win1"
title="Window 1 "
x="30" y="30" width="400" height="200" />
<flexlib:MDIWindow id="win2"
title="Window 2"
x="450" y="30" width="250" height="300" />
</flexlib:MDICanvas>
</mx:VBox>
</mx:Application>
- Flex 多窗体显示 MDI Form
- 如何使MDI窗体只显示当前点击Form
- MDI全屏显示窗体
- 主窗体(MDI窗体显示)
- 子窗体显示在MDI窗体上
- 多文档MDI窗体
- MDI 子窗体最大化时显示
- MDI子窗体ICON显示问题
- C#中MDI窗体关闭显示代码
- Mdi窗体客户区无边框显示
- Mdi窗体客户区无边框显示
- c# mdi多窗体实现
- 浅谈MDI窗体的多窗体编程
- Winform MDI窗体子窗体显示区域大小
- C#系统开发登录窗体在MDI窗体之前显示
- MDI子窗体标题栏显示在父窗体菜单栏上面
- MDI窗体内只显示一个子窗体
- MDI窗体
- 图片做超级链接的时候去除边框线
- GPRS开发系列文章之入门篇
- Hibernate的具体配置
- MFC文件操作大全
- 在XP环境下配置asp开发环境
- Flex 多窗体显示 MDI Form
- GPRS开发系列文章之进阶篇
- define( 'ROOT_PATH ', './../ ');
- Android 多个 Activity 调用 跳转
- 获取本地信息
- 如何使用grub硬盘安装fedora和ubuntu两个主流linux系统
- ASP.NET面试题(推荐_有答案)
- GPRS开发系列文章之实战篇
- IT人,请爱惜你的身体(转周公文章)