Qt 集成miniblink浏览器库之4 解决兼容性问题

本文介绍了将miniblink集成到qt的方法。先尝试用wkeCreateWebWindow创建浏览器窗口,发现不同系统兼容性和层级问题。后采用wkeCreateWebView,介绍了创建对象、窗口,使用GDI绘制,事件处理等步骤,还解决了win7最小化恢复未渲染问题,经测试该方法表现良好。

之前介绍了如何miniblink集成到qt,采用wkeCreateWebWindow来创建一个浏览器窗口,wkeCreateWebWindow有三种方式

typedef enum _wkeWindowType {
    WKE_WINDOW_TYPE_POPUP,
    WKE_WINDOW_TYPE_TRANSPARENT,
    WKE_WINDOW_TYPE_CONTROL
} wkeWindowType;

WKE_WINDOW_TYPE_POPUP 创建一个弹出式窗体,模态窗体。

WKE_WINDOW_TYPE_TRANSPARENT 透明父窗口窗体

WKE_WINDOW_TYPE_CONTROL  创建一个弹出式窗体,非模态窗体。

因为要实现成一个qtwidget的子窗体,所以用了WKE_WINDOW_TYPE_TRANSPARENT来创建浏览器窗口,qt两种方式其实应用场景很有限。

这个属性创建的窗体在win7,surface系统表现异常,出现渲染布出来问题, 只有win10 表现还过得去。最后发现是因为我同时使用了两种浏览器QtWebengineView和miniblink浏览器,这两种窗体在不同系统中兼容性存在问题。

如果只是放到qtwidget上面没有啥问题。

尝试了如下方法:

1.使用WKE_WINDOW_TYPE_POPUP/WKE_WINDOW_TYPE_CONTROL表现正常,但是跟其他窗体存在层级问题

2.使用WKE_WINDOW_TYPE_TRANSPARENT创建,将窗体独立,跟上面的基本一样,不止存在层级问题,win10多桌面显示也存在问题。

所以wkeCreateWebWindow无法满足需求。

看了一下接口文件发现一个wkeCreateWebView,该函数只是创建一个对象,并不会真正绘制,绘制需要自己处理。

1.创建对象

    _hWebView = wkeCreateWebView();
    wkeSetTransparent(_hWebView, false);
    wkeOnPaintUpdated(_hWebView, onPaintUpdatedCallback, this);
    wkeOnLoadUrlBegin(_hWebView, onLoadUrlBegin, (void *)this);
    wkeOnLoadUrlEnd(_hWebView, onLoadUrlEnd, (void *)this);
    wkeOnLoadUrlFail(_hWebView, onLoadUrlFailed, (void *)this);
    wkeOnLoadingFinish(_hWebView, onLoadingFinish, (void *)this);

最重要的回调函数是onPaintUpdatedCallback,因为要自己绘制,改接口在需要绘制时会回调回来。原型为:

static void onPaintUpdatedCallback(wkeWebView webView, void* param, const HDC hdc, int x, int y, int cx, int cy);

返回的是HDC,所以我们需要一个绘制窗口

2.创建一个windows 窗口对象

注册窗口类:

    WNDCLASSEX wcex;

    wcex.cbSize = sizeof(WNDCLASSEX);

    wcex.style = CS_DBLCLKS;// CS_HREDRAW | CS_VREDRAW; //
    wcex.lpfnWndProc = webViewWndProc;<

评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值