// ClassicATLDiceControl.h : Declaration of the CClassicATLDiceControl #pragma once #include "resource.h" // main symbols #include #include "time.h" #include "ClassicATLDiceSvr.h" #include "_IClassicATLDiceControlEvents_CP.h" #define MAX_DIEFACES 6 // CClassicATLDiceControl class ATL_NO_VTABLE CClassicATLDiceControl : public CComObjectRootEx, public CStockPropImpl, public IPersistStreamInitImpl, public IOleControlImpl, public IOleObjectImpl, public IOleInPlaceActiveObjectImpl, public IViewObjectExImpl, public IOleInPlaceObjectWindowlessImpl, public ISupportErrorInfo, public IConnectionPointContainerImpl, public CProxy_IClassicATLDiceControlEvents, public IPersistStorageImpl, public ISpecifyPropertyPagesImpl, public IQuickActivateImpl, public IDataObjectImpl, public IProvideClassInfo2Impl<&CLSID_ClassicATLDiceControl, &__uuidof(_IClassicATLDiceControlEvents), &LIBID_ClassicATLDiceSvrLib>, public IPropertyNotifySinkCP, public CComCoClass, public CComControl { public: HBITMAP m_dieBitmaps[MAX_DIEFACES]; unsigned short m_nFirstDieValue; unsigned short m_nSecondDieValue; short m_nDiceColor; short m_nTimesToRoll; short m_nTimesRolled; CClassicATLDiceControl() { m_bWindowOnly = TRUE; LoadBitmaps(); srand((unsigned)time(NULL)); m_nFirstDieValue = (rand() % (MAX_DIEFACES)) + 1; m_nSecondDieValue = (rand() % (MAX_DIEFACES)) + 1; m_nTimesToRoll = 15; m_nTimesRolled = 0; m_nDiceColor = 0; } DECLARE_OLEMISC_STATUS(OLEMISC_RECOMPOSEONRESIZE | OLEMISC_CANTLINKINSIDE | OLEMISC_INSIDEOUT | OLEMISC_ACTIVATEWHENVISIBLE | OLEMISC_SETCLIENTSITEFIRST ) DECLARE_REGISTRY_RESOURCEID(IDR_CLASSICATLDICECONTROL) BEGIN_COM_MAP(CClassicATLDiceControl) COM_INTERFACE_ENTRY(IClassicATLDiceControl) 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(ISupportErrorInfo) COM_INTERFACE_ENTRY(IConnectionPointContainer) COM_INTERFACE_ENTRY(ISpecifyPropertyPages) COM_INTERFACE_ENTRY(IQuickActivate) COM_INTERFACE_ENTRY(IPersistStorage) COM_INTERFACE_ENTRY(IDataObject) COM_INTERFACE_ENTRY(IProvideClassInfo) COM_INTERFACE_ENTRY(IProvideClassInfo2) END_COM_MAP() BEGIN_PROP_MAP(CClassicATLDiceControl) PROP_DATA_ENTRY("_cx", m_sizeExtent.cx, VT_UI4) PROP_DATA_ENTRY("_cy", m_sizeExtent.cy, VT_UI4) PROP_ENTRY("BackColor", DISPID_BACKCOLOR, CLSID_StockColorPage) PROP_ENTRY("DiceColor", 2, CLSID_CDiceMainPropPage) PROP_ENTRY("TimesToRoll", 3, CLSID_CDiceMainPropPage) END_PROP_MAP() BEGIN_CONNECTION_POINT_MAP(CClassicATLDiceControl) CONNECTION_POINT_ENTRY(__uuidof(_IClassicATLDiceControlEvents)) END_CONNECTION_POINT_MAP() BEGIN_MSG_MAP(CClassicATLDiceControl) MESSAGE_HANDLER(WM_TIMER, OnTimer) MESSAGE_HANDLER(WM_LBUTTONDBLCLK, OnLButtonDblClk) CHAIN_MSG_MAP(CComControl) DEFAULT_REFLECTION_HANDLER() END_MSG_MAP() // Handler prototypes: // LRESULT MessageHandler(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); // LRESULT CommandHandler(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); // LRESULT NotifyHandler(int idCtrl, LPNMHDR pnmh, BOOL& bHandled); // ISupportsErrorInfo STDMETHOD(InterfaceSupportsErrorInfo)(REFIID riid) { static const IID* arr[] = { &IID_IClassicATLDiceControl, }; for (int i=0; i