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