概要

集成

CXXXApp
CXXXApp::InitInstance调用
bool CXXXApp::InitializeCef()
{
    //return true;
    // Initialize Chrome
    m_CefApp = new CefMfcCefApp;
    CefMainArgs mainargs(m_hInstance);
    void* sandbox_info = NULL;

    // See if this is a Chrome process starting. If so, we're done with our (and MFC) initialization.
    const auto exit_code = CefExecuteProcess(mainargs, NULL, sandbox_info);
    if (exit_code >= 0)
        return false;

    CefSettings settings;
    settings.multi_threaded_message_loop = false;
    settings.no_sandbox = true;
    return CefInitialize(mainargs, settings, m_CefApp.get(), nullptr);
}
CXXXApp::ExitInstance()调用
void CXXXXApp::UninitializeCef()
{
    CefShutdown();
}
消息循环,重载PumpMessage

不调用会导致无法显示网页内容
BOOL CUniOPMClientApp::PumpMessage()
{
BOOL ret = __super::PumpMessage();
// Cef Message
CefDoMessageLoopWork();
return ret;
}

将CCefBrowserEventHandler集成到工程中

此类主要实现CefClient,可以通过多层继承控制/访问其他接口
后续直接使用此类进行实例化

集成到CDialog

CefRefPtr m_pClient;

初始化 CXXXDialog::OnInitDialog()
    CefRefPtr<CCefBrowserEventHandler> client(new CCefBrowserEventHandler(this));
    m_pClient = client;


    CRect rt;
    GetClientRect(&rt);
    CefWindowInfo windowInfo;
    windowInfo.SetAsChild(GetSafeHwnd(), rt);
    CefBrowserSettings browserSettings;
    CefBrowserHost::CreateBrowser(windowInfo, client, (LPCTSTR)m_szSSOUrl, browserSettings, NULL);
大小变化 void CXXXDialog::OnSize(UINT nType, int cx, int cy)
    if (m_pClient.get())
    {
        CefRefPtr<CefBrowser> browser = m_pClient->GetBrowser();
        if (browser)
        {
            CefWindowHandle hWnd = browser->GetHost()->GetWindowHandle();
            ::MoveWindow(hWnd, 0, 0, rect.Width(), rect.Height(), TRUE);
        }
    }
窗口关闭时 void CXXXDialog::OnClose()
    if (m_pClient.get())
    {
        bool force_close = true;
        m_pClient->CloseAllBrowsers(force_close);
    }
集成修改manifest文件

文档更新时间: 2023-09-22 20:08   作者:方杰