文档章节

MFC嵌入cef3 WTL嵌入cef3

lssaint
 lssaint
发布于 2014/10/24 15:31
字数 423
阅读 945
收藏 0

准备工作:

      把CEF3项目里的cefclient全部拷到自己的工程中去,并修改编译。

全局变量:

CefRefPtr<ClientApp> CefApp=NULL;
HWND hMessageWnd;

重写MFC启动代码

extern "C" int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)

        //添加以下代码,开始
        CefMainArgs main_args(hInstance);
        CefApp = new ClientApp();
        hMessageWnd = CreateMessageWindow(hInstance);
  // Execute the secondary process, if any.
  int exit_code = CefExecuteProcess(main_args, CefApp.get(), NULL);
  if (exit_code >= 0)
    return exit_code;


  // Parse command line arguments. The passed in values are ignored on Windows.
 // AppInitCommandLine(0, NULL);

  CefSettings settings;
  settings.multi_threaded_message_loop=true;
  //settings


  // Populate the settings based on command line arguments.
 // AppGetSettings(settings);

  // Initialize CEF.
  if(!CefInitialize(main_args, settings, CefApp.get(), NULL))
  {
     ASSERT(0);
  }
        //结束
         CWinThread *pThread = AfxGetThread();//获取主线程指针
         CWinApp *pApp = AfxGetApp();
         AfxWinInit();
         ....
         pApp->InitApplication();
         ...
         pThread->InitInstance();//初始化应用程序实例
         ...
         nReturnCode = pThread->Run();//开始消息循环
         
         CefShutdown();
}


  WTL在_tWinMain中添加

 //添加以下代码,开始
        CefMainArgs main_args;//(hInstance);
    CefApp = new ClientApp();

  // Execute the secondary process, if any.
  int exit_code = CefExecuteProcess(main_args, CefApp.get(), NULL);
  if (exit_code >= 0)
    return exit_code;


  // Parse command line arguments. The passed in values are ignored on Windows.
 // AppInitCommandLine(0, NULL);

  CefSettings settings;
  settings.multi_threaded_message_loop=true;
  //settings


  // Populate the settings based on command line arguments.
 // AppGetSettings(settings);

  // Initialize CEF.
  if(!CefInitialize(main_args, settings, CefApp.get(), NULL))
  {
     ASSERT(0);
  }
        //结束
  int nRet = Run(lpstrCmdLine, nCmdShow);
   _Module.Term();
   ::CoUninitialize();      
   CefShutdown();
   
   return nRet;

在_tWinMain 函数之前添加以下代码

LRESULT CALLBACK MessageWndProc(HWND hWnd, UINT message, WPARAM wParam,
                                LPARAM lParam);

HWND CreateMessageWindow(HINSTANCE hInstance) {
  static const wchar_t kWndClass[] = L"ClientMessageWindow";

  WNDCLASSEX wc = {0};
  wc.cbSize = sizeof(wc);
  wc.lpfnWndProc = MessageWndProc;
  wc.hInstance = hInstance;
  wc.lpszClassName = kWndClass;
  RegisterClassEx(&wc);

  return CreateWindow(kWndClass, 0, 0, 0, 0, 0, 0, HWND_MESSAGE, 0,
                      hInstance, 0);
}
LRESULT CALLBACK MessageWndProc(HWND hWnd, UINT message, WPARAM wParam,
                                LPARAM lParam) {
  switch (message) {
    case WM_COMMAND: {
      int wmId = LOWORD(wParam);
      switch (wmId) {
        case 32500:
          PostQuitMessage(0);
          return 0;
      }
    }
  }
  return DefWindowProc(hWnd, message, wParam, lParam);
}

在MFC或WTL中void CMainFrame::OnClose()添加以下代码

 ::DestroyWindow(hMessageWnd);


© 著作权归作者所有

下一篇: MFC嵌入cef1
lssaint
粉丝 8
博文 19
码字总数 14315
作品 1
程序员
私信 提问
Chrome嵌入MFC窗口后MFC无法响应ESC键关闭窗口消息

Chrome嵌入MFC窗口后该MFC窗口无法响应ESC键关闭窗口消息。CEF3中OnPreKeyEvent的参数os_event中的窗口句柄也与MFC窗口句柄、chrome浏览器句柄都不匹配。win7 64位操作系统。请大侠们赐教!...

wz08lb
2016/03/14
1K
0
【笔记】给Qt内嵌一个Chrome吧

[cef]: https://code.google.com/p/chromiumembedded/ 给Qt内嵌一个Chrome吧 [CEF][cef]简述 [CEF][cef](Chromium Embedded Framework),是一个用于开发Web浏览器控件的开源项目,其基于Goo...

加壹
2014/03/14
0
2
CEF3 C++语言如何 Get HTML Source from Chromium Embedded

我的是基于win32 的CEF3,我想获取CEF3加载网页的源码,代码如下,但是运行到visitor->Visit(t_cefstring);会保错,难道是没重写Visit,但是如何重写呢? void ClientHandler::OnLoadStart(...

GyaoG
2015/07/20
2.2K
2
STL,ATL,WTL之间的联系和区别

STL即 Standard Template Library (标准模板库) STL是惠普实验室开发的一系列软件的统称。它是由Alexander Stepanov、Meng Lee和David R Musser在惠普实验室工作时所开发出来的。现在虽说它...

AlphaJay
2010/06/28
0
0
MFC嵌入CEF3使用单进程模式是可以的,多进程模式出问题,哪里不对呢

为了便于维护和使用,我使用CEF3提供的文件封装了一个dll,供其他模块使用,其中的初始化部分如下: 创建Web窗口的导出函数如下: 然后新建一个基于CDialog的应用程序,在Dialog客户区创建一...

lsq19871207
2015/08/25
8.2K
3

没有更多内容

加载失败,请刷新页面

加载更多

面试爱奇艺,竟然挂在第5轮……

今天给大家分享我曾经在爱奇艺的面试,过程还是比较有意思的,可以给大家一些参考 <br> 聊骚阶段 嗲妹妹:你好,我是爱奇艺的HR,我们正在招聘运维开发岗位,请问您最近有在看工作机会吗? ...

上海小胖
今天
5
0
Jenkins系列_插件安装及报错处理

进入Jenkins之后我们可以进行插件的安装,插件管理位于以下模块: 发现上面报了一堆错误,是因为插件的依赖没有安装好,那么这一节,就先把这些错误解决掉吧。解决完成后,也就基本会使用插件...

shzwork
今天
2
0
mysql mysql的所有查询语句和聚合函数(整理一下,忘记了可以随时看看)

查询所有字段 select * from 表名; 查询自定字段 select 字段名 from 表名; 查询指定数据 select * from 表名 where 条件; 带关键字IN的查询 select * from 表名 where 条件 [not] in(元素...

edison_kwok
昨天
9
0
解决多线程并行加载缓存问题(利用guava实现)

依赖 com.google.guava:guava:20.0 import com.google.common.cache.Cache;import com.google.common.cache.CacheBuilder;import java.util.concurrent.ExecutionException;import j......

暗中观察
昨天
4
0
利用VisualVM 内存查看

准备工作,建几个测试类。等下就是要查看这几个类里面的属性 package visualvm;public class MultiObject { private String str; private int i; MultiObject(String str...

冷基
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部