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