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

来源:互联网 发布:便携式打印机 知乎 编辑:程序博客网 时间:2024/06/06 17:17

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




0 0
原创粉丝点击