« reject された;; | トップページ | Windows Live Writer (Beta) »

2006.08.11

PeepWin Ver.1.01

http://homepage1.nifty.com/salt/fsw.htm

修正してたら、こんな時間になってしまった。^^;
休むつもりはなかったが、明日はほぼ確実に体調不良でお休みさ。^^;; (体調不良=サボリね。)

About Dialog を付けるのにこんなに苦労したのは初めてだよ。
この前書いたとおり、Helper Framework を使えば、About Dialog を付けれることはわかっていたのだが、使わない場合が難しかった。
Developer Forum で探してもこれしか見つけることができず、時間がかかったよ。

結局は、IGoogleDesktopDisplayPlugin と IGoogleDesktopDisplayPluginHandler を継承して、OnCommand() を実装すればよかった。

(以下、赤いところが今回の About Dialog、青いところは前回の Option Dialog)

----------

class ATL_NO_VTABLE CMyCirclesObj :

    public CComObjectRootEx<CComSingleThreadModel>,

    public IDispatchImpl<IMyCirclesObj, &IID_IMyCirclesObj, &LIBID_MyCirclesLib, /*wMajor =*/1, /*wMinor =*/0>,

    public IPersistStreamInitImpl<CMyCirclesObj>,

    public IOleControlImpl<CMyCirclesObj>,

    public IOleObjectImpl<CMyCirclesObj>,

    public IOleInPlaceActiveObjectImpl<CMyCirclesObj>,

    public IViewObjectExImpl<CMyCirclesObj>,

    public IOleInPlaceObjectWindowlessImpl<CMyCirclesObj>,

    public CComCoClass<CMyCirclesObj, &CLSID_MyCirclesObj>,

    public CComControl<CMyCirclesObj>,

    public ISpecifyPropertyPagesImpl<CMyCirclesObj>   // Salt added

    public IGoogleDesktopDisplayPlugin,   // Salt added

    public IGoogleDesktopDisplayPluginHandler   // Salt added

----------


----------

BEGIN_COM_MAP(CMyCirclesObj)

    COM_INTERFACE_ENTRY(IMyCirclesObj)

    COM_INTERFACE_ENTRY(IDispatch)

    COM_INTERFACE_ENTRY(IViewObjectEx)

    COM_INTERFACE_ENTRY(IViewObject2)

    COM_INTERFACE_ENTRY(IViewObject)

    COM_INTERFACE_ENTRY(IOleInPlaceObjectWindowless)

    COM_INTERFACE_ENTRY(IOleInPlaceObject)

    COM_INTERFACE_ENTRY2(IOleWindow, IOleInPlaceObjectWindowless)

    COM_INTERFACE_ENTRY(IOleInPlaceActiveObject)

    COM_INTERFACE_ENTRY(IOleControl)

    COM_INTERFACE_ENTRY(IOleObject)

    COM_INTERFACE_ENTRY(IPersistStreamInit)

    COM_INTERFACE_ENTRY2(IPersist, IPersistStreamInit)

    COM_INTERFACE_ENTRY(ISpecifyPropertyPages)   // Salt added

    COM_INTERFACE_ENTRY(IGoogleDesktopDisplayPlugin)   // Salt added

    COM_INTERFACE_ENTRY(IGoogleDesktopDisplayPluginHandler)   // Salt added

END_COM_MAP()

----------


として、

IGoogleDesktopDisplayPluginHandler の純粋仮想関数(virtual hoge() = 0; になってるやつ)をオーバライドして、

----------


   STDMETHOD(OnCommand)(GoogleDesktopDisplayPluginCommand command);

   STDMETHOD(OnDisplayStateChange)(GoogleDesktopDisplayTileDisplayState display_state);

   STDMETHOD(GetInfo)(GoogleDesktopDisplayTileInfo *tile_info);


----------

その実装で、

----------


STDMETHODIMP CMyCirclesObj::OnCommand(GoogleDesktopDisplayPluginCommand command) {

   if (command == GDD_CMD_ABOUT_DLG) {

      CAboutDialog dlg;

      int nResult = (int) dlg.DoModal();

   }

   return S_OK;

}


----------

みたいな感じにすれば、うまくいきました。(GDD_CMD_ABOUT_DLG が来る)

(OnDisplayStateChange() と GetInfo() は return E_NOTIMPL; しとけば、デフォルトの動作をしてくれる。はず。)

CAboutDialog は、新規作成で ATL クラスを作ればOK。

src="http://homepage1.nifty.com/salt/images/BlogRanking/banner_04.gif"
border="0">(←あと4日だけど、Google Gadget を作ってみようと思ったら、ぜひ。)


|

« reject された;; | トップページ | Windows Live Writer (Beta) »

プログラミング」カテゴリの記事

コメント

dumping relabels exist,illustrators spinster Canadian interdict Smythe

投稿: | 2007.10.17 01:11

コメントを書く



(ウェブ上には掲載しません)




トラックバック


この記事へのトラックバック一覧です: PeepWin Ver.1.01:

« reject された;; | トップページ | Windows Live Writer (Beta) »