cef3嵌入mfc多文档视图 流程
时间: 2023-08-20 12:04:18 浏览: 113
嵌入Cef3到MFC多文档视图的流程如下:
1.创建MFC多文档视图应用程序。
2.下载Cef3库,将Cef3头文件和库文件添加到您的项目中。
3.在您的应用程序中创建一个CefApp派生类,并实现必要的CefApp方法。
4.创建一个CefBrowser对象,并将其添加到您的视图窗口中。
5.在您的视图类中,实现必要的CEF接口方法:
a.覆盖OnSize方法,以便在视图大小更改时调整CefBrowser大小。
b.覆盖OnPaint方法,以便在视图绘制时绘制CefBrowser。
c.覆盖OnEraseBkgnd方法,以便防止视图背景被擦除。
6.在您的应用程序中,将Cef启动代码添加到InitInstance方法中。
7.在您的应用程序中,将Cef关闭代码添加到ExitInstance方法中。
8.运行您的应用程序,并在视图中嵌入Cef3浏览器。
希望这个流程能够帮助您嵌入Cef3到MFC多文档视图中。
相关问题
cef3嵌入mfc多文档视图 操作流程
以下是将Cef3嵌入MFC多文档视图的操作流程:
1.创建一个MFC多文档视图应用程序。
2.下载Cef3库,并将Cef3头文件和库文件添加到您的项目中。
3.在您的应用程序中创建一个CefApp派生类,并实现必要的CefApp方法。
4.在您的视图类中,创建一个CefBrowser对象,并将其添加到您的视图窗口中。
5.在您的应用程序中,将Cef启动代码添加到InitInstance方法中。
6.在您的应用程序中,将Cef关闭代码添加到ExitInstance方法中。
7.运行您的应用程序,并在视图中嵌入Cef3浏览器。
具体的实现步骤和代码已经在之前的问题中进行了讲解,您可以参考上述的问题和答案进行实现。
cef3嵌入mfc多文档视图 详细教程
以下是详细的cef3嵌入mfc多文档视图的教程:
1. 创建MFC多文档视图应用程序。
在Visual Studio中创建一个MFC应用程序,选择MFC多文档应用程序作为应用程序类型,接着按照向导的提示完成应用程序的创建。
2. 添加CEF3控件。
在应用程序的主框架窗口中添加一个CEF3控件,可以使用MFC自带的WebBrowser控件,也可以使用第三方的CEF3控件。
使用MFC自带的WebBrowser控件,可以在主框架窗口的OnInitDialog函数中添加以下代码:
```
CRect rect;
GetClientRect(&rect);
m_webBrowser.Create(NULL, NULL, WS_VISIBLE | WS_CHILD, rect, this, IDC_EXPLORER);
m_webBrowser.Navigate(_T("about:blank"), NULL, NULL, NULL, NULL);
```
使用第三方的CEF3控件,可以在主框架窗口的OnInitDialog函数中添加以下代码:
```
CRect rect;
GetClientRect(&rect);
m_cef3.Create(rect, this, 0);
m_cef3.InitBrowser("http://www.baidu.com");
```
其中,m_webBrowser和m_cef3分别是WebBrowser控件和CEF3控件的成员变量。
3. 创建文档类。
创建一个派生自CDocument的文档类,在其中添加CEF3的初始化和销毁代码。可以在文档类的构造函数中添加以下代码来初始化CEF3:
```
CefRefPtr<CefCommandLine> command_line = CefCommandLine::CreateCommandLine();
CefRefPtr<CefApp> app = new CCefApp;
CefMainArgs args(::GetModuleHandle(NULL));
CefExecuteProcess(args, app.get(), NULL);
CefSettings settings;
CefInitialize(args, settings, app.get(), NULL);
```
在文档类的析构函数中添加以下代码来销毁CEF3:
```
CefShutdown();
```
4. 创建视图类。
创建一个派生自CView的视图类,在其中添加CEF3的初始化和销毁代码。可以在视图类的构造函数中添加以下代码来初始化CEF3:
```
CefRefPtr<CefRequestContext> request_context = CefRequestContext::CreateContext(CefRequestContextSettings(), NULL);
CefRefPtr<CefBrowser> browser = CefBrowserHost::CreateBrowserSync(NULL, request_context, this, CefBrowserSettings(), NULL, NULL);
CefWindowHandle hwnd = browser->GetHost()->GetWindowHandle();
::SetParent(hwnd, GetSafeHwnd());
```
在视图类的析构函数中添加以下代码来销毁CEF3:
```
CefRefPtr<CefBrowserHost> host = browser->GetHost();
host->CloseBrowser(true);
browser = NULL;
```
其中,browser是CEF3的浏览器对象。
5. 添加消息处理函数和事件处理函数。
在视图类中添加CEF3控件的消息处理函数和事件处理函数。
消息处理函数的代码如下:
```
void CMyView::OnSize(UINT nType, int cx, int cy)
{
CView::OnSize(nType, cx, cy);
if (browser && browser->GetHost())
{
CefRect rect(0, 0, cx, cy);
browser->GetHost()->WasResized();
browser->GetHost()->SetFocus(true);
}
}
```
事件处理函数的代码如下:
```
bool CMyView::OnProcessMessageReceived(CefRefPtr<CefBrowser> browser, CefProcessId source_process, CefRefPtr<CefProcessMessage> message)
{
if (message->GetName() == "custom_message")
{
// 处理自定义消息
return true;
}
return false;
}
```
6. 注册文档类型。
在应用程序的主框架窗口中,使用相应的文档类和视图类注册一个新的文档类型。可以在主框架窗口的InitInstance函数中添加以下代码来注册文档类型:
```
CMultiDocTemplate* pDocTemplate;
pDocTemplate = new CMultiDocTemplate(IDR_MFCApplicationTYPE,
RUNTIME_CLASS(CMFCApplicationDoc),
RUNTIME_CLASS(CChildFrame), // 自定义框架窗口类
RUNTIME_CLASS(CMFCApplicationView));
if (!pDocTemplate)
return FALSE;
AddDocTemplate(pDocTemplate);
```
其中,CChildFrame是自定义的框架窗口类,CMFCApplicationView是自定义的视图类。
7. 创建文档。
在应用程序的主框架窗口中,使用相应的文档类和视图类创建一个新的文档。可以在主框架窗口的OnFileNew函数中添加以下代码来创建文档:
```
CDocument* pDoc = NULL;
CMultiDocTemplate* pTemplate = GetDocTemplate(RUNTIME_CLASS(CMFCApplicationDoc));
if (pTemplate != NULL)
pDoc = pTemplate->CreateNewDocument();
if (pDoc != NULL)
{
AddDocument(pDoc);
pDoc->SetTitle(_T("New Document"));
pDoc->OnNewDocument();
CFrameWnd* pFrame = pTemplate->CreateNewFrame(pDoc, NULL);
if (pFrame != NULL)
{
pTemplate->InitialUpdateFrame(pFrame, pDoc);
}
}
```
其中,CMFCApplicationDoc是自定义的文档类。
8. 显示CEF3控件。
在新文档的视图中,初始化并显示CEF3控件。可以在视图类的OnInitialUpdate函数中添加以下代码来显示CEF3控件:
```
CRect rect;
GetClientRect(&rect);
browser->GetHost()->SetSize(PET_VIEW, rect.Width(), rect.Height());
browser->GetHost()->WasResized();
browser->GetHost()->SetFocus(true);
```
其中,browser是CEF3的浏览器对象。
以上就是cef3嵌入mfc多文档视图的详细教程,希望能够对你有所帮助。
阅读全文