![](/img/trans.png)
[英]How can i resize a rotated control without change the aspect ratio based on the current position X and Y?
[英]Resize control to match aspect ratio
描述
我正在为不同的分辨率创建一个“模拟器”。 基本上,我在面板内部有一个控件。 然后,用户可以选择宽高比(下面的更多信息),并且模拟器内部的控件应调整大小以匹配所需的宽高比。
问题
问题是我不知道在不使用大量CPU或不进行尝试或调整大小的情况下,计算控件大小的好方法是什么。 我是否必须调整控件的高度或宽度以适合模拟器的大小才能知道?
模拟器可以增长或收缩。 这就是为什么我不能确定的是,其中的控件是否会填满模拟器的整个宽度或高度,但是长宽比应该始终正确。
暗示
这可能是一个非常简单的数学问题。 我只是现在找不到解决方案(今天不是我的日子)!
如果您有任何想法或建议,请随时提出建议!
例
可用分辨率
感谢您的帮助!
这是一个小测试台。 将控件放在窗体上并为其分配ViewPort变量。 在这里,我选择了一个textBox1,但是任何控件都可以。 然后选择目标宽高比,我选择了TargetRatio_3_2。 通过调整表单大小来尝试它!
注意1:我选择一个表单作为Container(您的Simulator )以便于测试,因此使用其ClientRectangle来访问其内部度量。 任何其他控件都将基本相同。
不是2:我添加了几行以将ViewPort(您的Control )放置在中间。
private void Form1_Resize(object sender, EventArgs e)
{
Control Container = this;
Control ViewPort = textBox1;
float ContainerRatio = 1f * Container.ClientRectangle.Width / Container.ClientRectangle.Height;
const float TargetRatio_3_2 = 3f / 2f;
const float TargetRatio_16_9 = 16f / 9f;
const float TargetRatio_4_3 = 4f / 3f;
const float TargetRatio_16_10 = 16f / 10f;
//..
float TargetRatio = TargetRatio_3_2;
if (ContainerRatio < TargetRatio)
{
ViewPort.Width = Container.ClientRectangle.Width;
ViewPort.Height = (int)(ViewPort.Width / TargetRatio);
ViewPort.Top = (Container.ClientRectangle.Height - ViewPort.Height) / 2;
ViewPort.Left = 0;
}
else
{
ViewPort.Height = Container.ClientRectangle.Height;
ViewPort.Width = (int)(ViewPort.Height * TargetRatio);
ViewPort.Top = 0;
ViewPort.Left = (Container.ClientRectangle.Width - ViewPort.Width) / 2;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.