• 【转载】在winform中嵌入 flash


    很多光盘上的程序,比如电脑迷光盘,开头总有一段动画,用来展现企业品牌和LOGO之用。这个动画是Flash做的,而且嵌入到程序中简直做到无缝融合,因为右键点击它也不会有那特有而烦人的Flash右键菜单。

    因此将Flash融合到WinForm中能够增强程序的多媒体效果和炫丽的外观。现在我们就来看看在C#桌面程序中如何插入Flash视频,而且去掉烦人的右键菜单。

     

    首先要插入Flash就必须使用Flash控件,在工具栏右键选择“选择项”,然后在“COM组件”面板下点击“浏览”按钮,在本机电脑C:\WINDOWS\system32\Macromed\Flash\目录里选择Flash8.ocx(也有可能是Flash9F.ocx,版本不同所致),然后点击确定就可以了。但到这里还没有完,因为要使用Flash控件必须注册它。

    CMD里面输入如下:

    regsvr32 C:\WINDOWS\system32\Macromed\Flash\Flash8.ocx

    系统会提示注册成功,这个时侯就可以在VS2008里面使用该控件了!

    打开VS2008,新建一个Windows程序,然后把刚才我们选择的Flash控件Shockwave Flash Object拖到窗体中,这时窗体中会出现一个白色的矩形框,Name属性我们设置为Myflash,在里面可以播放我们需要的swf文件。

     

    注意到该控件主要有几个属性:

    Name属性,这个是所有对象都会有的。

    Menu属性,这个是Flash菜单项,默认值为true,也就是右键的时候会出现完整的Flash菜单,如果设置为False,则只出现最简的菜单(设置与关于)。

    Move属性,这个属性是用来指定要播放的Flash文件的。

    Playing属性,指定是否装在影片之后马上播放。

    Quality属性,设置影片的质量。

    Scalemode属性,设置影片的缩放模式。

    Visible属性,设置影片控件的可视与否。

     

    接下来我们在窗体中放置一个按钮,Text属性设置为LoadSwf。双击添加事件代码如下:

    OpenFileDialog ofd = new OpenFileDialog();

    ofd.Filter = "Flash文件|*.swf";

    DialogResult dr = ofd.ShowDialog();

    if (dr == DialogResult.OK)

    {               

       Myflash.Movie = ofd.FileName;

        Myflash.Play();

    }   

    这样当程序运行的时候点击按钮会要我们选择一个SWF文件,选择好后确定就自动播放了!

    当然,我们还可以添加一些按钮,分别为PlayPause

    Play按钮的播放功能如下:

    This.Myflash.Play();

    Pause按钮的暂停功能如下:

    This.Myflash.StopPlay();

     

    这里就不再啰嗦了,各位园友可以自行去研究一些常用的功能。下面我们主要来讲解如何消去烦人的Flash右键菜单!

    消去Flash右键菜单有两种方法(本人愚笨,到目前只发现这两种)

     

    方法一:

    这个方法比较复杂,也比较繁琐,主要是用到API函数的调用。代码如下:

     

    #region 去掉Flash右键菜单,API函数的声明

            private const int GWL_WNDPROC = -4;

            public delegate IntPtr FlaWndProc(IntPtr hWnd, int msg, IntPtr wParam, IntPtr lParam);       

            private IntPtr OldWndProc = IntPtr.Zero;

            private FlaWndProc Wpr = null;

            [DllImport("user32.dll", CharSet = CharSet.Auto)]

            public static extern IntPtr SetWindowLong(IntPtr hWnd, int nIndex, FlaWndProc wndProc);

            [DllImport("user32.dll", CharSet = CharSet.Auto)]

            public static extern IntPtr CallWindowProc(IntPtr wndProc, IntPtr hWnd, int msg, IntPtr wParam, IntPtr lParam);

            private IntPtr FlashWndProc(IntPtr hWnd, int msg, IntPtr wParam, IntPtr lParam) {

                if(msg == 516)   //516就是对应鼠标的右键,当然你也可以用0X0204右键鼠标的16进制编码

                    return (IntPtr)0;   //什么都不做

                return CallWindowProc(OldWndProc, hWnd, msg, wParam, lParam);

            }

          #endregion

    将以上代码放在窗体声明字段的地方。

    注:要调用API函数就必须引用一个命名空间:

    using System.Runtime.InteropServices;

    然后在窗体的载入事件里面添加如下代码:

    private void Flash_Load(object sender, EventArgs e)

    {

       this.Wpr = new FlaWndProc(this.FlashWndProc);

       this.OldWndProc = SetWindowLong(Myflash.Handle, GWL_WNDPROC, Wpr); //关联flash控件

    }

    如此则大功告成,看看是不是把Flash右键菜单给去掉了!!

     

    方法二:

    这个方法很简单,也很灵活,主要用到继承和重写等面向对象的核心内容。

    首先声明一个类,让它去继承AxShockwaveFlashObjects.AxShockwaveFlash,该类是实例化Flash控件生成的类。该类中包含各种Flash的事件和属性,在这里我们只对右键菜单的事件感兴趣,因此我们去重写该事件。

    类的代码如下:

    public class FlashRightKey : AxShockwaveFlashObjects.AxShockwaveFlash

        {

            //定义一个公共类FlashRightKey(类名自己定义)来继承AxShockwaveFlashObjects.AxShockwaveFlash(在实例化Shockwave Flash Object控件后生成)

            protected override void WndProc(ref Message m) //重载WndProc方法(此方法即消息处理机制)

            {

                if (m.Msg == 0X0204) //0×0204即鼠标右键的16进制编码

                    return; //返回并不输出

                else

                    base.WndProc(ref m); //如果不是右键的话则返回正常的信息

            }

    }

     

    类写好了,我们要在Flash控件里面使用它,必须在实例化Flash控件的时候用如下代码(写在Flash.Designer.cs文件相应的地方):

    private FlashRightKey MyFlash2;

    this.MyFlash2 = new Namespace.FlashRightKey();

     

    注:Namespace为工程项目的命名空间。

    剩下的就和不用我多说了,大功告成,实现了Flash控件去掉右键菜单。

  • 相关阅读:
    反射(五)之动态代理的作用
    反射(四)之反射在开发中的适用场景及利弊
    反射(三)之通过反射获取构造方法, 成员变量, 成员方法
    反射(二)之反射机制
    反射(一)之初探反射
    java多线程(五)之总结(转)
    java多线程(四)之同步机制
    java多线程(三)之售票案例
    java多线程(二)之实现Runnable接口
    java多线程(一)之继承Thread类
  • 原文地址:https://www.cnblogs.com/wbpmrck/p/1812954.html
Copyright © 2020-2023  润新知