环境: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;
}