CEF使用的幾個注意點

轉自http://www.cnblogs.com/gongxijun/p/4857977.html    

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.如何自定義的....

編程是一種快樂,享受代碼帶給我的樂趣!!!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章