zoukankan      html  css  js  c++  java
  • CEF使用的几个注意点

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

  • 相关阅读:
    「赛后总结」Codeforces Round #680 (Div. 2)
    雲雀
    「题解」洛谷 P1494 [国家集训队]小Z的袜子
    NOIP 2020 退役记
    任务查询系统「主席树+差分」
    组合「欧拉路」
    AtCoder 123 Triangle「思维题」
    旅行(加强版)「基环树」
    一个简单的询问「莫队」
    [HNOI2012]永无乡「线段树合并」
  • 原文地址:https://www.cnblogs.com/gongxijun/p/4857977.html
Copyright © 2011-2022 走看看