Click here to visit our sponsor

コンテナ


ここは...

HTA をホストとするコントロールを作成する時に気付いた事などをまとめています。


目次


ActiveX Contorl のコンテナとしての mshta

mshta は WebBrowser Control のコンテナですが、
WebBrowser Control もコンテナの機能を有しています。
また WebBrowser Control は、
OLE'96 仕様に対応した最新のコンテナでもあります。

WebBrowser Control が作るページ (<BODY>下) に配置された、
テキストボックスやボタンは、ウインドウハンドルを持ちません。
これは、ウインドウレスコントロール である事を意味します。


iexplore.exemshta.exe もほとんど同じと考えていいでしょう。
ただし、mshta は、
ステータスバー、external オブジェクト(DOM)、IServiceProvider
などなど、提供しない機能が多々あります。


コントロールのロード

コントロールがロードされる時の順序
(mshta 6.0)

開始
IClassFactory/2
IQuickActivate::QuickActivate
IOleObject::SetClientSite
IViewObjectEx::SetAdvise
IOleObject::GetMiscStatus
IViewObjectEx::GetViewStatus
IPersistPropertyBag::Load
IOleObject::SetExtent
IOleObject::GetExtent
IOleObject::DoVerb(-5)
IOleWindow::GetWindow
(WM_CREATE)
IOleInPlaceObject::SetObjectRects

コンテナのアンビエンとプロパティにアクセス出来るのは IOleObject::SetClientSite から。
だけど、 IQuickActivate::QuickActivate が先に来る。

ウインドウレスコントロール なら WM_CREATE 系は無し。

IOleInPlaceActiveObject は使われないようだ。


終了
(WM_DESTORY)
IOleInPlaceObject::InPlaceDeactivate
IOleInPlaceObject::UIDeactivate
IOleObject::Close
IOleObject::SetClientSite(NULL)
IUnknown::Release

ウインドウレスコントロール なら WM_DESTROY 系は無し。


OLEMISC (Misc Status)

自分が mshta で試した事を記述しています。
  (まだ、まとめてない・・)

OLEMISC_IGNOREACTIVATEWHENVISIBLE

マウスカーソルがコントロール上に来くるまで、
インスタンス化が延滞される模様。
(ページがスクロールして、コントロールが表示されるまで、も同様だと思う)

OLEMISC_ALWAYSRUN

これの効果は見られなかった・・。


HTAページトップ

HOME

兄弟ページ 姉妹ページ
Click here to visit our sponsor