2011-02-07 109 views
0

我有,当一个用户点击一个按钮时,打开与嵌入在它的ActiveX flash对象新帧的简单C#程序。我用它来打开它的代码如下: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 Player中。所以,问题是,我错过了什么?是否有强制窗口具有默认大小的闪光灯设置?

+0

您能提供有关用户设置之间差异的详细信息吗? – Hawxby 2011-02-07 13:21:27

+0

每个测试过的用户都安装了最新的稳定的Flash Player和Shockwave播放器。至于操作系统,唯一遇到问题的用户就是运行Windows 7(只要我可以与他交谈,我会告诉你更多关于他的配置)。其他人有win7 32bit,win7 64bit或winxp。 – kaharas 2011-02-07 13:34:00

回答

1

貌似用户在120DPI运行Windows,和WinForms会自动让你的形式更大的适应。 (你明确地在你的表单上设置了AutoScaleMode,即明确地告诉它在高分辨率模式下使表单变大。)看起来表单看起来比SWF大33%左右,这对于96对比来说是正确的。 120 dpi。

但是既然你硬编码控件的尺寸为800x600,并在其上不设AutoScaleMode,这也正是800×600,即比形式更小。

为了让他们相同的大小,无论是设置AutoScaleMode上swf一样好,甚至更好,但不重复的大小 - 从swf删除锚点和大小,并设置swf.Dock = DockStyle.Fill;代替。

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