项目中要实现Flex打开文件夹选择框(Flex做为桌面程序的UI),没办法,如果不用AIR只能在下面加一层Container了。网上搜来搜去差不多都是讲FSCommand怎样与VC++交互,可是FSCommand不能及时返回值呀。经过一番摸索,终于调通了ExternalInterface在VC++中的处理流程,看代码。
void CMyBicapDlg::OnFlashCallShockwaveflash1(LPCTSTR request)
{
// TODO: Add your control notification handler code here
// "<invoke name='%s' returntype='xml'><arguments><string>%s</string></arguments></invoke>"
// parse request
TiXmlDocument request_xml;
request_xml.Parse(request);
const char* request_name = request_xml.RootElement()->Attribute("name");
if (strcmp(request_name,"savedVideosDirectory") == 0 || strcmp(request_name,"bufferDirectory") == 0 || strcmp(request_name,"preferredExportDirectory") == 0)
{
// choose path
CoInitialize(NULL);
BROWSEINFO bi;
bi.hwndOwner = this->GetSafeHwnd();
bi.pidlRoot = NULL;
bi.pszDisplayName = NULL;
bi.lpszTitle = NULL;
bi.ulFlags = BIF_BROWSEFORCOMPUTER|BIF_RETURNONLYFSDIRS|BIF_STATUSTEXT;
bi.lpfn = NULL;
LPCITEMIDLIST pidl = SHBrowseForFolder(&bi);
if(pidl != NULL)
{
TCHAR tpath[MAX_PATH] = _T("");
BOOL bresult = SHGetPathFromIDList(pidl, tpath);
if (bresult)
{
std::string re_value = "<string>";
re_value = re_value+tpath+"</string>";
m_FlashPlayer.SetReturnValue(re_value.c_str());
}
}
CoUninitialize();
}
}
首先,需要在项目中嵌入Flash player插件,网上有很多例子。另外Flex也要写好代码,这里略掉。
添加一个ExternalInterface的事件处理函数,对于Flash player来讲就是FlashCall事件(跟FSCommand不同的),这里的事件处理函数是void CMyBicapDlg::OnFlashCallShockwaveflash1(LPCTSTR request)。没有返回值(下面会讲到),参数是一个XML格式的字符串。格式是"<invoke name='%s' returntype='xml'><arguments><string>%s</string></arguments></invoke>",去查查帮助就知道了。
处理request:标准C++没有处理XML的库,我去下载了tinyxml,小巧好用。下面就是按照个人需要处理request了,我这里是,打开一个文件夹选择对话框然后选择一个路径。
返回值。事件处理函数是没有返回值的,但是flash player提供了一个方法:m_FlashPlayer.SetReturnValue(re_value.c_str());,专门传递返回值,格式是<string>%s</string>(也可以是别的AS结构,具体看帮助)。
需要提醒的是,在处理期间要block掉Flex,ExternalInterface.call是有返回值的,如果不阻塞Flex,可能返回就是NULL,呵呵,不知道深层原因。另外,反过来调用格式也是一样的。
调试环境:win xp, VC++6.0, Flex builder 2.0
分享到:
相关推荐
标题“flex与js交互 关于ExternalInterface使用的小例子”指出了本文将探讨如何使用Flex的ExternalInterface类与JavaScript进行通信。ExternalInterface是Flex提供的一个API,允许ActionScript(Flex的主要编程语言...
本篇文章将探讨一个关于“flex与js通信”的小例子,它主要涉及到Adobe Flex和JavaScript之间的交互,这对于创建富互联网应用程序(RIA)是非常重要的。Flex是一种用于构建富客户端应用的开源框架,基于ActionScript...
本教程通过一个实际的调用实例,展示了Flex与Flash如何相互通信。 Flex是基于ActionScript 3.0的开源框架,主要用于构建富互联网应用程序(RIA)。它提供了MXML和ActionScript语言来创建用户界面,具有强大的组件库...
### SWF之间通信、Flex与SWF之间通信 在探讨SWF之间以及Flex与SWF之间的通信时,我们首先需要了解SWF文件的基本概念及其在Adobe Flash平台中的作用。SWF(Shockwave Flash)是一种被广泛应用于网页动画、游戏和其他...
- **ExternalInterface API**: Flex SDK提供了`ExternalInterface`类,允许ActionScript(Flex的编程语言)代码与JavaScript进行双向通信。通过`addCallback`方法注册回调函数,使JavaScript可以调用Flex中的方法,...
标题中的"Flash Flex与JS通信"指的是如何让运行在Adobe Flash Player中的Flex应用与浏览器中的JavaScript代码进行数据交换和功能调用。这种通信机制通常被称为External Interface或Bridge技术,它允许Flex应用与网页...
本篇文章将详细讲解JS与Flex之间的通信方式以及互转实例。 首先,我们探讨JS与Flex之间的通信机制。这种通信通常通过两种方式实现:Flash Player的LocalConnection API和使用SWFObject加载的Flex组件。 1. **...
Flex与JavaScript交互是一种常见的技术,它允许在Adobe Flex(基于ActionScript 3的富互联网应用程序框架)和网页中的JavaScript之间进行通信。这种交互性对于构建混合型应用,特别是在需要利用浏览器内核特性的Web...
总结来说,Flex与JavaScript之间的通信依赖于`ExternalInterface`,它提供了调用JavaScript函数和注册可被JavaScript调用的Flex方法的能力。这种通信方式使得两种技术能够协同工作,为开发者提供更丰富的用户交互...
Flex与JavaScript的相互通信是Web开发中的一个重要技术,它允许富互联网应用程序(RIA)如Flex应用与网页中的JavaScript代码进行交互,实现更丰富的用户体验。本文将深入探讨这一主题,结合给定的压缩包文件...
在Flex项目中,你需要引入`flash.external.ExternalInterface`库,这样Flex应用才能与JavaScript环境通信。在Flex组件或ActionScript类中,你可以使用`ExternalInterface.addCallback()`方法来注册一个函数,使其可...
在Flex应用中,可以通过ActionScript 3.0 (AS3)与Flash CS中的AS3代码进行通信。首先,你需要在Flash CS中编写好需要调用的方法,并确保这些方法是公开的。然后,在发布SWF文件时,确保ActionScript版本设置为3.0。...
Flex调用Flash函数的机制与Flash调用Flex类似,也是通过`ExternalInterface`。在Flash中,我们需要定义一个可被外部调用的函数: ```as3 public function flashFunction(message:String):void { trace("Flash收到...
5. **通信机制**:为了实现MFC与Flex之间的通信,可以利用Flash Player的ExternalInterface接口。在Flex端,我们可以注册ActionScript函数,使其能在JavaScript中调用,然后通过MFC调用JavaScript函数来实现通信。在...
1. **ExternalInterface**: 这是Flex提供的一种API,允许ActionScript代码调用JavaScript函数,同时也允许JavaScript调用Flex组件的方法。在使用ExternalInterface之前,需要确保在Flex应用中启用它,这可以通过在...
- Adobe提供了一个叫做`Flash Player External Interface`(简称ExternalInterface)的API,它允许Flex应用与JavaScript进行通信。Flex端通过调用这个接口,可以暴露方法给JavaScript,反之亦然。 2. **在Flex中...
在Flex中,我们可以使用`ExternalInterface`类来与JavaScript进行交互。`ExternalInterface.addCallback`方法允许我们在JavaScript中调用Flex组件的方法,而`ExternalInterface.call`方法则用于在Flex中调用...
除了上述核心功能外,`ExternalInterface`还提供了一系列标准的`Object`原型方法,如`hasOwnProperty`、`isPrototypeOf`、`...提供了对`ExternalInterface`实例的进一步控制和操作能力...
本文将详细介绍如何使用ExternalInterface接口实现Flex与JavaScript之间的相互调用,并给出具体的示例代码。 #### 二、Flex调用JavaScript方法 在Flex中调用JavaScript是一种常见的需求,这使得Flex能够利用网页中...
在 Flex 应用程序中,通过 ExternalInterface API 可以与 JavaScript 进行通信。ExternalInterface 提供了一种方法,使得 Flex 中的 ActionScript 代码能够调用网页中的 JavaScript 函数,反之亦然。这种交互允许 ...