Cef浏览器跟随窗口大小改变

关于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);
}

猜你喜欢

转载自blog.csdn.net/qq_37736666/article/details/114164400
今日推荐