1. 程式人生 > >CEF3開發者系列之CefEnableHighDPISupport詳解

CEF3開發者系列之CefEnableHighDPISupport詳解

html use enable val 情況 immediate zoom brush 放大

在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()這個接口函數,要麽去設置網頁的縮放比例。

設置網頁的縮放大小使用SetZoomLevel(double zoomLevel)這個函數,如下所示:
  ///
  // 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詳解