CEF 设置页面缩放级别

现在很多高分屏在笔记本和家用市场逐步扩大,普通应用大小在一个 2K 或者 4K 屏幕下就像一个便利签一样贴在屏幕上面,看着很小。于是操作系统提供了对分辨率进行缩放的功能,比如我可以设置当前分辨率放大到 125%,这样就可以让字体或者窗口看着更大一些。同样基于 CEF 制作的客户端程序也会随之放大到 125%,但是内嵌的网页呢?当然也需要根据系统设置放大缩小,CEF 给我们提供了 SetZoomLevel 方法让我们来设置页面的缩放比例。

同样,我们还是用 CEF 官方给出的 cefclient 举例,cefclient 提供了 ZoomLevel 的修改示例,在程序菜单中选择 Tests->Zoom In 页面就会放大,跟进代码我们可以看到。

实际是调用了通过 browser 获取到的 host 中的 SetZoomLevel 方法。

void ModifyZoom(CefRefPtr<CefBrowser> browser, double delta) {
  if (!CefCurrentlyOn(TID_UI)) {
    // Execute on the UI thread.
    CefPostTask(TID_UI, base::Bind(&ModifyZoom, browser, delta));
    return;
  }

  browser->GetHost()->SetZoomLevel(browser->GetHost()->GetZoomLevel() + delta);
}

缩放的维度在 cefclient 中是 0.5 一个维度,这个计算的差值可以参考 cef 社区中的讨论:https://www.magpcss.org/ceforum/viewtopic.php?f=6&t=11491,当你想根据系统的缩放比例自动设置页面的缩放大小时,你要做的有以下几个步骤。

  1. 获取当前系统的缩放比例
  2. 根据缩放比例计算出实际应用到 CEF 的缩放数值
  3. 调用 SetZoomLevel 方法设置缩放比例

另外还要考虑一个时机的问题,我实测在 AfterCreated 中去设置是不生效的,这个阶段比较早,在 LoadEnd 中去设置是生效的,但是这个位置又比较晚,所以根据你自己项目的情况来决定哪里去设置这个缩放比例吧。

发表评论