筆者之前在 WinForms 專案中使用 Graphics 繪製圖形,其中遇到一個很大的問題就是如果使用者的螢幕縮放比例不是 100% 那畫出來的大小就會不同,不會依據縮放比例縮放,而會維持原來大小。該如何知道縮放比例呢?
預設 DPI 96 是 100%,所以我們可以使用下面的方式計算縮放比例:
那要調整繪製內容的大小就很簡單了,只要乘以縮放比例即可
預設 DPI 96 是 100%,所以我們可以使用下面的方式計算縮放比例:
public Form1()
{
InitializeComponent();
float scaleX = GetScalingFactorX();
float scaleY = GetScalingFactorY();
// 顯示縮放比例
MessageBox.Show($"水平縮放比例: {scaleX}, 垂直縮放比例: {scaleY}");
}
private float GetScalingFactorX()
{
using var graphics = CreateGraphics();
return graphics.DpiX / 96f;
}
private float GetScalingFactorY()
{
using var graphics = CreateGraphics();
return graphics.DpiY / 96f;
}
那要調整繪製內容的大小就很簡單了,只要乘以縮放比例即可
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
using Graphics graphics = CreateGraphics();
Pen pen = new Pen(Color.Black, 1f);
float scaleX = GetScalingFactorX();
float scaleY = GetScalingFactorY();
float lineDistance = 100f;
// 縮放後的線段
graphics.DrawLine(pen, 10f, 10f, 10f + lineDistance * scaleX, 10f + lineDistance * scaleY);
graphics.DrawLine(pen, 10f, 20f, 10f + 100, 20f+ 100); // 不縮放的線段
}
留言
張貼留言
如果有任何問題、建議、想說的話或文章題目推薦,都歡迎留言或來信: a@ruyut.com