CEF為chrome瀏覽器的切入其他瀏覽器中的輕量級框架。 開發的客戶端的時候,這是作為界面顯示的首先,可以增強客戶的易變性,可塑性。
在開發的過程中(側重於C,C++解決),遇到的幾個問題,以及自己看源碼和整理出的KO思路:
1. cef如何禁用右鍵屬性:
手動寫一個Cclient來繼承 CefMenuHandler這個抽象類,然對其下面的純虛函數進行重寫
1 virtual bool OnBeforeMenu(CefRefPtr<CefBrowser> browser, const CefMenuInfo& menuInfo) { return true; } 2 virtual CefRefPtr<CefMenuHandler> GetMenuHandler() { return this; }
2.如何對瀏覽器進行定位或者說是畫出來:
首先用此函數GetClientRect 獲取客戶區的矩形區域,rect 然后運用下面的函數,進行定位
CefSettings cSettings; CefRefPtr<CefApp>spApp; CefWindowInfo info; RECT rect; RECT rectnew; CefBrowserSettings browserSettings;
1 CefSettingsTraits::init(&cSettings); 2 cSettings.multi_threaded_message_loop= true; 3 CefInitialize(cSettings, spApp); 4 GetClientRect(&rect); 5 rectnew=rect; 6 rectnew.top=rect.top+94; 7 rectnew.bottom=rect.bottom; 8 rectnew.left=rect.left; 9 rectnew.right=rect.right; 10 info.SetAsChild(GetSafeHwnd(),rectnew); 11
CefBrowser::CreateBrowser(info, static_cast<CefRefPtr<CefClient> >(client),
MainUrl.c_str(),browserSettings);
3. 如何對自定義操作進行cookie操作:
開啟一個線程,來修改進程中cookie的值
1 CefRefPtr<CefCookieManager> manager = CefCookieManager::GetGlobalManager(); 2 CefString(&cookie.name).FromASCII("PHPSESSID"); 3 //SessinID+=+";client"; 4 CefString(&cookie.value).FromASCII(SessinID.c_str()); 5 CefString(&cookie.domain).FromASCII("203.195.192.24"); 6 CefString(&cookie.path).FromASCII("/"); 7 8 cookie.has_expires = true; 9 cookie.expires.year = 2200; 10 cookie.expires.month = 10; 11 cookie.expires.day_of_week = 5; 12 cookie.expires.day_of_month = 11; 13 CefPostTask(TID_IO, NewCefRunnableMethod(manager.get(), &CefCookieManager::SetCookie, CefString(MainUrl.c_str()), cookie));
4.對於網上困擾很多人的,Cef+MFC頁面覆蓋(頁面不刷新現象),而不能顯示的問題,摸索了好久,發現原來是cef和MFC中對話框中的刷新前后不一樣造成的。
所以去研究了對話框的重繪之后,發現其實只需要,虛函數OnEraseBkgnd重寫,改成這樣之后,便不會出現頁面覆蓋,也不會出現閃爍的畫面既視感!
.h部分
virtual BOOL OnEraseBkgnd(CDC* pDC);
.cpp部分
在映射部分手動加載:
ON_WM_ERASEBKGND()
//這部分用來解決頁面覆蓋問題,喵的終於解決啦! BOOL MMenu::OnEraseBkgnd(CDC* pDC){ //return TRUE; return FALSE; }
4.如何自定義的....