public override Dpi GetDpiForMonitor(IntPtr hMonitor)
        {
            uint dpiX, dpiY;

            SHCore.GetDpiForMonitor(hMonitor, MonitorDpiType.Default, out dpiX, out dpiY);

            return(new Dpi(dpiX, dpiY));
        }
Example #2
0
        /// <summary>
        /// ディスプレイモニターの DPI 設定値を取得します。
        /// </summary>
        /// <param name="hMonitor">ディスプレイモニタの HMONITOR</param>
        /// <param name="dpiType">DPI の種類。既定値は <see cref="MonitorDpiType.Default"/> (<see cref="MonitorDpiType.EffectiveDpi"/> と同値) です。</param>
        /// <returns><paramref name="hWnd"/> のウィンドウが描画されているモニターの DPI 設定値。サポートされていないシステムの場合は <see cref="Dpi.Default"/>。</returns>
        private static Dpi GetDpiForMonitor(IntPtr hMonitor, MonitorDpiType dpiType)
        {
            if (!IsSupported)
            {
                return(Dpi.Default);
            }

            uint dpiX = 1, dpiY = 1;

            SHCore.GetDpiForMonitor(hMonitor, dpiType, out dpiX, out dpiY);

            return(new Dpi(dpiX, dpiY));
        }
Example #3
0
 public static uint GetDpi(this System.Windows.Forms.Screen screen, DpiType dpiType)
 {
     try
     {
         var monitor = User32.MonitorFromPoint(screen.Bounds.Location, User32.MONITOR_DEFAULTTONEAREST);
         SHCore.GetDpiForMonitor(monitor, dpiType, out var dpiX, out var _);
         return(dpiX);
     }
     catch (System.DllNotFoundException)
     {
         return(96);                // On Windows <8, just assume scaling 100%.
     }
 }
Example #4
0
        /// <summary>
        /// 指定したハンドルのウィンドウが描画されているモニターの DPI 設定値を取得します。
        /// </summary>
        /// <param name="hWnd">DPI を取得する対象の Win32 ウィンドウを示すウィンドウ ハンドル。</param>
        /// <param name="dpiType">DPI の種類。既定値は <see cref="MonitorDpiType.Default"/> (<see cref="MonitorDpiType.EffectiveDpi"/> と同値) です。</param>
        /// <returns><paramref name="hWnd"/> のウィンドウが描画されているモニターの DPI 設定値。サポートされていないシステムの場合は <see cref="Dpi.Default"/>。</returns>
        public static Dpi GetDpi(IntPtr hWnd, MonitorDpiType dpiType = MonitorDpiType.Default)
        {
            if (!IsSupported)
            {
                return(Dpi.Default);
            }

            var hmonitor = User32.MonitorFromWindow(
                hWnd,
                MonitorDefaultTo.MONITOR_DEFAULTTONEAREST);

            uint dpiX = 1, dpiY = 1;

            SHCore.GetDpiForMonitor(hmonitor, dpiType, ref dpiX, ref dpiY);

            return(new Dpi(dpiX, dpiY));
        }