Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
嵌入c#形式的Flash动画忽略给定的大小_C#_Flash - Fatal编程技术网

嵌入c#形式的Flash动画忽略给定的大小

嵌入c#形式的Flash动画忽略给定的大小,c#,flash,C#,Flash,我有一个简单的C#程序,当用户单击按钮时,它会打开一个新的框架,其中嵌入了activex flash对象。我用来打开它的代码如下: private void button1_Click(object sender, EventArgs e) { Form f = new Form(); System.ComponentModel.ComponentResourceManager resources = new System.ComponentMode

我有一个简单的C#程序,当用户单击按钮时,它会打开一个新的框架,其中嵌入了activex flash对象。我用来打开它的代码如下:

   private void button1_Click(object sender, EventArgs e)
    {
        Form f = new Form();
        System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1));
        AxShockwaveFlashObjects.AxShockwaveFlash swf = new AxShockwaveFlashObjects.AxShockwaveFlash();
        ((System.ComponentModel.ISupportInitialize)(swf)).BeginInit();
        f.SuspendLayout();

        swf.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
                    | System.Windows.Forms.AnchorStyles.Left)
                    | System.Windows.Forms.AnchorStyles.Right)));
        swf.Enabled = true;
        swf.Location = new System.Drawing.Point(1, -1);
        swf.Name = "axShockwaveFlash1";
        swf.OcxState = ((System.Windows.Forms.AxHost.State)(resources.GetObject("axShockwaveFlash1.OcxState")));
        swf.Size = new System.Drawing.Size(800, 600);
        swf.TabIndex = 0;


        f.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
        f.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
        f.ClientSize = new System.Drawing.Size(800, 600);
        f.Controls.Add(swf);
        f.Name = "Form1";
        f.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); ;
        f.Text = "lol";
        ((System.ComponentModel.ISupportInitialize)(swf)).EndInit();
        f.ResumeLayout(false);

        swf.LoadMovie(0, "http://web2.flashgames.it/giochi/puzzle/kaleid/game.swf");
        swf.DisableLocalSecurity();
        f.Show();
    }
测试程序已由多个用户运行,没有任何问题,只有一个用户看到以下情况:


我认为问题不在于应用程序本身,而在于flash播放器。所以,问题是,我错过了什么?是否存在强制窗口具有默认大小的闪存设置?

看起来该用户正在以120dpi的速度运行Windows,WinForms会自动将您的窗体变大以适应需要。(您在表单上显式设置了AutoScaleMode,即显式告诉它在更高dpi模式下使表单更大。)看起来表单比SWF大33%,而SWF大约适合96 dpi和120 dpi

但是,由于您将控件的大小硬编码为800x600,并且没有在其上设置AutoScaleMode,因此它正好是800x600,即比表单小

要使它们具有相同的大小,也可以在
swf
上设置AutoScaleMode,或者,更好的是,不要复制大小--从
swf
中移除锚点和大小,并设置
swf.Dock=DockStyle.Fill取而代之


然后将windows设置为120dpi并运行,如果不是800x600像素,则查看Flash应用程序是否正常工作。如果没有,您将希望通过将表单的AutoScaleMode更改为None来禁用自动缩放功能。

能否提供用户设置之间差异的详细信息?每个测试过它的用户都安装了最新的stable flash player和shockwave player。至于操作系统,唯一有问题的用户是运行Windows7(只要我能和他谈谈,我会告诉你更多关于他的配置)。其他的有win7 32位、win7 64位或winxp。好的。这个程序不起作用的系统是Win 7 Home Premium 64bitI,我不得不在这个系统上做一些工作。最后,解决方案是添加swf.Dock=DockStyle.Fill;把其他一切都留在上面。非常感谢。