示例#1
0
        /// <summary>
        /// Scales <b>System.Windows.Size</b> if <i>dpiOf.Dpi</i> isn't 96 (100%).
        /// </summary>
        public static SIZE Scale(System.Windows.Size z, DpiOf dpiOf)
        {
            double f = (int)dpiOf / 96d;

            z.Width  *= f;
            z.Height *= f;
            return(new(z.Width.ToInt(), z.Height.ToInt()));
        }
示例#2
0
        //Unscaling sometimes useful with WPF. Unscale to double, not int, else result often incorrect.

        /// <summary>
        /// Scales <b>SIZE</b> if <i>dpiOf.Dpi</i> isn't 96 (100%).
        /// </summary>
        public static SIZE Scale(SIZE z, DpiOf dpiOf)
        {
            int dpi = dpiOf;

            z.width  = Math2.MulDiv(z.width, dpi, 96);
            z.height = Math2.MulDiv(z.height, dpi, 96);
            return(z);
        }
示例#3
0
        /// <summary>
        /// Scales <b>RECT</b> if <i>dpiOf.Dpi</i> isn't 96 (100%).
        /// </summary>
        public static RECT Scale(RECT r, DpiOf dpiOf)
        {
            int dpi = dpiOf;

            r.left   = Math2.MulDiv(r.left, dpi, 96);
            r.top    = Math2.MulDiv(r.top, dpi, 96);
            r.right  = Math2.MulDiv(r.right, dpi, 96);
            r.bottom = Math2.MulDiv(r.bottom, dpi, 96);
            return(r);
        }
示例#4
0
        /// <summary>
        /// Calls API <msdn>AdjustWindowRectExForDpi</msdn> if available, else <msdn>AdjustWindowRectEx</msdn>.
        /// </summary>
        /// <remarks>
        /// Also adds scrollbar width or/and height if need.
        /// </remarks>
        public static bool AdjustWindowRectEx(DpiOf dpiOf, ref RECT r, WS style, WSE exStyle, bool hasMenu = false)
        {
            int  dpi = dpiOf;
            bool ok  = osVersion.minWin10_1607
                                ? Api.AdjustWindowRectExForDpi(ref r, style, hasMenu, exStyle, dpi)
                                : Api.AdjustWindowRectEx(ref r, style, hasMenu, exStyle);

            if (ok)
            {
                if (style.Has(WS.VSCROLL))
                {
                    r.Width += ScrollbarV_(dpi);
                }
                if (style.Has(WS.HSCROLL))
                {
                    r.Width += ScrollbarH_(dpi);
                }
            }
            return(ok);
        }
示例#5
0
 /// <summary>
 /// Takes screenshot of specified rectangle in screen, quantizes colors to make smaller, compresses, Base64 encodes and returns comment string like <c>" /*image:...*/"</c>.
 /// If fails, prints warning and returns null.
 /// </summary>
 public static string MakeScreenshotComment(RECT r, DpiOf dpi = default)
 {
     if (dpi != default)
     {
         int i = dpi.Dpi;
         if (i != 96)
         {
             r.Inflate((Dpi.Scale(r.Width, i) - r.Width) / 2, (Dpi.Scale(r.Height, i) - r.Height) / 2);
         }
     }
     try {
         var b = uiimage.capture(r);
         var a = Quantize(b, 16);
         var z = Convert2.BrotliCompress(a);
         return("/*image:"
                //+ "\r\n" //rejected
                + "WkJN" + Convert.ToBase64String(z) + "*/");
     }
     catch (Exception e1) { print.warning("MakeScreenshotComment() failed. " + e1.ToStringWithoutStack()); return(null); }
 }
示例#6
0
 /// <summary>
 /// Calls API <msdn>SystemParametersInfoForDpi</msdn> if available, else <msdn>SystemParametersInfo</msdn>.
 /// Use only with <i>uiAction</i> = SPI_GETICONTITLELOGFONT, SPI_GETICONMETRICS, SPI_GETNONCLIENTMETRICS.
 /// </summary>
 public static unsafe bool SystemParametersInfo(uint uiAction, int uiParam, void *pvParam, DpiOf dpiOf)
 => osVersion.minWin10_1607
                 ? Api.SystemParametersInfoForDpi(uiAction, uiParam, pvParam, 0, dpiOf)
                 : Api.SystemParametersInfo(uiAction, uiParam, pvParam);
示例#7
0
 /// <summary>
 /// Calls API <msdn>GetSystemMetricsForDpi</msdn> if available, else <msdn>GetSystemMetrics</msdn>.
 /// </summary>
 public static int GetSystemMetrics(int nIndex, DpiOf dpiOf)
 => osVersion.minWin10_1607
                 ? Api.GetSystemMetricsForDpi(nIndex, dpiOf)
                 : Api.GetSystemMetrics(nIndex);
示例#8
0
        /// <summary>
        /// Unscales <b>RECT</b> if <i>dpiOf.Dpi</i> isn't 96 (100%).
        /// </summary>
        public static System.Windows.Rect Unscale(RECT r, DpiOf dpiOf)
        {
            double f = 96d / dpiOf;

            return(new(r.left * f, r.top *f, r.Width *f, r.Height *f));
        }
示例#9
0
        /// <summary>
        /// Unscales <b>SIZE</b> if <i>dpiOf.Dpi</i> isn't 96 (100%).
        /// </summary>
        public static System.Windows.Size Unscale(SIZE z, DpiOf dpiOf)
        {
            double f = 96d / dpiOf;

            return(new(z.width * f, z.height *f));
        }
示例#10
0
        //no. Eg also would be used for uint, long... Or name eg ScaleD. Or add double extension method.
        ///// <summary>
        ///// Scales <b>int</b> if <i>dpiOf.Dpi</i> isn't 96 (100%).
        ///// </summary>
        //public static int Scale(double i, DpiOf dpiOf) => (i*(int)dpiOf/96).ToInt();

        /// <summary>
        /// Unscales <b>int</b> if <i>dpiOf.Dpi</i> isn't 96 (100%).
        /// </summary>
        public static double Unscale(int i, DpiOf dpiOf) => i * (96d / dpiOf);
示例#11
0
        /////
        //public static int OfScreen(screen s, bool supportWin81 = false) => OfScreen(s.Now, supportWin81);

        /// <summary>
        /// Scales <b>int</b> if <i>dpiOf.Dpi</i> isn't 96 (100%).
        /// </summary>
        public static int Scale(int i, DpiOf dpiOf) => Math2.MulDiv(i, dpiOf, 96);
示例#12
0
文件: GDI misc.cs 项目: qmgindi/Au
 /// <summary>
 /// Selects standard UI font for specified DPI.
 /// </summary>
 /// <param name="dpi"></param>
 public FontDC_(DpiOf dpi) : this(NativeFont_.RegularCached(dpi))
 {
 }