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。
| 固定リンク
「プログラミング」カテゴリの記事
- ListView の Height は WRAP_CONTENT を避けるべき(2015.12.23)
- プログラミングコンテストチャレンジブック(2010.09.27)
- 久しぶりに(2009.03.18)
- AVR-USB, hid-data(2008.11.24)
- AVR-USB、Tiny45 の internal RC oscillator で動作!(2008.11.08)
この記事へのコメントは終了しました。
コメント
dumping relabels exist,illustrators spinster Canadian interdict Smythe
投稿: | 2007.10.17 01:11