The visual designer negotiates the interaction between the ActiveX designer, the host, and the end user. Its visual user interface interacts with the end user to create a run-time object.
The following table summarizes the functions of the visual designer. Not all of these capabilities must be provided by every designer.
| Function | What you must do |
| Be an embedded object (required). | Implement IOleObject. |
| Create instances (required). | Implement IClassFactory or IClassFactory2. |
| Provide a visual designer (required). | Implement IOleInPlaceObject and IOleInPlaceActiveObject. |
| Provide type information to the host (required). | Implement IProvideClassInfo or IProvideDynamicClassInfo. |
| Invoke properties and methods (required). | Implement IDispatch. Most designers also support VTBL interfaces. |
| Save and load persistent data (required). | Implement IPersist and IPersistStream, IPersistStreamInit, or IPersistStorage. |
| Handle events (optional). | Implement IConnectionPointContainer and IConnectionPoint. |
| Support a property browsing mechanism (optional). | Implement IPropertyNotifySink, IPerPropertyBrowsing, IPropertyPage, IPropertyPage2, ISpecifyPropertyPages. Use IPropertyPageSite. |
| Save design-time state in a text file, so the project can more easily be saved in a source code control system. | Implement IPersistPropertyBag. |
| Use services (optional). | Use IServiceProvider. |
| Receive notification before and after the host enters run mode (optional). | Implement IDesignerDebugging. |
| Specify a path or URL for the host to invoke at run-time start up (optional). | Implement IDesignerDebugging. |
| Provide custom registration information for created objects (optional). | Implement IDesignerRegistration. |
| Allow the user to navigate to and from code (optional). | Use SCodeNavigate. |
| Display items in the host's toolbox and allow the user to click & drag or drag & drop toolbox items (optional). | Implement IDesignerToolbox and OLE Drag & Drop. Use SDesignerToolboxSite. |
| Create a different run-time object (optional). | Implement IActiveDesigner. |
| Create and validate identifiers in host environment (optional). | Use SDesignerProgrammability. |
| Support programmability by add-in objects (optional). | Implement IActiveDesigner. |
| Support "Save As Text" (optional). | Implement IPersistPropertyBag. |
| Use ambient properties (optional). | Implement IOleControl. Use IOleControlSite. |
| Synchronize current selection with host. | Implement ISelectionContainer. Use STrackSelection. |
| Add type library references to host. | Use SProfferTypeLib. |