<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>WOW, The Web : ActiveX</title><link>http://blogs.msdn.com/jijia/archive/tags/ActiveX/default.aspx</link><description>Tags: ActiveX</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>如何在 WPF 中嵌入 Flash (ActiveX)</title><link>http://blogs.msdn.com/jijia/archive/2007/06/07/wpf-flash-activex.aspx</link><pubDate>Thu, 07 Jun 2007 18:13:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:3143195</guid><dc:creator>jijia</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/jijia/comments/3143195.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jijia/commentrss.aspx?PostID=3143195</wfw:commentRss><description>&lt;H5&gt;&lt;FONT color=#ffff00&gt;&lt;STRONG&gt;背景&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/H5&gt;
&lt;P&gt;最近一个 Partner 希望将以前的 Flash 嵌入到一个全新的 WPF 应用中，将 WPF 在 .NET 3.0 下丰富的用户体验和 Flash 动画相结合，更好地服务于其用户。&lt;/P&gt;
&lt;P&gt;嵌入 Flash 相当于嵌入一个 ActiveX 控件，在嵌入过程中也有一些比较 Tricky 的地方需要注意，下面就在 WPF Application 中嵌入 Flash 控件的步骤进行简要说明，并将遇到的一些需要注意的问题进行提示。&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;FONT color=#ffff00&gt;开发环境&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Visual Studio 2008 Beta1 (Code name: Orcas), Windows Vista, Flash Player 9,&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#ffff00&gt;&lt;STRONG&gt;方法&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#ffff00&gt;1. 建立 WPF Application。 &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;首先，建立一个名为 FlashinWPF 的 WPF Application&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;FONT color=#ffff00&gt;&lt;A href="http://blogs.msdn.com/blogfiles/jijia/WindowsLiveWriter/WPFFlashActiveX_12F13/image.png" atomicselection="true" mce_href="http://blogs.msdn.com/blogfiles/jijia/WindowsLiveWriter/WPFFlashActiveX_12F13/image.png"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=367 alt=image src="http://blogs.msdn.com/blogfiles/jijia/WindowsLiveWriter/WPFFlashActiveX_12F13/image_thumb.png" width=550 border=0 mce_src="http://blogs.msdn.com/blogfiles/jijia/WindowsLiveWriter/WPFFlashActiveX_12F13/image_thumb.png"&gt;&lt;/A&gt; &lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#ffff00&gt;2.&amp;nbsp;设置 Window 属性。&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;在 XAML 中修改 Window 的属性，加入 Loaded 事件，设置默认 Grid 的 x:Name 标示为 "FlashGrid" 更改后代码如下：&lt;/P&gt;
&lt;P&gt;&amp;lt;Window x:Class="FlashinWPF.Window1"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; xmlns="&lt;A href="http://schemas.microsoft.com/winfx/2006/xaml/presentation%22" mce_href='http://schemas.microsoft.com/winfx/2006/xaml/presentation"'&gt;http://schemas.microsoft.com/winfx/2006/xaml/presentation"&lt;/A&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; xmlns:x="&lt;A href="http://schemas.microsoft.com/winfx/2006/xaml%22" mce_href='http://schemas.microsoft.com/winfx/2006/xaml"'&gt;http://schemas.microsoft.com/winfx/2006/xaml"&lt;/A&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Title="Flash in WPF" Loaded="WindowLoaded" Height="500" Width="600"&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Grid x:Name="FlashGrid"&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Grid&amp;gt;&lt;BR&gt;&amp;lt;/Window&amp;gt; 
&lt;P&gt;&lt;FONT color=#ffff00&gt;3. 建立 Windows Forms Control Library&amp;nbsp;&lt;/FONT&gt; 
&lt;P&gt;WPF Application 作为一个展现层的项目，不能自身插入 COM Component，所以需要借助 Windows Form 引入 ActiveX 控件。&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/jijia/WindowsLiveWriter/WPFFlashActiveX_12F13/image_1.png" atomicselection="true" mce_href="http://blogs.msdn.com/blogfiles/jijia/WindowsLiveWriter/WPFFlashActiveX_12F13/image_1.png"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=348 alt=image src="http://blogs.msdn.com/blogfiles/jijia/WindowsLiveWriter/WPFFlashActiveX_12F13/image_thumb_1.png" width=550 border=0 mce_src="http://blogs.msdn.com/blogfiles/jijia/WindowsLiveWriter/WPFFlashActiveX_12F13/image_thumb_1.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;&lt;FONT color=#ffff00&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#ffff00&gt;4. 插入 Shockwave Flash Object&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;在 Toolbox 中点击右键，选择"Choose Items..." 添加 COM Components&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/jijia/WindowsLiveWriter/WPFFlashActiveX_12F13/image_2.png" atomicselection="true" mce_href="http://blogs.msdn.com/blogfiles/jijia/WindowsLiveWriter/WPFFlashActiveX_12F13/image_2.png"&gt;&lt;IMG height=376 alt=image src="http://blogs.msdn.com/blogfiles/jijia/WindowsLiveWriter/WPFFlashActiveX_12F13/image_thumb_2.png" width=550 border=0 mce_src="http://blogs.msdn.com/blogfiles/jijia/WindowsLiveWriter/WPFFlashActiveX_12F13/image_thumb_2.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Tricky Point:&lt;/STRONG&gt; 在 COM Component中还有一个 Macromedia Flash Factory Object 同样链接到C:\Windows\System32\Macromed\Flash\Flash9c.ocx 中，但在这里不要选择这个 Component, 否则会出现“Failed to import the ActiveX control” 可以利用 regsvr32.exe Flash9c.ocx 在命令行中注册 Flash9c.ocx 控件。会出现如下注册成功提示：&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/jijia/WindowsLiveWriter/WPFFlashActiveX_12F13/image_3.png" atomicselection="true" mce_href="http://blogs.msdn.com/blogfiles/jijia/WindowsLiveWriter/WPFFlashActiveX_12F13/image_3.png"&gt;&lt;IMG alt=image src="http://blogs.msdn.com/blogfiles/jijia/WindowsLiveWriter/WPFFlashActiveX_12F13/image_thumb_3.png" border=0 mce_src="http://blogs.msdn.com/blogfiles/jijia/WindowsLiveWriter/WPFFlashActiveX_12F13/image_thumb_3.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#ffff00&gt;5. 创建 Flash Object&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;添加一个 Shockwave Flash Object 后会自动在 Flash Control 的项目中增加一个名为AxShockwaveFlashObjects 的对象。&lt;/P&gt;
&lt;P&gt;在 UserControl1.Designer.cs 中会默认添加 axShockwaveFlash1 对象。&lt;/P&gt;
&lt;P&gt;private AxShockwaveFlashObjects.AxShockwaveFlash axShockwaveFlash1; 
&lt;P&gt;&lt;FONT color=#ffff00&gt;6. 编译 Flash Control&lt;/FONT&gt; 
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/jijia/WindowsLiveWriter/WPFFlashActiveX_12F13/image_4.png" atomicselection="true" mce_href="http://blogs.msdn.com/blogfiles/jijia/WindowsLiveWriter/WPFFlashActiveX_12F13/image_4.png"&gt;&lt;IMG height=571 alt=image src="http://blogs.msdn.com/blogfiles/jijia/WindowsLiveWriter/WPFFlashActiveX_12F13/image_thumb_4.png" width=261 border=0 mce_src="http://blogs.msdn.com/blogfiles/jijia/WindowsLiveWriter/WPFFlashActiveX_12F13/image_thumb_4.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#ffff00&gt;7. 在 FlashinWPF 中增加 Reference&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;增加 Flash Control 中编译好的 AxInterop.ShockwaveFlashObjects.dll&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/jijia/WindowsLiveWriter/WPFFlashActiveX_12F13/image_5.png" atomicselection="true" mce_href="http://blogs.msdn.com/blogfiles/jijia/WindowsLiveWriter/WPFFlashActiveX_12F13/image_5.png"&gt;&lt;IMG height=404 alt=image src="http://blogs.msdn.com/blogfiles/jijia/WindowsLiveWriter/WPFFlashActiveX_12F13/image_thumb_5.png" width=482 border=0 mce_src="http://blogs.msdn.com/blogfiles/jijia/WindowsLiveWriter/WPFFlashActiveX_12F13/image_thumb_5.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;增加用于在 Windows Form 中整合 ActiveX 的 DLL&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/jijia/WindowsLiveWriter/WPFFlashActiveX_12F13/image_6.png" atomicselection="true" mce_href="http://blogs.msdn.com/blogfiles/jijia/WindowsLiveWriter/WPFFlashActiveX_12F13/image_6.png"&gt;&lt;IMG height=406 alt=image src="http://blogs.msdn.com/blogfiles/jijia/WindowsLiveWriter/WPFFlashActiveX_12F13/image_thumb_6.png" width=482 border=0 mce_src="http://blogs.msdn.com/blogfiles/jijia/WindowsLiveWriter/WPFFlashActiveX_12F13/image_thumb_6.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;增加 Windows Form DLL&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/jijia/WindowsLiveWriter/WPFFlashActiveX_12F13/image_7.png" atomicselection="true" mce_href="http://blogs.msdn.com/blogfiles/jijia/WindowsLiveWriter/WPFFlashActiveX_12F13/image_7.png"&gt;&lt;IMG height=406 alt=image src="http://blogs.msdn.com/blogfiles/jijia/WindowsLiveWriter/WPFFlashActiveX_12F13/image_thumb_7.png" width=482 border=0 mce_src="http://blogs.msdn.com/blogfiles/jijia/WindowsLiveWriter/WPFFlashActiveX_12F13/image_thumb_7.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;&lt;FONT color=#ffff00&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#ffff00&gt;8. 修改 Window 的 Codebehind&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;Window1.xaml.cs 代码及注释如下&lt;/P&gt;
&lt;P&gt;private void WindowLoaded(object sender, RoutedEventArgs e)&lt;BR&gt;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 创建 host 对象&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Windows.Forms.Integration.WindowsFormsHost host = new System.Windows.Forms.Integration.WindowsFormsHost(); 
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 实例化 axShockwaveFlash1&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AxShockwaveFlashObjects.AxShockwaveFlash axShockwaveFlash1 = new AxShockwaveFlashObjects.AxShockwaveFlash(); 
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 装载.axShockwaveFlash1&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; host.Child = axShockwaveFlash1; 
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 将 host 对象嵌入FlashGrid&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.FlashGrid.Children.Add(host); 
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 设置 .swf 文件相对路径&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; string swfPath = System.Environment.CurrentDirectory;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; swfPath += @"\sample.swf";&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; axShockwaveFlash1.Movie = swfPath;&lt;BR&gt;&amp;nbsp;} 
&lt;P&gt;&lt;FONT color=#ffff00&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;FONT color=#ffff00&gt;9. 添加 .swf 文件&lt;/FONT&gt; 
&lt;P&gt;选择 Always Copy to Output Directory 从而应用相对路径通过 WPF Applicaiton 调用 Flash 
&lt;P&gt;&lt;STRONG&gt;&lt;FONT color=#ffff00&gt;&lt;A href="http://blogs.msdn.com/blogfiles/jijia/WindowsLiveWriter/WPFFlashActiveX_12F13/image_8.png" atomicselection="true" mce_href="http://blogs.msdn.com/blogfiles/jijia/WindowsLiveWriter/WPFFlashActiveX_12F13/image_8.png"&gt;&lt;/A&gt;&lt;A href="http://blogs.msdn.com/blogfiles/jijia/WindowsLiveWriter/WPFFlashActiveX_12F13/image_12.png" atomicselection="true" mce_href="http://blogs.msdn.com/blogfiles/jijia/WindowsLiveWriter/WPFFlashActiveX_12F13/image_12.png"&gt;&lt;IMG height=616 alt=image src="http://blogs.msdn.com/blogfiles/jijia/WindowsLiveWriter/WPFFlashActiveX_12F13/image_thumb_12.png" width=262 border=0 mce_src="http://blogs.msdn.com/blogfiles/jijia/WindowsLiveWriter/WPFFlashActiveX_12F13/image_thumb_12.png"&gt;&lt;/A&gt; &lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#ffff00&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#ffff00&gt;10. 大功告成&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/jijia/WindowsLiveWriter/WPFFlashActiveX_12F13/image_9.png" atomicselection="true" mce_href="http://blogs.msdn.com/blogfiles/jijia/WindowsLiveWriter/WPFFlashActiveX_12F13/image_9.png"&gt;&lt;IMG height=348 alt=image src="http://blogs.msdn.com/blogfiles/jijia/WindowsLiveWriter/WPFFlashActiveX_12F13/image_thumb_9.png" width=417 border=0 mce_src="http://blogs.msdn.com/blogfiles/jijia/WindowsLiveWriter/WPFFlashActiveX_12F13/image_thumb_9.png"&gt;&lt;/A&gt;&amp;nbsp;&lt;/P&gt;
&lt;P mce_keep="true"&gt;本例工程文件 &lt;A class="" title=点此下载 href="http://blogs.msdn.com/jijia/attachment/3143195.ashx" target=_blank mce_href="http://blogs.msdn.com/jijia/attachment/3143195.ashx"&gt;点此下载&lt;/A&gt;。&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;FONT color=#ffff00&gt;小贴士&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#ffff00&gt;可以通过 Visual Studio 中强大的 Object Browser 来查看 FlashObjects 的各种方法，抽象类，如下图所示&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/jijia/WindowsLiveWriter/WPFFlashActiveX_12F13/image_11.png" atomicselection="true" mce_href="http://blogs.msdn.com/blogfiles/jijia/WindowsLiveWriter/WPFFlashActiveX_12F13/image_11.png"&gt;&lt;IMG height=382 alt=image src="http://blogs.msdn.com/blogfiles/jijia/WindowsLiveWriter/WPFFlashActiveX_12F13/image_thumb_11.png" width=550 border=0 mce_src="http://blogs.msdn.com/blogfiles/jijia/WindowsLiveWriter/WPFFlashActiveX_12F13/image_thumb_11.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;DIV class=wlWriterSmartContent id=0767317B-992E-4b12-91E0-4F059A8CECA8:f2c1d0e6-1aef-4ab0-881f-6e353cf32d68 contentEditable=false style="PADDING-RIGHT: 0px; DISPLAY: inline; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px"&gt;Technorati tags: &lt;A href="http://technorati.com/tags/WPF" rel=tag mce_href="http://technorati.com/tags/WPF"&gt;WPF&lt;/A&gt;, &lt;A href="http://technorati.com/tags/Flash" rel=tag mce_href="http://technorati.com/tags/Flash"&gt;Flash&lt;/A&gt;, &lt;A href="http://technorati.com/tags/ActiveX" rel=tag mce_href="http://technorati.com/tags/ActiveX"&gt;ActiveX&lt;/A&gt;, &lt;A href="http://technorati.com/tags/AxHost" rel=tag mce_href="http://technorati.com/tags/AxHost"&gt;AxHost&lt;/A&gt;, &lt;A href="http://technorati.com/tags/AxShockwaveFlashObjects" rel=tag mce_href="http://technorati.com/tags/AxShockwaveFlashObjects"&gt;AxShockwaveFlashObjects&lt;/A&gt;&lt;/DIV&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=3143195" width="1" height="1"&gt;</description><enclosure url="http://blogs.msdn.com/jijia/attachment/3143195.ashx" length="156364" type="application/x-zip-compressed" /><category domain="http://blogs.msdn.com/jijia/archive/tags/ActiveX/default.aspx">ActiveX</category><category domain="http://blogs.msdn.com/jijia/archive/tags/WPF/default.aspx">WPF</category></item></channel></rss>