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 件のコメント:
コメントを投稿