chrominum cef 简单实现
来源:互联网 发布:ibcf算法 编辑:程序博客网 时间:2024/06/05 02:55
sdk官网
https://bitbucket.org/chromiumembedded/cef
https://cefbuilds.com/
版本2454,可在xp下正确运行(window7 vs2008下会导致crtdbg memory dump报不出,xp、win10下正常)
stdint.h文件
http://www.azillionmonkeys.com/qed/pstdint.h
需要include头文件
#include <include/cef_app.h>#include <include/cef_client.h>#include <include/cef_render_handler.h>
定义接口类用以渲染到贴图
class RenderHandler : public CefRenderHandler {public: IDirect3DTexture9 * m_pTexture; RenderHandler(IDirect3DTexture * pTexture) : m_pTexture(pTexture) {} virtual bool GetViewRect(CefRefPtr<CefBrowser> browser, CefRect & rect) { D3DSURFACE_DESC desc; m_pTexture->GetLevelDesc(0, &desc); rect = CefRect(0,0,desc.Width,desc.Height); return true; } virtual void OnPaint(CefRefPtr<CefBrowser> browser, PaintElementType type, const RectList & dirtyRects, const void * buffer, int width, int height) { D3DLOCKED_RECT rc; RECT lcRect = {0,0,width,height}; HRESULT hr = m_pTexture->LockRect(0, &rc, &lcRect, 0); memcpy(rc.pBits, buffer, width * height * 4); m_pTexture->UnlockRect(0); } IMPLEMENT_REFCOUNTING(RenderHandler);};class BrowserClient : public CefClient {public: CefRefPtr<CefRenderHandler> m_renderHandler; BrowserClient(RenderHandler * renderHandler) : m_renderHandler(renderHandler) {} virtual CefRefPtr<CefRenderHandler> GetRenderHandler() { return m_renderHandler; } IMPLEMENT_REFCOUNTING(BrowserClient);};
全局初始化流程
CefMainArgs args(hInstance);int result = CefExecuteProcess(args, NULL, NULL);if (result >= 0) { return result;}CefSettings settings;result = CefInitialize(args, settings, NULL, NULL);if (!result) { return -1;}
创建D3D设备时期
pd3dDevice->CreateTexture(1024,1024,1,0,D3DFMT_A8R8G8B8,D3DPOOL_MANAGED,&g_pTexture,NULL);RenderHandler* renderHandler = new RenderHandler(g_pTexture);CefWindowInfo windowInfo;CefBrowserSettings browserSettings;windowInfo.SetAsWindowless(DXUTGetHWND(), false);g_browserClient = new BrowserClient(renderHandler);g_browser = CefBrowserHost::CreateBrowserSync(windowInfo, g_browserClient.get(), "http://www.google.com", browserSettings, NULL);
在主消息循环处,类似于d3d框架中的OnD3D9FrameRender
CefDoMessageLoopWork();
此时的g_pTexture内就是网页内容了,可以在合适的时机渲染出来
常用消息处理
// 鼠标消息处理g_browser->GetHost()->SendMouseClickEvent(..);g_browser->GetHost()->SendMouseMoveEvent(..);g_browser->GetHost()->SendMouseWheelEvent(..);// 键盘消息处理g_browser->GetHost()->SendKeyEvent(..);// 显示隐藏处理g_browser->GetHost()->WasHidden(..);// 当窗体(贴图)大小发生变化时g_browser->GetHost()->WasResized();// 当窗体获取/丢失焦点时g_browser->GetHost()->SendFocusEvent(..);
在销毁D3D设备时销毁对应的浏览器对象
g_browser = NULL;g_browserClient = NULL;CefShutdown();SAFE_RELEASE(g_pTexture);
0 0
- chrominum cef 简单实现
- 基于CEF内核的简单浏览器实现(***)
- CEF 实现全屏播放视频
- CEF
- duilib + cef简单浏览器的demo
- vs2013实现duilib结合cef的demo
- duilib + cef简单浏览器的demo2--c++和js交互
- Duilib + CEF 实现多标签多页面浏览器实例
- centos6.x安装chrominum浏览器(原…
- CEF功能
- CEF简介
- CEF-GeneralUsage
- CEF-Architecture
- CEF-JavaScriptIntegration
- cef架构
- mfc cef
- Cef-----摘抄
- cef 介绍
- 企业通用开发框架学习
- 异或运算规则及其应用
- 身份证有效性校验
- linux phpstudy
- 【原创】Tocat&Weblogice设置CLASSPATH加载外部文件
- chrominum cef 简单实现
- Token验证详解
- Interbase 数据表中字段的数据类型
- Linux tcpdump 命令详解
- 【43.75%】【codeforces 688E】The Values You Can Make
- Git冲突:commit your changes or stash them before you can merge. 解决办法
- Android Studio 2.2.1关于InstantRun的致命Bug
- 第二部分 好玩的 正则表达式
- SpanBuilder 一个TextView可设置的效果