在CEF3中,CefEnableHighDPISupport()这个接口函数在使用时通常不为人所注意,可是若是稍有不慎,会形成打开的网页不能填满窗口的问题。若是是须要flash插件才能运行的游戏。则会出现打开游戏后,调整窗口大小时,发现游戏界面的大小并未随之改变,并且游戏里的点击位置却与界面显示的位置也不对应。html
是什么缘由出现这种状况呢?先来看看CefEnableHighDPISupport()这个接口函数是干什么用的。cef_app.h中,以下所说。windows
/// // Call during process startup to enable High-DPI support on Windows 7 or newer. // Older versions of Windows should be left DPI-unaware because they do not // support DirectWrite and GDI fonts are kerned very badly. /// /*--cef(capi_name=cef_enable_highdpi_support)--*/ void CefEnableHighDPISupport();
翻译:windows7或者更高版本系统中,在进程启动时设置High-DPI为启用状态。而低版本的windows系统对DirectWrite和DPI支持很差(设置这个不会有什么做用)。api
什么DPI? 全称是dots per inch (DPI), 也就是每英寸的点数,在显示器上就是每英寸的像素个数,Window上通常默认是96 dpi 做为100% 的缩放比率, 可是要注意的是该值未必是真正的显示器物理值, 只是Windows里咱们的一个参考标准。(详细参见:关于Windows高DPI的一些简单总结)。app
若是设置了对高DPI的支持,可是打开网页时,没有设置相应的缩放比例,那么在win7以上版本里,很容易出现文章开头所说的问题。解决这个问题很简单,要么不要使用CefEnableHighDPISupport()这个接口函数,要么去设置网页的缩放比例。async
/// // Change the zoom level to the specified value. Specify 0.0 to reset the // zoom level. If called on the UI thread the change will be applied // immediately. Otherwise, the change will be applied asynchronously on the // UI thread. /// /*--cef()--*/ virtual void SetZoomLevel(double zoomLevel) =0;
翻译:执行渲染以前,在UI线程中,使用这个函数重置缩放比例,能够当即生效。函数