PowerTools SPREAD for Windows Forms 10.0J
高DPIのサポート

SPREADでは、高DPIのサポートが有効なアプリケーションにおいて、高DPI設定をサポートします。アプリケーションのDPIのサポートを有効にする方法については、Microsoft社のWebサイトを参照してください。

以下、.NET Framework 4.5.2にて、DPIのサポートを有効にする手順を説明します。

  1. アプリケーションのマニフェストファイル(app.manifest)に、次の設定を追加します。
    app.manifest
    コードのコピー
    <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3" >
      <asmv3:application>
        <asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
          <dpiAware>true</dpiAware>
        </asmv3:windowsSettings>
      </asmv3:application>
    </assembly>
    
  2. アプリケーションのエントリポイント(Program.csまたはProgram.vb)を次のように変更します。
    C#
    コードのコピー
    static class Program
    {
        /// <summary>
        /// アプリケーションの主要なエントリポイントです。
        /// </summary>
        [STAThread]
        static void Main()
        {
            SetProcessDPIAware();
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new MainForm());
        }
     
        [System.Runtime.InteropServices.DllImport("user32.dll")]
        public extern static IntPtr SetProcessDPIAware();
    }
    
    Visual Basic
    コードのコピー
    NotInheritable Class Program
        Private Sub New()
        End Sub
        ''' <summary>
        ''' アプリケーションのメイン エントリ ポイントです。
        ''' </summary>
        <STAThread> _
        Friend Shared Sub Main()
            SetProcessDPIAware()
            Application.EnableVisualStyles()
            Application.SetCompatibleTextRenderingDefault(False)
            Application.Run(New MainForm())
        End Sub
        <System.Runtime.InteropServices.DllImport("user32.dll")> _
        Friend Shared Function SetProcessDPIAware() As Boolean
        End Function
    End Class
    
    どのウィンドウを作成する場合でも、事前にSetProcessDPIAware APIを呼び出す必要があります。これをせず、このAPIを使用する前に作成されたウィンドウでは、不適切なサイズやフォントが使用されます。
  3. App.configに次の設定を追加して、Windows Formsの高DPIサポートを有効にします。
    App.config
    コードのコピー
    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <appSettings>
        <add key="EnableWindowsFormsHighDpiAutoResizing" value="true" />
      </appSettings>
    </configuration>
    

高DPI(DPIスケーリング)への対応

OSのDPI設定を変更した場合、コントロールのサイズはDPIの設定に応じて拡大されますが、SPREADの行の高さや列幅は変更されません。SPREADのスケーリングを有効にすると、DPIに応じて行の高さや列幅が変更されるようにできます。SPREADのスケーリングを有効にするには、FpSpreadクラスのSpreadScaleModeプロパティを使用します。

  • SPREADは、200%までのスケーリングに対応しています。それより大きいサイズのスケーリングは、レイアウトが崩れる可能性があります。
  • SPREADは、実行時のスケーリングに対応しています。設計時のスケーリングには対応していません。

SpreadScaleModeプロパティの設定

SpreadScaleModeプロパティは、次のように設定します。

設定による影響

データ連結している場合、DataAutoSizeColumnsプロパティの設定が列幅に影響を及ぼす可能性があります。以下、SpreadScaleModeプロパティとの関係で、DPIの設定に応じてサイズが変更される要素を表しています。

SpreadScaleModeプロパティ
ZoomDpiSupport None(デフォルト)

DataAutoSizeColumns

プロパティ

True 列幅および行高さ 列幅のみ
False 列幅および行高さ なし

※コントロールのサイズは設定値に関わらず拡大されます。

参考情報

SPREADのスケーリングは、.NET Frameworkの自動スケーリング上で動作します。そのため、.NET Frameworkの自動スケーリングの動作を理解しておく必要があります。詳細は、次の情報を参照してください。

Web サイトWindows フォームにおける自動スケーリング

Web サイトAutoScaleDimensions プロパティ

自動スケーリングは、フォームのロード時にのみ行われます。実行時では、コントロールのサイズや位置が変更された時点、およびコンテナのレイアウトが一時停止された時点で、スケーリングが変更される可能性があります。

設定方法

  1. レイアウトを一時停止します。
  2. コントロールの位置とサイズを設定します。
  3. SpreadScaleMode プロパティを ZoomDpiSupport に設定します。
  4. ResumeLayout メソッドを使用して、変更を適用します。

サンプルコード

次のサンプルコードは、SpreadScaleMode プロパティを ZoomDpiSupport に設定して、レイアウトを一時停止してから再開します。

C#
コードのコピー

fpSpread.SuspendLayout();

AutoScaleDimensions = new System.Drawing.SizeF(96.0F, 96.0F);
AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;
fpSpread1.Location = new System.Drawing.Point(23, 86);
fpSpread1.Size = new System.Drawing.Size(356, 161);
fpSpread1.SpreadScaleMode = FarPoint.Win.Spread.ScaleMode.ZoomDpiSupport;
fpSpread1.ResumeLayout();

Visual Basic
コードのコピー

FpSpread1.SuspendLayout()

AutoScaleDimensions = New System.Drawing.SizeF(96.0F, 96.0F)
AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi
FpSpread1.Location = New System.Drawing.Point(23, 86)
FpSpread1.Size = New System.Drawing.Size(356, 161)
FpSpread1.SpreadScaleMode = FarPoint.Win.Spread.ScaleMode.ZoomDpiSupport
FpSpread1.ResumeLayout()

関連トピック

 

 


© 2004-2017, GrapeCity inc. All rights reserved.