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