首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >强制.NetCF 1.0缩放模型到.NetCF 2.0应用程序

强制.NetCF 1.0缩放模型到.NetCF 2.0应用程序
EN

Stack Overflow用户
提问于 2010-10-06 19:57:53
回答 2查看 893关注 0票数 3

我有一个在.Net CompactFramework1.0中开发的大型应用程序,它是在过去9年开发的,具有大量的表单和自定义控件。应用程序是为240x320屏幕设计的。当使用CompactWeb1.0和Visual 2003编译时,它可以很好地扩展到480x640屏幕。

我使用Visual 2008的默认升级向导将应用程序升级到.Net 2.0。应用程序使用全屏,当使用分辨率为240x320的设备时,所有控件都按照设计的方式布置。但是,当使用分辨率为480x640的设备时,该应用程序只使用屏幕左上角的25%。

我尝试使用代码: AutoScaleDimensions =新SizeF(96,96);AutoScaleMode = AutoScaleMode.Dpi;

它在窗体上工作,但不工作于放置在窗体上的动态控件(标准/自定义)。

是否有一种方法可以强制应用程序使用与使用.Net 1.0时相同的缩放方式,而无需使用AutoScale维度/AutoScaleMode属性。

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-10-20 16:04:43

我找到了解决这个问题的办法。

我得到类似于simons19解释的过程的比例因子,然后当向表单添加任何动态创建的控件时,我调用方法control.Scale( scale-factor )。这解决了我的问题。Scale缩放控件的位置和大小,因此,在调用scale属性之前,我同时设置了动态创建的控件的Location属性和Size属性。

示例:

代码语言:javascript
复制
Label lblTest = new Label();
lblTest.Text = "A Test Label";
lblTest.Location = new Point(10, 5);  //Designed in relation to a 96 dpi screen
lblTest.Size = new Size(30, 10);      //Size Designed in relation to 96 DPI screen
parentControl.Controls.Add(lblTest);
//Scale Factor is calculated as mentioned by simons19
lblTest.Scale(scaleFactor);           //Scale the control to the screen DPI.
票数 2
EN

Stack Overflow用户

发布于 2010-10-19 16:26:23

在听起来像是创建自定义控件的代码中,包含一些硬编码的值,这些值假设特定的DPI (可能是所使用的设计器的96 )。

您可以使用以下内容分析应用程序正在运行的设备的主机分辨率:

代码语言:javascript
复制
const float designResolution = 96.0f; 
float scaleFactor;

System.Drawing.Graphics g = f.CreateGraphics();
float runningResolution = g.DpiX;
scaleFactor = runningResolution / designResolution;
g.Dispose();

然后,您将修改代码中正在创建动态控件的任何硬编码协调器,以便使用计算的scaleFactor调整值,例如:

代码语言:javascript
复制
const int controlY = 8;
int yPosition = (int)(controlY * scaleFactor);
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3876353

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档