CEF 中的那些坑

CEF (Chromium Embedded Framework) 的大名也据说好久了,最近由于客户的需求,简单地研究了一下。结果遇到了一个接一个的坑,且慢慢道来。比以前用QtWebkit的坑还要多和深。前端

其实,此次的程序很简单,主要是构建一个最前端显示的无边框的浏览器窗口,先从远端获取窗口大小和key,而后播放连接中的视频。从CEF1代码包里自带的cefclient下手,在win32下就进行修改。浏览器

1. Win32相关的窗口参数和位置设置函数

 

2. 去除浏览器窗口的右键菜单spa

 这个问题很无奈,经搜索说是能够经过OnBeforeMenu中阻止菜单弹出。先试试吧。code

// ClientHandler implementation.
class ClientHandler : public CefClient,
                      public CefLifeSpanHandler,
                      public CefLoadHandler,
                      public CefRequestHandler,
                      public CefDisplayHandler,
                      public CefFocusHandler,
                      public CefKeyboardHandler,
                      public CefPrintHandler,
                      public CefV8ContextHandler,
                      public CefDragHandler,
                      public CefPermissionHandler,
                      public CefGeolocationHandler,
                      public DownloadListener,
                      public CefMenuHandler {
// ...

 添加了CefMenuHandler,重写 OnBeforeMenu 函数。视频

  // 
  virtual bool OnBeforeMenu(CefRefPtr<CefBrowser> browser,
      const CefMenuInfo& menuInfo) { return true; }

结果彻底无效。blog

暂时使用直接运行JS命令来绕过这个坑:it

document.oncontextmenu = function() {return false;};

 

3. 去除浏览器窗口的滚动条程序要求不能显示滚动条,可是页面超出了设定的窗口大小,始终没法去除滚动条。尝试各类Windows API 方法。io

    CefWindowHandle hWnd = browser->GetWindowHandle();
    DWORD dwOldStyle = ::GetWindowLongPtr(hWnd, GWL_STYLE);
    DWORD dwNewStyle = dwOldStyle & (~(WS_HSCROLL|WS_VSCROLL)) ;

    SetWindowLongPtr(hWnd, GWL_STYLE, dwNewStyle);
    ShowScrollBar(m_BrowserHwnd, SB_BOTH, FALSE);
相关文章
相关标签/搜索