« 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。

(←あと4日だけど、Google Gadget を作ってみようと思ったら、ぜひ。)

|

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

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

コメント

dumping relabels exist,illustrators spinster Canadian interdict Smythe

投稿: | 2007.10.17 01:11

コメントを書く



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




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/20208/11379715

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

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