在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線程中,使用這個函數重置縮放比例,能夠當即生效。函數