mfc内嵌CEF浏览器
如何在MFC应用程序中嵌入和使用CEF浏览器
创建新的MFC项目并配置环境
为了使 MFC 应用程序能够成功加载 CEF 浏览器,创建一个新的基于对话框的 MFC 工程是第一步。接着需要引入 cefsimple
中的相关文件来构建项目的架构[^3]。
添加必要的源码和支持文件
将 Chromium Embedded Framework 的简单示例工程 (cefsimple
) 下的所有 .cpp 和 .h 文件复制到新建立的 MFC 项目之中。这些文件包含了启动 CEF 所必需的核心逻辑以及初始化过程所需的函数定义。
调整预编译头设置
由于默认情况下 MFC 使用预编译头 (PCH),这可能会与 CEF 的某些特性发生冲突。因此建议关闭该项目内的 PCH 功能以避免潜在的问题。具体操作是在属性管理器里找到对应的选项并将它设为不使用预编译头文件[^1]。
配置包含路径和链接库
为了让 Visual Studio 正确识别来自 CEF SDK 的接口声明和其他依赖项,需指定额外的包含目录以便访问头文件;同时也要指明静态或动态链接时所要用到的库的位置。通常做法是在项目属性页下的 VC++ 目录节点下添加相应的文件夹路径。
- 头文件夹: 将 CEF 安装包解压后的 include 子目录加入全局包含路径列表;
- 库文件夹: 对于 Release 版本应指向 \path\to\cef_binary[version]\Release ,Debug 则对应 Debug 文件夹。
解决可能出现的编译问题
初次尝试编译时很可能会遇到一些警告甚至错误提示。针对这些问题逐一排查修正直至整个解决方案能顺利通过编译阶段。常见的调整包括但不限于:
- 修改宏定义
_WIN32_WINNT=0x0A00
或更高版本确保 Windows API 支持程度满足要求; - 如果存在未解析外部符号,则检查是否遗漏了某个重要的导入库(.lib)或者拼写有误。
实现基本的功能扩展
完成上述准备工作之后就可以着手开发具体的业务逻辑了。比如自定义窗口类重载 WM_CREATE 消息处理函数用于实例化 CefWindowInfo 结构体并调用 CefBrowserHost::CreateBrowser() 方法创建实际可见的 web 页面容器对象。
// 在对话框类中增加成员变量保存客户端适配器句柄
HWND hWndClient;
// OnCreate 函数内部片段示意
if (!CefCurrentlyOn(TID_UI)) {
// Ensure all CEF operations happen on UI thread.
CefPostTask(TID_UI, base::BindOnce(&YourDialogClass::OnCreate, this));
}
// Initialize the window info structure.
CefWindowInfo window_info;
#if defined(OS_WIN)
window_info.SetAsChild(hWndClient);
#endif
// Create browser instance with default settings and no client handler.
CefBrowserSettings browser_settings;
CefBrowserHost::CreateBrowser(window_info, nullptr /*client*/, "https://www.example.com",
browser_settings, nullptr /*extra_info*/);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
加入清单文件支持
对于现代操作系统而言,应用程序可能还需要附带一个 application manifest 来声明其运行权限级别以及其他元数据信息。可以通过资源视图向导轻松地把 app.manifest 文件纳入工程项目当中去,并适当编辑其中的内容使其适应当前场景的需求。
相关推荐
















