关于Webkit 控件dui化闪屏的解决

参看duilib Webkit内核dui化浏览器控件

今天下载了原作者BlzFans的源码http://www.github.com/BlzFans/wke,发现里面根本没有virtual void paint(HDC hdc,int x,int y,int cx,int cy,int xSrc,int ySrc,bool fKeepAlpha) = 0;这个函数,而在Redrain的例子里是用m_pWebView->getViewDC()来绘制的。前面上传的源码里并没有这个函数,是因为我用了他例子里“Wke浏览器控件windowless版本.rar”里面的wke。我以为这就是BlzFans的源码……。

BlzFans的里面也没有m_pWebView->getViewDC(),想编译他的源码折腾折腾,一大堆错误,算了,还是老老实实用Redrain例子里的wke吧。

替换掉wke.h、wke.lib和wke.dll,然后将

void CWkeWebkitUI::DoPaint(HDC hDC, const RECT& rcPaint, CControlUI* pStopControl)
{
    CControlUI::DoPaint(hDC, rcPaint, pStopControl);
    m_pWebView->paint(hDC, rcPaint.left, rcPaint.top, rcPaint.right - rcPaint.left, rcPaint.bottom - rcPaint.top, 0, 0, true);
}

改成

void CWkeWebkitUI::DoPaint(HDC hDC, const RECT& rcPaint, CControlUI* pStopControl)
{
     CControlUI::DoPaint(hDC, rcPaint, pStopControl);
    RECT rc = GetClientPos();
    BitBlt(hDC, rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top, m_pWebView->getViewDC(), 0, 0, SRCCOPY);
}

OK!闪屏没了,改变大小时绘制延迟是必须的!

自摆了个乌龙,当了回大神,呵呵!

为什么要
RECT rc = GetClientPos();
而不用rcPaint,你试试就知道了,这应该是duilib的问题吧!

你可能感兴趣的:(源码,webkit,控件,duilib,闪屏)