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