我有一个简单的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播放器中。所以,问题是,我错过了什么?是否有强制窗口具有默认大小的闪存设置?
答案 0 :(得分:1)
看起来该用户以120dpi运行Windows,而WinForms会自动使您的表单更大以适应。 (你明确地在你的表单上设置AutoScaleMode,即明确告诉它在高dpi模式下使表单更大。)看起来这个表单比SWF大约33%,这对于96对比是正确的。 120 dpi。
但是,由于您将控件的大小硬编码为800x600,而未在其上设置AutoScaleMode,因此它恰好是800x600,即小于表单。
要使它们具有相同的大小,也可以在swf
上设置AutoScaleMode,或者更好的是,不要复制大小 - 从swf
中移除锚点和大小,并设置{{ 1}}而不是。
然后将窗口设置为120dpi并运行,如果它不是800x600像素,请查看Flash应用程序是否正常工作。如果没有,您将需要通过将表单的AutoScaleMode更改为无来禁用自动缩放。