2008-01-14

WebKitをWindowsから使う

I posted English content in http://wontfix-en.blogspot.com/2008/01/since-i-research-webkit-i-try-writing.html.

ちょっと、WebKitについて調べてみたので、ついでにWebKitの使い方を調べてみた。

WebKitはCOMのインターフェイスを持っているので、COM経由でロードして使う。ここらはInternet Explorerとかと一緒。

初期化

IWebViewをCoCreateInstance()で取得後、親のウィンドウハンドルを登録して、initWithFrame()を呼べば、WebKitのウィンドウが作成される。

IWebView *pWebView;
HRESULT hr;

hr = ::CoCreateInstance(CLSID_WebView,
                        0,
                        CLSCTX_ALL,
                        IID_IWebView,
                        (void**)&pWebView);
if(hr != S_OK)
    goto error;

hr = pWebView->setHostWindow((OLE_HANDLE) hWnd);
if(hr != S_OK)
    goto error;

::GetClientRect(hWnd,&clientRect);
hr = pWebView->initWithFrame(clientRect, NULL, NULL);
if(hr != S_OK)
    goto error;

URLのロード

Mac OS Xでの使い方のいろんなWebページを見たところ、takeStringURLFromを使えばいいという記述がほとんど。なのでそのまま使ってみたところ、E_NOTIMPLを返すようになっているようだ。

Windows上のWebKitの場合でURLを開く場合は、IWebURLRequestを持ってきて、IWebFrame::loadRequest()経由で開く。すでにHTMLを持っている場合は、そのまま渡すことも可能。

HRESULT hr;
BSTR str;
IWebFrame* pWebFrame;
IWebURLRequest * pWebURLRequest;
IWebView* pWebView;

hr = ::CoCreateInstance(CLSID_WebURLRequest,
                        0,
                        CLSCTX_ALL,
                        IID_IWebURLRequest,
                        (void**)&pWebURLRequest);
if(hr != S_OK)
    goto error;

str = ::SysAllocString(L"http://www.apple.com/");
hr = pWebURLRequest->initWithURL(str,
                                 WebURLRequestUseProtocolCachePolicy,
                                 60);
if(hr != S_OK)
    goto error;

hr = pWebView->mainFrame(&pWebFrame);
if(hr != S_OK)
    goto error;

hr = pWebFrame->loadRequest(pWebURLRequest);
if(hr != S_OK)
    goto error;

pWebURLRequest->Release();
pWebFrame->Release();

0 件のコメント: