关于Cef浏览器跟随窗口大小改变的问题
在你的CefClient中继承 "CefLifeSpanHandler" 回调类,重载 "GetLifeSpanHandler" 并返回 "this" 详细代码如下:
virtual CefRefPtr<CefLifeSpanHandler> GetLifeSpanHandler() OVERRIDE {
return this;
}
然后在你的CefClient.h文件中添加一个命名空间,他的作用是全局变量访问,详细代码如下:
namespace {
// cef 浏览器的句柄
CefWindowHandle CefHwnd = NULL;
}
现在是重头戏,那就是如何取得Cef 浏览器的句柄,重载 "CefLifeSpanHandler" 回调类的函数 "OnAfterCreated" 他的作用是 "创建新的浏览器后调用" 参数 CefRefPtr<CefBrowser> browser"是传入的浏览器对象,详细代码如下:
virtual void OnAfterCreated(CefRefPtr<CefBrowser> browser) {
// 获取句柄
::CefHwnd = browser->GetHost()->GetWindowHandle();
}
Cef浏览器跟随窗口移动,在你的WndProc中处理消息 "WM_SIZE" ,并使用MoveWindow,详细代码如下:
if (::CefHwnd != NULL) {
RECT WindowUserClientRect;
GetClientRect(hwnd, &WindowUserClientRect);
// 最后一个参数必须为 'false' 否则移动的时候会闪屏
MoveWindow(::CefHwnd, 0, 0, WindowUserClientRect.right,
WindowUserClientRect.bottom, false);
}