デスクバンドと Internet Explorer バーの実装はじめにInternet Explorerバー(IEバー)はメインのエクスプローラウィンドウ内の子ウィンドウであり、デスクバンドはデスクトップ/タスクバー上のドッキング可能ウィンドウである。これらを使用して、ユーザーに情報を表示したり、ユーザーとインタラクションを行ったりできる。本稿では、これらのバンドオブジェクトの実装について説明する。 設計 IEバーやデスクバンドを作成するには、いくつかのインターフェイスと特殊な登録プロシージャを実装する必要がある。この手間を軽減するために、COMとWindows Shellランタイムで必要とされる細かい処理をすべてカプセル化する 新しいマクロBEGIN_TYPE_MAP(x) バンドATLオブジェクトの型マップの始まりを表す。パラメータ END_TYPE_MAP() バンドATLオブジェクトの型マップの終わりを表す。 TYPE_ENTRY(clsid, type) 型マップにバンドオブジェクトの型を挿入する。パラメータ
これらのマクロの使い方は、ATLの標準の DECLARE_MENU_MAP(x) メニューマップの事前宣言である。パラメータxには、1つまたは複数のバンドオブジェクトに固有のマップの名前を指定する。 BEGIN_MENU_MAP(x) メニューマップの始まりを表す。パラメータ END_MENU_MAP()** メニューマップの終わりを表す。 MENU_ENTRY(id,flags,item,help,verb)** メニューマップにメニュー項目を挿入する。パラメータ MENU_ENTRY_SEPARATOR()** メニューマップに項目区切りを挿入する。 メニューマップを作成するのは、バンドオブジェクトに特殊なコマンドが必要な場合のみにすべきである(代表的な使用例は[設定...]コマンドなど)。なお、1つのメニューマップを複数のバンドオブジェクトに使用することが可能である。 CShellModuleclass CShellModule :public CComModule HRESULT Init( _ATL_TYPEMAP_ENTRY *pdt, _ATL_OBJMAP_ENTRY *p, HINSTANCE h ) すべてのデータメンバを初期化する。パラメータ HRESULT RegisterServer( const CLSID *pCLSID = NULL ) HRESULT UnregisterServer( const CLSID *pCLSID = NULL ) CDeskBandtemplate < const CLSID *pclsid,const _ATL_MENUMAP_ENTRY *pMenu = NULL > class ATL_NO_VTABLE CDeskBand :public CComObjectRootEx<CComSingleThreadModel>,
独自のバンドオブジェクトを作成するときは、この DECLARE_MENU_MAP(DeskBandMenu) extern const CLSID CLSID_SampleDeskBand; class CSampleDeskBand : public CComCoClass<CSampleDeskBand, &CLSID_SampleDeskBand>, public CDeskBand<&CLSID_SampleDeskBand,DeskBandMenu> { public: CSampleDeskBand(); ~CSampleDeskBand(); DECLARE_REGISTRY_RESOURCEID(IDR_DESKBAND) DECLARE_PROTECT_FINAL_CONSTRUCT() protected: virtual LRESULT OnPaint(); private: // your data data members }; 著者紹介Richard Fric(Richard Fric)
|