UIWebBrowserをC++Builderで使ってみる実験 その2

今回は、去年作った、黒猫ぶらうざ~ を少し使いやすくしてみます。


疑似MDI化対応
まず、疑似的なMDI化を行ってみました。
MSのサポート情報を見ると、MDIを孫実装することはできないけれど、複数のTOPレベルウィンドウにMDIを実装することは可能である。と書いています。

[INFO] Windows が入れ子になっている Windows の MDI クライアントをサポートしません。

ところが、Delphi/CBuilderは TOPレベルウィンドウを1つしか持てないので、実装が無理みたいなんですよね。
『フォームが作成できません。有効なMDIフォームがありません』のエラーを回避するために、FormStyle をあとで fsMDIChild に変更して見たりしましたが、ウィンドウが表示されず断念。疑似MDI化にすることにしました。

bwcb1
疑似MDIだと、こんな風に縦に画面分割したりもできます。

はみ出したWebページのキャプチャ機能

::IHTMLDocument2 *doc;
UIWebBrowser1->Document->QueryInterface(::IID_IHTMLDocument2,(void**)&doc);
doc->get_body(&lpBodyElm);
doc->Release();
lpBodyElm->QueryInterface(::IID_IHTMLElement2, (void**)&lpBodyElm2);
lpBodyElm2->get_scrollHeight(&h);
lpBodyElm2->get_scrollWidth(&w);
lpBodyElm2->Release();
UIWebBrowser1->Align=alNone;
UIWebBrowser1->Height=h+17+4;
UIWebBrowser1->Width=w+17+4;

これは、IID_IHTMLElement2のScrollサイズを取得することで実現しています。一時的に、フル画面で表示させて、その間にキャプチャするわけです。

表示倍率の変更機能

IHTMLStyle3 *Style;
VARIANT Zoom;
int er=GetZoom(pID,Style);
Zoom.vt=VT_BSTR;
Zoom.bstrVal=::SysAllocStringByteLen(NULL,size*sizeof(OLECHAR));
Style->put_zoom(Zoom);
Style->Release();
SysFreeString(Zoom.bstrVal);
return 0;

IE5.5から実装された、表示倍率の変更機能を実装してみました。

bwcb2
こんな感じ。

コマンドラインからの起動

もしかしたら、関連付けしたいという人がいるかもしれないので、機能追加。

窓の一括制御

ブラクラ対策の、『すべて閉じる』やMDI用の整列コマンドを実装。

ダウンロード:
黒猫ぶらうざ~ v0.11
Windows Me / Windows 2000 以降

関連記事:
UIWebBrowserをC++Builderで使ってみる実験

おすすめ

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です