`
yunzhongxia
  • 浏览: 647393 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

MDIWindow最小化到任务栏

    博客分类:
  • flex
阅读更多

MDIWindow本身的最小化到任务栏的功能用着很不方便,因此自己丰衣足食重写了最小化事件。先截个图让大家看看效果,项目组没有美工MM,因此界面比较丑请大家见谅。

 

 

 

思路如下:

          1.在MDICanvas的下面添加一个HorizontalList

          2.给MDICanvas的中添加MDIManagerEvent.WINDOW_MINIMIZE和MDIManagerEvent.WINDOW_CLOSE事件。

             WINDOW_MINIMIZE:最小化时屏蔽MDIwindow自身的最小化事件。

             WINDOW_CLOSE:点击窗口关闭按钮时,从HorizontalList中移除该窗口。

          3.MDICanvas中添加MDIwindow时向HorizontalList中添加数据

 

最小化和最小化按钮事件的代码如下:

 

/**
			 * 点击窗口的最小化按钮 最小化到任务栏
			 * 
			 */
			private function windowMinimizeHandler(event:MDIManagerEvent):void
			{
				if(event is MDIManagerEvent)
				{
					var mgrEvent:MDIManagerEvent=event as MDIManagerEvent;
					mgrEvent.window.visible=false;
					event.stopPropagation();
				}
			}
			/**
			 * 关闭窗口事件
			 * 
			 */
			private function windowCloseHandler(event:MDIManagerEvent):void{
				if(event is MDIManagerEvent)
				{
					var mgrEvent:MDIManagerEvent=event as MDIManagerEvent;
					for(var index:int;index<tbl.ac.length;index++){
						var item:TaskBarItem=tbl.ac.getItemAt(index) as TaskBarItem;
						if(mgrEvent.window==item.window){
							tbl.ac.removeItemAt(tbl.ac.getItemIndex(item));
						}
					}
					event.stopPropagation();
				}
			}

 

HorizontalList组件的代码如下:

 

<?xml version="1.0" encoding="utf-8"?>
<mx:HorizontalList xmlns:mx="http://www.adobe.com/2006/mxml"   dataProvider="{ac}" backgroundColor="#22668B" width="100%" height="35" borderStyle="outset" borderThickness="5">
	<mx:Script>
		<![CDATA[
			import flexmdi.events.MDIWindowEvent;
			import mx.collections.ArrayCollection;
			[Bindable]
			public var ac:ArrayCollection=new ArrayCollection();
			
			public function itemClick(obj:Object):void{
				var item:TaskBarItem=obj as TaskBarItem;
				if(item.window.visible){
					item.window.visible = false;
					item.window.dispatchEvent(new MDIWindowEvent(MDIWindowEvent.MINIMIZE,item.window));
				}else{
					item.window.visible = true;
					item.window.dispatchEvent(new MDIWindowEvent(MDIWindowEvent.MAXIMIZE,item.window));
					//把窗口置为顶层
					item.window.windowManager.bringToFront(item.window);
					//显示窗口上的最小化 最大化 正常按钮 记住一定要加这句 因为默认是隐藏的,只有鼠标点击顶部时才显示出来
					item.window.showControls=true;
				}
			}
			public function closeWindow(obj:Object):void{
				var item:TaskBarItem=obj as TaskBarItem;
				item.window.visible = false;
				item.window.dispatchEvent(new MDIWindowEvent(MDIWindowEvent.CLOSE,item.window));
			}
		]]>
	</mx:Script>
	<mx:itemRenderer>
		<mx:Component>
			<mx:HBox height="30" width="120" paddingRight="5" backgroundColor="#ADD6FB"  click="changeStyle('inset')" mouseOver="changeStyle('outset')"  
				borderStyle="outset"  verticalScrollPolicy="off"  horizontalScrollPolicy="off">
			    <mx:Script>
				<![CDATA[
					import mx.states.SetStyle;
					import mx.controls.Alert;
					private function changeStyle(borderStyle:String):void{
						this.setStyle("borderStyle",borderStyle);
					}
					
				]]>
				</mx:Script>
				<mx:HBox  height="30" width="80" click="outerDocument.itemClick(data)" paddingTop="0" paddingLeft="0">
					<mx:Image source="{data.icon}" includeInLayout="{data.icon==null?false:true}"/>
					<mx:Label text="{data.title}"/>
				</mx:HBox>
				<mx:HBox  height="30" width="20"  paddingTop="0" paddingLeft="0">
					<mx:Image source="img/ResizableTitleWindow/close.png"  alpha="0.2" toolTip="关闭该窗口" 
						 mouseOver="delImg.alpha=1" mouseOut="delImg.alpha=0.2"
						 id="delImg" click="outerDocument.closeWindow(data)" />
				</mx:HBox>
			</mx:HBox>
		</mx:Component>
	</mx:itemRenderer>
</mx:HorizontalList>

 

         

 

以上给出了实现最小化到任务栏的大部分代码,希望能和大家一起交流Flex的开发经验。

  • 大小: 50.3 KB
3
1
分享到:
评论
8 楼 jacky66zjx 2012-08-17  
楼主,TaskBarItem这个的定义可以给出吗?谢谢。
急需要zhangjinxiong1986@gmail.com谢谢
7 楼 yedehu476556126 2012-06-13  
请楼主共享下源码  急切需要中,鞠躬感谢:476556126@qq.com
6 楼 yunzhongxia 2011-12-20  
demojava 写道
我改过mdi的源码代码就添加了一个ApplicationControlBar
我断定,你代码你代码在浏览器大小切换的时候会走形,在添加到一定数目的时候,是后面的不会显示。。。。
不过唯一不美观的是,不能做到打开一个window.就在地址栏添加一个当前的window缩小的应用,,希望交流

谢谢你的答复,上面只是一个简单的例子,在项目中也添加了最小化按钮。
5 楼 demojava 2011-12-19  
我改过mdi的源码代码就添加了一个ApplicationControlBar
我断定,你代码你代码在浏览器大小切换的时候会走形,在添加到一定数目的时候,是后面的不会显示。。。。
不过唯一不美观的是,不能做到打开一个window.就在地址栏添加一个当前的window缩小的应用,,希望交流
4 楼 alexfhq 2011-07-27  
可以把代码共享下吗?愿意一齐交流,谢谢, 40463600@qq.com
3 楼 lasimmm 2011-01-15  
可以共享一下这个源码呢??

Email:lasienjoy@gmail.com

thanks。。急需要··谢谢
2 楼 orangfavor 2010-09-14  
楼主辛苦,方便的话share下源码:orangfavor@yahoo.com.cn
1 楼 orangfavor 2010-09-13  
TaskBarItem,这个声明可以麻烦楼主给解释一下么,代码很好

相关推荐

    WPF实现类似MDI子窗体的功能

    为了模拟MDI子窗体的效果,你需要将`ChildWindow`添加到主窗口的某个容器控件(如`Grid`或`Canvas`)中。这可以通过设置`ChildWindow`的`Parent`属性来实现: ```csharp childWindow.Parent = this; // 'this'代表主...

    梦优勿扰的MDI窗口支持库1.0版(MDIWindow.fne)-易语言

    1. **MDI容器窗口**:提供一个可以承载多个子窗口的主框架窗口,用户可以在同一个应用程序界面下切换和操作多个子窗口,提升多任务处理能力。 2. **子窗口管理**:支持创建、显示、隐藏、关闭和排列子窗口。开发者...

    C#-【控件篇】Winform中使用MDI窗体(中级)

    而MDIChild窗体是在MDIParent内部打开的窗口,它们可以被最大化、最小化、移动和关闭,但始终不会脱离MDIParent的控制范围。 要创建一个MDI应用,首先在Visual Studio中新建一个Windows Forms Application项目,...

    myJSFrame_api0.21.zip

    JavaScript开发框架是为了加速前端开发进程,通过预定义的函数库和结构,简化DOM操作、事件处理、动画效果、异步通信等常见任务。它们通常提供一套统一的API,使得代码更简洁、可维护性更强。myJSFrame可能是这样一...

    易写易库MDI窗口支持库源码 -易语言

    3. **消息处理**:MDI应用程序需要处理来自子窗口的消息,如关闭、最大化、最小化等。支持库可能包含了一套完整的消息处理机制,使开发者无需深入了解底层细节就能实现这些功能。 4. **例程示例**:描述中提到...

    flexlib.swc update

    修改MDIWindow.as文件的 onWindowMove 添加两个属性 只有在 windowManager.enforceBoundaries =false时候可用 1. floatInCanvas 是否停靠 2.floatSize 停靠边界露出部分的宽度或者高度 默认为 30px 这样 窗体就...

    如何让MDI窗口只运行一个实体

    但我们的目标是确保只有一个MDIChild处于活动状态,新的打开请求会切换到已存在的窗口,而非创建新的。 以下是实现此功能的一般步骤: 1. **监听子窗口创建事件**:你需要监听MDIParent窗口的MdiChildActivate事件...

    使用DevExpress构建多文档界面设计

    然后,你可以利用DevExpress的`MdiWindow`类或者`XtraForm`类,这些类是专门为MDI应用程序设计的,提供了一流的用户体验和定制选项。 在布局方面,DevExpress提供了一系列的布局管理器,如`DockPanel Suite`和`...

Global site tag (gtag.js) - Google Analytics