`

使用自定义窗口以及对窗口的移动,缩放,关闭操作

阅读更多

 
这个教程主要针对对flex有一定基础,准备开始AIR开发的朋友。由于AIR是针对桌面应用程序,所以相对于flex的web应用,自然就多出了对应用程序窗口的控制。而 AIR的一大特点就是允许开发者使用自定义的窗口代替系统窗口从而使开发者对程序UI的设计更加随心所欲,设计出独具个性风格的跨平台的桌面应用程序。

罗嗦的话到次为止,下面正式开始主题,教程主要实现了以下功能。

1. 屏蔽系统窗口、 flash窗口、窗口底部状态栏。使用自定义窗口。
2. 对自定义窗口的缩放、移动、关闭。

在实现以上操作的过程中,我加入了一些额外的操作来丰富我们的demo,都是很简单,很实用的东西。

3. 移动窗口时实现半透明效果,移动结束时还原。
4. 关闭窗口动画。
5. 窗口背景填充。


1. 屏蔽系统窗口, flash窗口,窗口底部状态栏。使用自定义窗口。

当一个AIR项目创建成功后,你会发现相对与 web项目,你的工程目录下多了一个名为 XXX-app.xml的文件,这是我们项目的配制文件,实现自定义窗口就是靠它。打开它,修改如下代码:

<!-- The type of system chrome to use (either "standard" or "none"). Optional. Default standard. -->
<!--<systemChrome></systemChrome>

去掉对systemChrome的注释,改为

<!-- The type of system chrome to use (either "standard" or "none"). Optional. Default standard. -->
<systemChrome>none</systemChrome>

这样我们就去掉了系统窗口,转而使用了flash的自带窗口,下面我们把flash窗口也去掉。在你的主mxml文件中设置WindowedApplication 的这些属性

<mx:WindowedApplicationshowTitleBar="false"borderThickness="0"showStatusBar="false"showGripper="false" ..... />

这样就完全去掉了所有的窗口,程序运行后只显现应用程序的内容。大家可以参考帮助手册来了解以上属性的意思。说到这里就引出了下一个问题,屏蔽了所有窗口以后如何对窗口进行基本的,放大,缩放,关闭操作呢。我们看下面。


2. 对自定义窗口的缩放,移动,关闭。

AIR比flex web应用多了一个类叫NativeWindow,我们就是靠这个类对窗口就行操作。在demo中,我用了以下几个方法来移定窗口,他们都在鼠标MouseDown event中被触发。

this.nativeWindow.startResize("L");
this.nativeWindow.startResize("R");
this.nativeWindow.startResize("T");
this.nativeWindow.startResize("B");
this.nativeWindow.startResize("TL");
this.nativeWindow.startResize("RB");

很容易可以看出,L R B T代表 Left, Right, Bottom 和 Top, 所以在调用startResize时设置适当的参数我们就可以轻易的实现对窗口各个方向的缩放。对于窗口的移定,在mouseDown event中使用

this.nativeWindow.startMove();

而对窗口的关闭,则很简单的在按钮click事件调用this.close()。

好了,以上就是对自定义窗口的操作。下面的东西我是用来完善我的demo,使它cool一点。相信大家在自己的应用程序中也会需要类似的东西,一个应用程序除了功能,细节上的处理也是很重要的。

3. 移动窗口时实现半透明效果,移动结束时还原。

要实现这个效果我们需要重新打开我们的XXX-app.xml文件,设置以下内容。

<!--Whether the window is transparent. Only applicable when systemChrome is none. Optional. Default false.-->
<transparent>true</transparent>

这个可以允许我们让应用程序的背景透明,这个很有用,比方说QQ就是一个背景透明的应用程序,利用背景透明,我们可以开发出很独特的应用程序。接下来要做的就简单了。

在上面移动窗口的mouseDown事件中加入 this.alpha = 0.x; 下面是demo中的代码。我将透明度设为0.6,this. alpha只针对应用程序的背景设置透明,如果你想让更多的东西透明,只需要对相应的控件设置alpha既可。

private function moveMe():void{
this.nativeWindow.startMove();
this.alpha = 0.6;
}

让透明还原我在mouseUp事件中设置alpha =1;

private function mouseUpHandle():void{
this.alpha = 1;
}

这样简单的设置也许就会使你的应用程序看起来不一样,怎么不试试呢:)

4. 关闭窗口动画。

我使用了下面的Iris效果对在窗口关闭时使用。有什么效果呢,大家关闭一下就知道了。 flex中内置了很多效果给我们使用,很多时候我们只需要适当的组合,就能得到意想不到的效果,比如 Move与 WipeDown一起可以实现Mac系统,菜单向下滑出的效果。诸如此类,只要有想像力,我们可以用很简单的代码,实现很有用的功能。 在demo 中,如下设置得到关闭动画

<mx:WindowedApplicationcloseEffect="irisIn"..... />

<mx:Iris id="irisIn" duration="500" showTarget="false"/>

5. 窗口背景填充。

这个功能其实在开发程序的时候用的不多,我是不想让demo看起来太单调所以加了背景,我们知道flex是不能像Html那样轻易的让背景重复显示的,所以我们的用一些特殊方法处理以下,demo中的 setBackground方法用于设置整个背景。这里面涉及到的 Bitmap, BitmapData, Graphics类的具体作用,大家感兴趣的话可以看帮助手册,我的观点是当里用到的时候查帮助也不迟,只要知道有这么些个类可以为你干什么活就好。

private function setBackground():void{

var backgroundImage :Bitmap;
var backgroundBitmapData :BitmapData;

backgroundImage = new bg();
backgroundBitmapData = new BitmapData( backgroundImage.width, backgroundImage.height );
backgroundBitmapData.draw( backgroundImage );

workarea.graphics.beginBitmapFill( backgroundBitmapData, null,true );
workarea.graphics.drawRect(0,0, 2000, 2000);
workarea.graphics.endFill();
}

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/turkeyzhou/archive/2008/11/28/3406066.aspx

分享到:
评论

相关推荐

    QT自定义窗口边框

    本教程将深入探讨如何在QT中实现自定义窗口边框,主要涉及的技术点包括QWindow、QOpenGLWidget以及QEventLoop等。 首先,我们需要了解QT中的窗口系统。QT框架提供了一个名为QWindow的基类,它是所有图形窗口的基础...

    Qt去掉窗口标题栏实现移动缩放

    在Qt编程中,有时我们可能需要自定义窗口的外观,比如去掉传统的窗口标题栏,同时保持窗口可移动和缩放的功能。"Qt去掉窗口标题栏实现移动缩放"这一主题,就是探讨如何在Qt应用程序中实现这样的效果。下面将详细讲解...

    QT 自定义无边框窗体,支持边缘拖拽缩放

    QT框架是Qt公司开发的一种跨平台的C++图形用户界面应用程序开发框架,广泛应用于桌面应用、移动应用以及嵌入式系统。在QT中,我们有时需要创建无边框窗体,以便实现更自由的布局和设计,同时还要支持边缘拖拽以实现...

    QT实现的自定义窗口框架

    这个自定义窗口框架是利用QT库创建的一个项目,目的是实现更灵活和个性化的窗口操作功能。 首先,我们要理解QT中的窗口系统。在QT中,`QWidget`是所有图形用户界面(GUI)元素的基础类,包括窗口。`QMainWindow`是...

    WPF中的自定义窗口+停靠窗口,带启动界面

    WPF自定义窗口,保留原生窗口的所有功能,如阴影, 模态闪动,窗口外部拖动改变大小,拖动到屏幕边缘行为,最大最小化动画。使用dock高仿vs2017+vs2019样式。自定义简单画布控件,可移动或缩放,类似ps设计界面。

    PyQt5实现无边框窗口的标题拖动和窗口缩放

    当鼠标按下和移动时,可以通过检测鼠标位置来判断是进行窗口移动还是边角缩放操作。 窗口缩放通常是通过改变窗口大小限制来实现的。在 `QUnFrameWindow` 类中,我们设置了最小宽度,并且通过监听鼠标事件,可以在...

    WPF自定义窗口+停靠窗口,带启动界面

    WPF自定义窗口,保留原生窗口的所有功能,如阴影, 模态闪动,窗口外部拖动改变大小,拖动到屏幕边缘行为,最大最小化动画。 使用阿瓦隆dock高仿vs2017+vs2019样式。 自定义简单画布控件,可移动或缩放,类似ps设计...

    Qt无边框窗口移动、拉伸、缩放

    // 在这里处理窗口移动后的逻辑,如更新界面状态等 } ``` 在`main.cpp`中,创建并显示`Widget`实例: ```cpp #include "widget.h" #include int main(int argc, char *argv[]) { QApplication a(argc, argv); ...

    Qt 实现无边框窗口,支持缩放窗口大小

    要使无边框窗口看起来更专业,可以自定义窗口的边角样式和边缘效果,例如圆角或者阴影效果。这通常涉及到`QPainter`的使用,以及对`paintEvent`的重写。 6. **编译与运行** 使用QT5.8+MinGW编译Qt项目时,确保Qt...

    易语言无边框窗口缩放

    在“易语言无边框窗口缩放”这个主题中,我们主要探讨的是如何在易语言中实现一个没有传统边框的窗口,并且能够进行自由缩放的操作。 首先,无边框窗口是指不包含标准标题栏、最大化、最小化和关闭按钮的窗口,这样...

    易语言窗口无边框调整尺寸,移动窗口

    易语言是一种专为初学者设计的编程语言,它以其简洁的语法和中文界面著称,降低了编程的入门难度。在易语言中,我们经常会遇到创建...通过编写适当的窗口过程代码,可以创建出符合设计需求的自定义窗口,提高用户体验。

    Qt QGraphics 实现可移动缩放的矩形框

    在本文中,我们将深入探讨如何使用Qt的QGraphics模块实现一个可移动和缩放的矩形框。QGraphics是Qt库中的一个强大组件,它提供了一种高效且灵活的方式来处理图形用户界面(GUI)中的图形元素。这个示例项目...

    易语言源码无边框窗口缩放.rar

    易语言是一种专为初学者设计的编程语言,它采用...通过分析和理解这段源码,开发者可以掌握如何在易语言中创建自定义窗口,以及如何实现用户友好的交互操作,这对于提高编程技能和深入理解窗口系统的工作原理大有裨益。

    Qt 自定义界面(窗体缩放-跨平台终极版) 无边框 frameless helper widget

    使用 installfilter 截获窗口事件来缩放和移动窗口, 不需要派生, 适合任何从QWidget 派生而来的窗口。 http://blog.csdn.net/liang19890820/article/details/50557240 修改自 一去丶二三里 整理的代码。

    javascript自定义浏览器窗口

    在本文中,我们将深入探讨如何利用JavaScript来实现自定义浏览器窗口的功能,包括窗口拖动、放大缩小、最小化以及全屏操作。 一、窗口拖动 在JavaScript中,我们可以使用事件监听来实现窗口拖动的功能。首先,我们...

    QWidget无标题窗口,可随意缩放拖动

    总结来说,创建一个无标题、可自由缩放和拖动的`QWidget`窗口需要对Qt的事件处理机制有深入理解,包括鼠标事件的处理、窗口标志的设置以及窗口几何属性的调整。`SizableFrame`这个类提供了一个实现此类功能的基础...

    实现窗口移动以及拉伸movewindow

    这个源码实例使用C++语言展示了如何模拟微软的自定义窗口移动和拉伸功能,以达到更加灵活和美观的效果。让我们深入探讨一下这个过程涉及的关键知识点。 1. **窗口消息处理**: - `WM_LBUTTONUP`:左键释放消息。当...

    自定义缩放移动还原控件

    在本案例中,我们讨论的是一个特定的控件功能——"自定义缩放移动还原控件"。这个功能允许用户通过交互操作来改变控件的大小、位置以及恢复到初始状态。这种交互性在许多现代软件中是非常重要的,特别是在WPF...

    arcgis 自定义弹出窗口

    总的来说,自定义ArcGIS for Silverlight的弹出窗口涉及UI设计、数据绑定、事件处理等多个方面,需要对Silverlight和ArcGIS API有深入的理解。通过以上步骤,开发者可以创建出符合业务需求的个性化弹出窗口,提升GIS...

Global site tag (gtag.js) - Google Analytics