存在的问题如下:

 

 

 

解决方法1:将cefsharp的gpu设置为无效,在Program.cs中修改,或者在构造cefsharp之前做如下修改(后遗症,h5动画会出现卡顿现象,慎用)

var settings = new CefSettings
{
Locale = "zh-CN"
};
settings.CefCommandLineArgs.Add("disable-gpu", "1");
Cef.Initialize(settings);

 

解决方法2:支持高DPI(后遗症,winform窗体会缩放)

Cef.EnableHighDPISupport();

 

解决方法3:让整个程序支持高DPI(最优解决方案)

(1)为项目添加应用程序清单文件(app.manifest),创建app.manifest程序清单文件

(2)取消下面行的注释

<application xmlns="urn:schemas-microsoft-com:asm.v3">
<windowsSettings>
<dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware>
</windowsSettings>
</application>

(3)将Form和UserControl的AutoScaleMode设置为Dpi

如果你做了窗体自适应(根据控件的固定大小,按照拉伸比例来拉伸),还需要以下步骤:

UserControl回复为缩放前的大小

   this.lblClassTime.Location = new System.Drawing.Point((int)(8 * PrimaryScreenHelper.ScalePercent), (int)(75 * PrimaryScreenHelper.ScalePercent));
   this.lblClassTime.Size = new System.Drawing.Size((int)(285 * PrimaryScreenHelper.ScalePercent), (int)(22 * PrimaryScreenHelper.ScalePercent));

   添加获取DPI和缩放比例的帮助类

 public class PrimaryScreenHelper
     {
         #region Win32 API  
         [DllImport("user32.dll")]
         static extern IntPtr GetDC(IntPtr ptr);
         [DllImport("gdi32.dll")]
         static extern int GetDeviceCaps(
         IntPtr hdc, // handle to DC  
         int nIndex // index of capability  
         );
         [DllImport("user32.dll", EntryPoint = "ReleaseDC")]
         static extern IntPtr ReleaseDC(IntPtr hWnd, IntPtr hDc);
         #endregion
         #region DeviceCaps常量  
         const int HORZRES = 8;
         const int VERTRES = 10;
         const int LOGPIXELSX = 88;
         const int LOGPIXELSY = 90;
         const int DESKTOPVERTRES = 117;
         const int DESKTOPHORZRES = 118;
         #endregion
 
         #region 属性  
         /// <summary>  
         /// 获取屏幕分辨率当前物理大小  
         /// </summary>  
         public static Size WorkingArea
         {
             get
             {
                 IntPtr hdc = GetDC(IntPtr.Zero);
                 Size size = new Size();
                 size.Width = GetDeviceCaps(hdc, HORZRES);
                 size.Height = GetDeviceCaps(hdc, VERTRES);
                 ReleaseDC(IntPtr.Zero, hdc);
                 return size;
             }
         }
         /// <summary>  
         /// 当前系统DPI_X 大小 一般为96  
         /// </summary>  
         public static int DpiX
         {
             get
             {
                 IntPtr hdc = GetDC(IntPtr.Zero);
                 int DpiX = GetDeviceCaps(hdc, LOGPIXELSX);
                 ReleaseDC(IntPtr.Zero, hdc);
                 return DpiX;
             }
         }
         /// <summary>  
         /// 当前系统DPI_Y 大小 一般为96  
         /// </summary>  
         public static int DpiY
         {
             get
             {
                 IntPtr hdc = GetDC(IntPtr.Zero);
                 int DpiX = GetDeviceCaps(hdc, LOGPIXELSY);
                 ReleaseDC(IntPtr.Zero, hdc);
                 return DpiX;
             }
         }
         /// <summary>  
         /// 获取真实设置的桌面分辨率大小  
         /// </summary>  
         public static Size DESKTOP
         {
             get
             {
                 IntPtr hdc = GetDC(IntPtr.Zero);
                 Size size = new Size();
                 size.Width = GetDeviceCaps(hdc, DESKTOPHORZRES);
                 size.Height = GetDeviceCaps(hdc, DESKTOPVERTRES);
                 ReleaseDC(IntPtr.Zero, hdc);
                 return size;
             }
         }
 
         /// <summary>  
         /// 获取宽度缩放百分比  
         /// </summary>  
         public static float ScaleX
         {
             get
             {
                 IntPtr hdc = GetDC(IntPtr.Zero);
                 int t = GetDeviceCaps(hdc, DESKTOPHORZRES);
                 int d = GetDeviceCaps(hdc, HORZRES);
                 float ScaleX = (float)GetDeviceCaps(hdc, DESKTOPHORZRES) / (float)GetDeviceCaps(hdc, HORZRES);
                 ReleaseDC(IntPtr.Zero, hdc);
                 return ScaleX;
             }
         }
         /// <summary>  
         /// 获取高度缩放百分比  
         /// </summary>  
         public static float ScaleY
         {
             get
             {
                 IntPtr hdc = GetDC(IntPtr.Zero);
                 float ScaleY = (float)(float)GetDeviceCaps(hdc, DESKTOPVERTRES) / (float)GetDeviceCaps(hdc, VERTRES);
                 ReleaseDC(IntPtr.Zero, hdc);
                 return ScaleY;
             }
         }
 
         /// <summary>
         /// 获取高DPI下屏幕的缩放比例
         /// </summary>
         public static float ScalePercent
         {
             get { return DpiX / 96.0F; }
         }
         #endregion
     }

 

原文地址:http://www.cnblogs.com/19930521zhang/p/16807649.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性