[Aaronyang] 寫給本身的WPF4.5 筆記24 [與winform交互-flash-DEMO-收尾篇1/6]

  =====瀟灑的版權線======www.ayjs.net===== Aaronyang ===== AY ====== 安徽 六安 楊洋 ======   未經容許不準轉載 ======windows

1.新建個WPF應用程序,而後添加一個windows窗體ide

此時左側工具箱自動winform的工具箱了。工具

而後添加個按鈕,並設置DialogResult屬性爲OK動畫

打開WPF的MainWindow.xaml添加一個按鈕,單擊事件以下this

    private void btnOpenWinform_Click(object sender, RoutedEventArgs e)
        {
            ShowSwfForm ss = new ShowSwfForm();
            if (ss.ShowDialog() == System.Windows.Forms.DialogResult.OK) {
                MessageBox.Show("OK按鈕被單擊");
            }
        }

效果圖:spa

 =============瀟灑的版權線==========www.ayjs.net===== Aaronyang ========= AY =========== 安徽 六安 楊洋 ==========   未經容許不準轉載 =========.net

顯示非模態窗口,首先添加WindowsFormIntegration.dll設計

再添加一個按鈕,咱們打開winform的界面的事件以下3d

 private void btnOpenNormallWinform_Click(object sender, RoutedEventArgs e)
        {
            ShowSwfForm ss = new ShowSwfForm();
            //攔截鍵盤事件,方便界面得到鍵盤操做
            WindowsFormsHost.EnableWindowsFormsInterop();
            ss.Show();
        }

不加這行 WindowsFormsHost.EnableWindowsFormsInterop();代碼,打開窗口後按鍵將沒法捕獲,例如tab鍵,你能夠試試。加上後,tab後按鈕會有虛線框,說明tab鍵生效了。code

2.啓用winform的可視化效果

 public partial class App : Application
    {
        protected override void OnStartup(StartupEventArgs e)
        {
            base.OnStartup(e);
            //System.Windows.Forms.Application.EnableVisualStyles();
        }
    }

試一下定義個樣式,發現不會生效的,可是上面那行代碼EnableVisualStyles應該是讓按鈕跟隨系統變化的

3. 一個界面上的winform控件和wpf控件

winform的每一個控件都是獨立窗口,每一個控件都擁有本身屏幕的區域。

wpf就有一個浮在屏幕上的頂級窗口。因此wpf只要有單獨的頂級窗口句柄,而且wpf引擎組織整個窗口,窗口才能更好的渲染。WPF有些元素使用單獨的窗口句柄。例如菜單、工具提示以及組合框的下拉部分。這些都有擴展窗口邊界的能力。

"空域"原則,WPF內容上放置winform窗體內容,winform窗體內容就會總在wpf的上面,而無論標記在什麼地方聲明的。因此不能經過重疊來組合WPF和winform窗體內容。意味着不能使用動畫飛過winform窗體渲染的區域。一樣內容也不能混合在一塊兒。因此WPF的使用flash通常套個winform,可是flash當背景仍是比較難的。

4.在WPF中駐留winform的控件,咱們須要使用WindowsFormsHost控件,若是要使用winform的控件,須要引入  xmlns:wf="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"

<Window x:Class="win32WPF.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" WindowStartupLocation="CenterScreen"
        xmlns:wf="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"
        Title="MainWindow" Height="700" Width="800">

    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="18*"/>
            <RowDefinition Height="205*"/>
        </Grid.RowDefinitions>
        <Button x:Name="btnOpenWinform" Click="btnOpenWinform_Click" Content="模態化打開winform" HorizontalAlignment="Left" Margin="28,10,0,0" VerticalAlignment="Top" Width="145"/>
        <Button x:Name="btnOpenNormallWinform" Click="btnOpenNormallWinform_Click" Content="正常winform" HorizontalAlignment="Left" Margin="178,10,0,0" VerticalAlignment="Top" Width="145"/>
        <WindowsFormsHost  Grid.Row="1">
            
        </WindowsFormsHost>
    </Grid>
</Window>

取值的話,直接給NumericUpDown控件加上x:name="nud"依賴屬性,而後後臺直接this.nud.Value.ToString(); 

接着咱們引入Flash的com組件

引入玩才發現,2015年的flash  com組建已經變了,網上的基礎教程通常沒用了。好吧,本身琢磨。

沒有找到網上說的AxShockwaveFlash控件。

可是,算了,仍是果斷放棄吧,我選擇了第二種方案,找到C:\Windows\System32\Macromed\Flash目錄,找到了Flash.ocx和Flash64_17_0_0_134.ocx,我不知道哪一個有用,猜想Flash64_17_0_0_134.ocx應該是64位的

移除剛剛的ShockwaveFlash引用。我仍是打開COM組建引用,而後瀏覽本地,選擇了Flash.ocx,結果發現仍是跟上次同樣,好吧...思考中..

而後我打開了ShowSwfForm.cs ,而後 winform版本的設計器的工具箱,右鍵常規-選擇項-COM組件,找到Shockwave Flash Object,單擊肯定。接着拖動這個控件到winform窗體上,尼瑪..

     出現了 

好吧,你贏了,我又回到剛剛的WPF頁面,寫下了熟悉的AxShockwaveFlash代碼,接下來就簡單了。

<Window x:Class="win32WPF.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" WindowStartupLocation="CenterScreen"
        xmlns:wf="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"
        xmlns:f="clr-namespace:AxShockwaveFlashObjects;assembly=AxInterop.ShockwaveFlashObjects"
        Title="MainWindow" Height="700" Width="800" Loaded="Window_Loaded">

    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="18*"/>
            <RowDefinition Height="205*"/>
        </Grid.RowDefinitions>
        <Button x:Name="btnOpenWinform" Click="btnOpenWinform_Click" Content="模態化打開winform" HorizontalAlignment="Left" Margin="28,10,0,0" VerticalAlignment="Top" Width="145"/>
        <Button x:Name="btnOpenNormallWinform" Click="btnOpenNormallWinform_Click" Content="正常winform" HorizontalAlignment="Left" Margin="178,10,0,0" VerticalAlignment="Top" Width="145"/>
        <WindowsFormsHost  Grid.Row="1" x:Name="wfh">
            <!--<wf:NumericUpDown Maximum="100" Minimum="0" Increment="10" Width="100" Dock="Top"></wf:NumericUpDown>-->
            <f:AxShockwaveFlash x:Name="flashContainer"/>
        </WindowsFormsHost>
    </Grid>
</Window>

OK,後臺代碼,網上都是能百度出來的了。

   =============瀟灑的版權線==========www.ayjs.net===== Aaronyang ========= AY =========== 安徽 六安 楊洋 ==========   未經容許不準轉載 =========

       -------------------小小的推薦,做者的確定,讀者的支持。推不推薦不重要,重要的是但願你們能把WPF推廣出去,別讓這麼好的技術消失了,求求了,讓咱們爲WPF技術作一份貢獻。-----------------

相關文章
相關標籤/搜索