2010-10-06 45 views
3

我有一個在.Net Compact Framework 1.0中開發的大型應用程序,這個應用程序在過去的9年中用大量表單和自定義控件開發。該應用程序專爲240x320屏幕設計。當與緊湊的.Net 1.0和Visual Studio 2003年編譯Force .NetCF 1.0將模型縮放到.NetCF 2.0應用程序

我使用Visual Studio 2008的默認升級嚮導應用程序使用全屏幕和升級到.NET 2.0的應用程序擴展它好一個480×640屏的全部當使用分辨率爲240x320的設備時,按照設計佈置控件。但是,當使用分辨率爲480x640的設備時,應用程序僅使用屏幕的左上角25%。我試過用代碼: AutoScaleDimensions = new SizeF(96,96); AutoScaleMode = AutoScaleMode.Dpi;

它適用於窗體,但不適用於放置在窗體上的動態控件(標準/自定義)。

有沒有辦法強制應用程序使用縮放類似於使用.Net 1.0編譯時所做的縮放,而不使用AutoScaleDimensions/AutoScaleMode屬性。

謝謝。

回答

2

我發現了一種解決這個問題的方法。

我得到類似於simons19解釋過程的縮放因子,然後在向窗體中添加任何動態創建的控件時,我調用control.Scale(scale-factor)方法。這解決了我的問題。 Scale方法縮放控件的位置和大小,因此,我在調用scale屬性之前設置了動態創建的控件的位置屬性和大小屬性。

實施例:

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. 
3

在聽起來像你的代碼來創建自定義的控件包含假設一個特定的DPI的硬編碼值可能使用的設計師,96

你可以分析你的應用程序正在使用運行設備的主機解析是這樣的:

const float designResolution = 96.0f; 
float scaleFactor; 

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

然後,您可以修改任何硬編碼座標在你的代碼是創建動態控制與計算出的比例因子來調整值,例如:

const int controlY = 8; 
int yPosition = (int)(controlY * scaleFactor);