Google Gadget の Option dialog
を付ける方法。
http://groups.google.com/group/Google-Desktop-Developer/browse_thread/thread/6861711c252823dfここでは、誰も答えてくれてないので、答えてみよう。(日本語だけど。^^;)
MyCircles のサンプルだと、Options も About もグレーアウトされてて、選択できないの。
で、ちょっと試してみたところ Option dialog は簡単にできたので、その方法をメモメモ。
まずは、ActiveX のプロパティページを作る。
クラスビューの右クリックメニュー→追加→クラスの追加→ATL プロパティページ→短い名前に MyCirclesPropPage とか適当に入れて→完了。
これで、ActiveX のデフォルトのプロパティページが作られる。
あとは、ISpecifyPropertyPagesImp を継承して、COM_MAP と PROP_MAP のマクロで登録すれば、メニューの Options のグレーアウトが解除されて使えるようになった。
----------
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
----------
----------
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
END_COM_MAP()
----------
----------
BEGIN_PROP_MAP(CMyCirclesObj)
PROP_DATA_ENTRY("_cx", m_sizeExtent.cx, VT_UI4)
PROP_DATA_ENTRY("_cy", m_sizeExtent.cy, VT_UI4)
// エントリの例
// PROP_ENTRY("Property Description", dispid, clsid)
// PROP_PAGE(CLSID_StockColorPage)
PROP_PAGE(CLSID_MyCirclesPropPage) // Salt added
END_PROP_MAP()
----------
あと、PropertyPage から MyCirclesObj にアクセスするには、
IMyCirclesObj の右クリックメニュー→追加→プロパティの追加→プロパティの種類に int とか入れて、プロパティ名に refresh_interval とか入れれば、
----------
STDMETHOD(get_refresh_interval)(int* pVal);
STDMETHOD(put_refresh_interval)(int newVal);
----------
みたいなのが作られるので、
あとはサンプル通りに、
----------
CComQIPtr<IMyCirclesObj> plugin(m_ppUnk[0]);
if (plugin) {
ATLVERIFY(SUCCEEDED(plugin->get_refresh_interval(&refresh_interval)));
}
----------
とかすれば、プロパティページから、Obj 側の I/F にアクセスできた。
でも、About dialog の付け方がわからない。。。
| 固定リンク
| コメント (23)
| トラックバック (1)
最近のコメント