Whether the run-time object is visual or not, it must have a window and it must implement a default event interface.
Visual Run-Time Object
You have a couple of choices in implementing a visual run-time object:
Because CComDesignerToolbox provides design-time features only, a run-time instance should not inherit from it.
Nonvisual Run-Time Object
To implement a run-time object that does not have a visual user interface, use CComDesignerInvisAtRun, which provides dynamic registration features and provides an IOleObject interface for object siting.
A nonvisual run-time object also requires the interfaces listed below. You can use the ATL Object Wizard to generate an ATL Simple object with these interfaces. A nonvisual run-time object need not derive from CComControl.
| Interface | Implementation | 
| IPersistStreamInit | IPersistStreamInitImpl | 
| IDispatch | IDispatchImpl | 
| IConnectionPointContainer | IConnectionPointContainerImpl | 
The following example shows an object that is derived from CComDesignerInvisAtRun:
class ATL_NO_VTABLE CShapesInstCtl : 
   public CComObjectRootEx<CComSingleThreadModel>,
   public CComCoClass<CShapesInstCtl, &CLSID_ShapesInstCtl>,
   public IProvideClassInfo2Impl<&CLSID_ShapesInstCtl,
       &DIID_DShapesEvents, &LIBID_SHAPESINSTLib>,
   public IDispatchImpl<IShapesInstCtl,
      &IID_IShapesInstCtl, &LIBID_SHAPESINSTLib>,
   public CProxyDShapesEvents<CShapesInstCtl>,
   public IConnectionPointContainerImpl<CShapesInstCtl>
   public CComDesignerInvisAtRun<CShapesInstCtl,RegEntryArray>,
{
   . . .
}