CEF 中的那些坑


CEF (Chromium Embedded Framework) 的大名也聽說很久了,最近因為客戶的需求,簡單地研究了一下。結果遇到了一個接一個的坑,且慢慢道來。比之前用QtWebkit的坑還要多和深。

其實,這次的程序很簡單,主要是構建一個最前端顯示的無邊框的瀏覽器窗口,先從遠端獲取窗口大小和key,然后播放鏈接中的視頻。從CEF1代碼包里自帶的cefclient下手,在win32下就進行修改。

1. Win32相關的窗口參數和位置設置

 

2. 去除瀏覽器窗口的右鍵菜單

 這個問題很無奈,經搜索說是可以通過OnBeforeMenu中阻止菜單彈出。先試試吧。

// 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; }

結果完全無效。

暫時使用直接運行JS命令來繞過這個坑:

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

 

3. 去除瀏覽器窗口的滾動條程序要求不能顯示滾動條,但是頁面超出了設定的窗口大小,始終無法去除滾動條。嘗試各種Windows API 方法。

    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);

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM