嵌入在c#表单中的Flash动画忽略给定的大小

时间:2011-02-07 12:48:58

标签: c# flash

我有一个简单的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();
    }

测试程序已由多个用户运行,没有任何问题,除了一个,看到这个:

What the user sees

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

1 个答案:

答案 0 :(得分:1)

看起来该用户以120dpi运行Windows,而WinForms会自动使您的表单更大以适应。 (你明确地在你的表单上设置AutoScaleMode,即明确告诉它在高dpi模式下使表单更大。)看起来这个表单比SWF大约33%,这对于96对比是正确的。 120 dpi。

但是,由于您将控件的大小硬编码为800x600,而未在其上设置AutoScaleMode,因此它恰好是800x600,即小于表单。

要使它们具有相同的大小,也可以在swf上设置AutoScaleMode,或者更好的是,不要复制大小 - 从swf中移除锚点和大小,并设置{{ 1}}而不是。

然后将窗口设置为120dpi并运行,如果它不是800x600像素,请查看Flash应用程序是否正常工作。如果没有,您将需要通过将表单的AutoScaleMode更改为无来禁用自动缩放。