CEF3開發者系列之CefEnableHighDPISupport詳解
阿新 • • 發佈:2017-06-26
html use enable val 情況 immediate zoom brush 放大
設置網頁的縮放大小使用SetZoomLevel(double zoomLevel)這個函數,如下所示:
在CEF3中,CefEnableHighDPISupport()這個接口函數在使用時一般不為人所註意,但是如果稍有不慎,會造成打開的網頁不能填滿窗口的問題。如果是需要flash插件才能運行的遊戲。則會出現打開遊戲後,調整窗口大小時,發現遊戲界面的大小並未隨之改變,而且遊戲裏的點擊位置卻與界面顯示的位置也不對應。
是什麽原因出現這種情況呢?先來看看CefEnableHighDPISupport()這個接口函數是幹什麽用的。cef_app.h中,如下所說。
/// // 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支持不好(設置這個不會有什麽作用)。
什麽DPI? 全稱是dots per inch (DPI), 也就是每英寸的點數,在顯示器上就是每英寸的像素個數,Window上一般默認是96 dpi 作為100% 的縮放比率, 但是要註意的是該值未必是真正的顯示器物理值, 只是Windows裏我們的一個參考標準。(詳細參見:關於Windows高DPI的一些簡單總結)。
如果設置了對高DPI的支持,但是打開網頁時,沒有設置相應的縮放比例,那麽在win7以上版本裏,很容易出現文章開頭所說的問題。解決這個問題很簡單,要麽不要使用CefEnableHighDPISupport()這個接口函數,要麽去設置網頁的縮放比例。
/// // 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線程中,使用這個函數重置縮放比例,可以立即生效。
CEF3開發者系列之CefEnableHighDPISupport詳解