UIWebBrowserをC++Builderで使ってみる実験 その2
今回は、去年作った、黒猫ぶらうざ~ を少し使いやすくしてみます。
疑似MDI化対応
まず、疑似的なMDI化を行ってみました。
MSのサポート情報を見ると、MDIを孫実装することはできないけれど、複数のTOPレベルウィンドウにMDIを実装することは可能である。と書いています。
[INFO] Windows が入れ子になっている Windows の MDI クライアントをサポートしません。
ところが、Delphi/CBuilderは TOPレベルウィンドウを1つしか持てないので、実装が無理みたいなんですよね。
『フォームが作成できません。有効なMDIフォームがありません』のエラーを回避するために、FormStyle をあとで fsMDIChild に変更して見たりしましたが、ウィンドウが表示されず断念。疑似MDI化にすることにしました。
疑似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から実装された、表示倍率の変更機能を実装してみました。
こんな感じ。
コマンドラインからの起動
もしかしたら、関連付けしたいという人がいるかもしれないので、機能追加。
窓の一括制御
ブラクラ対策の、『すべて閉じる』やMDI用の整列コマンドを実装。
ダウンロード:
黒猫ぶらうざ~ v0.11
Windows Me / Windows 2000 以降
Comments