首頁 > 後端開發 > C++ > 如何最佳化 WinForms 控制項縮放以在高 DPI 環境中自動調整?

如何最佳化 WinForms 控制項縮放以在高 DPI 環境中自動調整?

Mary-Kate Olsen
發布: 2025-01-19 08:26:10
原創
378 人瀏覽過

How Can I Optimize WinForms Control Scaling for Auto-Adjustment in High-DPI Environments?

WinForms 控制縮放:實現高 DPI 環境下的最佳自動調整

儘管普遍認為 WinForms 在高 DPI 環境下的自動縮放能力有限,但實際上,.NET 2.0 及以後版本已顯著改進了其自動縮放功能。然而,要充分利用這些改進,開發者必須遵循特定的設計準則。

不支援自動縮放的控制

某些控制項在縮放方面有限制:

  • Label: 如果 AutoSize 屬性停用且字體為繼承字體,請明確設定 Font 屬性以防止縮放錯誤。
  • ListView: 重寫窗體的 ScaleControl 方法來處理列寬調整。
  • SplitContainer: 避免設定 Panel1MinSizePanel2MinSizeSplitterDistance 屬性。
  • TextBox: 如果 MultiLine 屬性啟用且字體為繼承字體,請明確設定 Font 屬性。
  • ToolStripButton:CreateGraphics.DpiX.DpiY 調整 ToolStrip.ImageScalingSize
  • PictureBox: 確保 SizeMode 屬性設定為 ZoomStretchImage
  • TreeView: 依照 CreateGraphics.DpiX.DpiY 設定 ImageList.ImageSize
  • Form: 建立固定大小窗體後,手動縮放。

設計準則

1. 容器控制

  • 將所有容器控制項的 AutoScaleMode 屬性設定為 Font
  • 假設為 96dpi 和預設的 MS Sans Serif 字體,將 AutoScaleDimensions 屬性賦值為 new System.Drawing.SizeF(6F, 13F)(如有必要,請調整)。

2. 設計器配置

  • 在 96dpi 下進行設計。在 Visual Studio 中將高 DPI 縮放行為覆寫為「系統」。
  • 確保容器控制項的 AutoSize 屬性啟用。

3. 字型管理

  • 僅在葉子控制層級或基底窗體的建構子中(用於應用程式範圍的預設值)設定 Font 屬性。
  • 在基底窗體中更改 Font 將重新計算 AutoScaleDimensions;相應地更新設計器檔案。

4. 停靠與錨定

  • 避免直接將控制項錨定到 UserControls;改用 Panel 或其他容器。
  • 使用 Dock 屬性來取代 Anchor RightBottom

5. 動態新增的控制

  • 在新增動態控制之前暫停佈局,設定 AutoScaleDimensionsAutoScaleMode,然後恢復佈局。

6. 基類和 AutoScale

  • 繼承的基底類別應將其 AutoScaleMode 屬性設為 Inherit。將其設為其他任何值都可能會停用自動縮放。

7. 窗體大小限制

  • 避免使用靜態 MaxSize 屬性。在建構子或 OnLoad 事件中將 MinSizeMaxSize 設為縮放後的尺寸。
  • 確保窗體的大小不超過 1000x680 ClientSize(在設計器中為 994x642)。

以上是如何最佳化 WinForms 控制項縮放以在高 DPI 環境中自動調整?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板