[Flex]打造属于自己的Apollo(一)

呵呵,大家看看标题是不是很诱人啊,其实如果各位朋友看完本章,就不会有这个感觉了!所以kenshin就言归正传。

首先先说说Apollo,自从去年就开始传说的沸沸扬扬的Apollo慢慢的从今年的Adobe的Max2006慢慢浮出水面以来,Apollo就越来越吸引人的眼球了(我在这里不想讨论Apollo的好坏,这不是本篇文章的讨论范围)。

在来说说Apollo的功能:

Apollo的总的来说的功能就是:可以在桌面上运行flash、flex等应用程序,即让flash/flex脱离浏览器成为操作系统的一级公民、打破浏览器的限制。并同时具有对OS的操作能力。

在进行上述功能细分:
1、 具有flash/flex的超炫的效果。
2、 可以直接进行IO操作或进一步对API的操作,即与桌面直接来实现像托拽,剪贴板,系统盘图标以及扩展文件名注册等功能的操作。

基于上述的功能的分解,可以这么理解:

1、 第一部分的功能就现有工具来说,Flex和Flash 完全可以胜任这个要求。我这里推荐Flex
2、 第二部分的功能就现有工具来说,基本上市面流行的开发工具,例如VB、VC、DotNet等均可以实现这种功能。我在这里推荐DotNet

那如果才能让Flex和DotNet进行连接或通讯呢?答案其实很简单,Adobe刚刚发布的Action script3就完全胜任这个功能,即可以作为Flex和DotNet的连接的纽带(可以是他们2个进行通讯)所使用的函数就是-------------- ExternalInterface

呵呵,其实很简单是不是。其实已经有很多人在用这种技术了,我也不是第一个人,但是网上用这种方式的文章的确很少,所以kenshin就给大家写一篇,算是抛砖引玉吧。希望明白这种架构的朋友不要批评我,毕竟不明白的朋友还有很多,包括我自己也是。

下面我就帖一下基于这种架构的一个project。
开发环境:Flex2 + C#2005
运行环境:FlashPlayer9+.net2

截图如下:





具有以下功能:

1、 flash一样超炫的显示效果。
2、 具有桌面托盘、调节透明度、是否最前端显示、随windows启动、定时查询天气预报,鼠标拖动、锁定窗体的功能。

在功能上面还有一些缺陷。但是总不失为一种在桌面上面显示flash的一种途径。也算是在Apollo发布前的一种聊以自慰吧。我会在慢慢在以后的写一下具体的代码给大家的。首先大概描述一下flex与c#互相通信在代码上面的写法。

Flex与C#之间进行通讯:
Flex端:

Var strReturn:String = ExternalInterface.call("testSentCSharp", "可以填写flex传入的参数,可以是多个参数");

C#端: 

flashControl.FlashCall += new _IShockwaveFlashEvents_FlashCallEventHandler(flashControl_FlashCall);
private void flashControl_FlashCall(object sender, AxShockwaveFlashObjects._IShockwaveFlashEvents_FlashCallEvent e)
{
          String strReturn = e.request;
}

C#与Flex端进行通讯:
C#端:

String request = "<invoke name=\"testExternalAPI\" returntype=\"xml\"><arguments><string>c

3、传入的参数</string></arguments></invoke>";

Flex端:

ExternalInterface.addCallback("testExternalAPI", returnCSharpResult); 

public function returnCSharpResult (p_strParam:String):String {
var strReturn:String = p_strParam;
return "这是来自Flex的Return";
}

今天就先写到这里,以后我会详细的写出具体的写法。有这么问题请在下面留言,欢迎大家热烈讨论:)

PS:本篇文章未经Kenshin同意请不要转载,请尊重Kenshin的劳动成果。