基于WebKit内核的浏览器设置放大缩小

环境:win7 32位,vs2013,webkit-r174650

主要思路是修改webkit源码,在webview添加一个接口,同webkit内核打交道

在webview工程中搜索setTextSizeMultiplier,这个函数只放大文字,不能满足要求,所以添加新的函数以及接口

WebView.h

	virtual HRESULT STDMETHODCALLTYPE setSizeMultiplier(
		/* [in] */ float multiplier, /* [in] */ BOOL isTextOnly);

	virtual HRESULT STDMETHODCALLTYPE sizeMultiplier(
		/* [in] */ BOOL isTextOnly, /* [retval][out] */ float *multiplier);

WebView.cpp

HRESULT STDMETHODCALLTYPE WebView::setSizeMultiplier(
	/* [in] */ float multiplier, /* [in] */ BOOL isTextOnly)
{
	if (!m_mainFrame)
		return E_FAIL;
	setZoomMultiplier(multiplier, isTextOnly);
	return S_OK;
}
HRESULT STDMETHODCALLTYPE WebView::sizeMultiplier(
    /* [in] */ BOOL isTextOnly, /* [retval][out] */ float* multiplier)
{
    *multiplier = zoomMultiplier(isTextOnly);
    return S_OK;
}

IWebView.idl

HRESULT setSizeMultiplier([in] float multiplier, [in] BOOL isTextOnly);

HRESULT sizeMultiplier([in] BOOL isTextOnly, [out, retval] float* multiplier);

调用处:

HRESULT WinLauncher::prepareViews(HWND mainWnd, const RECT& clientRect, const BSTR& requestedURL, HWND& viewHwnd)
{
    if (!m_webView)
        return E_FAIL;

    HRESULT hr = m_webView->setHostWindow(mainWnd);
    if (FAILED(hr))
        return hr;

    hr = m_webView->initWithFrame(clientRect, 0, 0);
    if (FAILED(hr))
        return hr;

	IWebFramePtr frame;
	hr = m_webView->mainFrame(&frame.GetInterfacePtr());
	if (FAILED(hr))
		return hr;

    if (!requestedURL) {
        frame->loadHTMLString(_bstr_t(defaultHTML).GetBSTR(), 0);
    }


	hr = m_webView->setSizeMultiplier(m_fSizeMultiplier, FALSE);

    hr = m_webViewPrivate->setTransparent(m_useLayeredWebView);
    if (FAILED(hr))
        return hr;

    hr = m_webViewPrivate->setUsesLayeredWindow(m_useLayeredWebView);
    if (FAILED(hr))
        return hr;

    hr = m_webViewPrivate->viewWindow(&viewHwnd);

    return hr;
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值