• 得到系统当前的dpi设置值


     public class DpiScaleHelper
        {
            [DllImport("user32.dll")]
            static extern IntPtr GetDC(IntPtr ptr);
    
            [DllImport("user32.dll", EntryPoint = "ReleaseDC")]
            public static extern IntPtr ReleaseDC(IntPtr hWnd, IntPtr hDc);
    
            [DllImport("gdi32.dll")]
            public static extern IntPtr CreateDC(
            string lpszDriver, // driver name
            string lpszDevice, // device name
            string lpszOutput, // not used; should be NULL
            Int64 lpInitData // optional printer data
            );
    
            [DllImport("gdi32.dll")]
            public static extern int GetDeviceCaps(
            IntPtr hdc, // handle to DC
            int nIndex // index of capability
            );
    
            [DllImport("user32.dll")]
            internal static extern bool SetProcessDPIAware();
    
            const int DRIVERVERSION = 0;
            const int TECHNOLOGY = 2;
            const int HORZSIZE = 4;
            const int VERTSIZE = 6;
            const int HORZRES = 8;
            const int VERTRES = 10;
            const int BITSPIXEL = 12;
            const int PLANES = 14;
            const int NUMBRUSHES = 16;
            const int NUMPENS = 18;
            const int NUMMARKERS = 20;
            const int NUMFONTS = 22;
            const int NUMCOLORS = 24;
            const int PDEVICESIZE = 26;
            const int CURVECAPS = 28;
            const int LINECAPS = 30;
            const int POLYGONALCAPS = 32;
            const int TEXTCAPS = 34;
            const int CLIPCAPS = 36;
            const int RASTERCAPS = 38;
            const int ASPECTX = 40;
            const int ASPECTY = 42;
            const int ASPECTXY = 44;
            const int SHADEBLENDCAPS = 45;
            const int LOGPIXELSX = 88;
            const int LOGPIXELSY = 90;
            const int SIZEPALETTE = 104;
            const int NUMRESERVED = 106;
            const int COLORRES = 108;
            const int PHYSICALWIDTH = 110;
            const int PHYSICALHEIGHT = 111;
            const int PHYSICALOFFSETX = 112;
            const int PHYSICALOFFSETY = 113;
            const int SCALINGFACTORX = 114;
            const int SCALINGFACTORY = 115;
            const int VREFRESH = 116;
            const int DESKTOPVERTRES = 117;
            const int DESKTOPHORZRES = 118;
            const int BLTALIGNMENT = 119;
    
            private static double m_dipCcale = -1.0;
    
            /// <summary>
            /// 得到dpi的比率
            /// </summary>
            /// <returns></returns>
            public static double GetDipScale()
            {
                if (m_dipCcale == -1.0)
                {
                    m_dipCcale = 1.0;
                    try
                    {
                        SetProcessDPIAware();  //重要
                        IntPtr screenDC = GetDC(IntPtr.Zero);
                        int dpi_x = GetDeviceCaps(screenDC, /*DeviceCap.*/LOGPIXELSX);
                        int dpi_y = GetDeviceCaps(screenDC, /*DeviceCap.*/LOGPIXELSY);
                        m_dipCcale = dpi_x / 96.0;//横向系数
                        = dpi_y / 96.0;//纵向系数
                        ReleaseDC(IntPtr.Zero, screenDC);
                    }
                    catch (Exception)
                    {
                        //throw;
                        //没有管理员权限就获取不到了
                    }
                }
                return m_dipCcale;
            }
  • 相关阅读:
    ORACLE EBS中查看某个Request的Output File
    如何查看非自己提交的请求的结果
    ORACLE EBS中OAF屏蔽的错误
    对OAF开发中的MDS的初步研究(转)
    MapGuide应用最佳实践资源库Repository的维护
    MapGuide OpenSource 2.1在Windows 7上运行
    MapGuide应用最佳实践采用托管(Managed)资源还是非托管(Unmanaged)资源
    MapGuide Open Source 2.1 正式发布
    Autodesk 2009开发者日现在开始报名
    支持Windows 7的CAD—AutoCAD Civil 3D 2010
  • 原文地址:https://www.cnblogs.com/fanyf/p/3054744.html
Copyright © 2020-2023  润新知