What Is the ATL Control-Hosting API?
The new home for Visual Studio documentation is Visual Studio 2017 Documentation on docs.microsoft.com.
The latest version of this topic can be found at What Is the ATL Control-Hosting API?.
ATL's control-hosting API is the set of functions that allows any window to act as an ActiveX control container. These functions can be statically or dynamically linked into your project since they are available as source code and exposed by ATL90.dll. The control-hosting functions are listed in the table below.
|AtlAxAttachControl||Creates a host object, connects it to the supplied window, then attaches an existing control.|
|AtlAxCreateControl||Creates a host object, connects it to the supplied window, then loads a control.|
|AtlAxCreateControlLic||Creates a licensed ActiveX control, initializes it, and hosts it in the specified window, similar to AtlAxCreateControl.|
|AtlAxCreateControlEx||Creates a host object, connects it to the supplied window, then loads a control (also allows event sinks to be set up).|
|AtlAxCreateControlLicEx||Creates a licensed ActiveX control, initializes it, and hosts it in the specified window, similar to AtlAxCreateControlLic.|
|AtlAxCreateDialog||Creates a modeless dialog box from a dialog resource and returns the window handle.|
|AtlAxDialogBox||Creates a modal dialog box from a dialog resource.|
|AtlAxGetControl||Returns the IUnknown interface pointer of the control hosted in a window.|
|AtlAxGetHost||Returns the IUnknown interface pointer of the host object connected to a window.|
|AtlAxWinInit||Initializes the control-hosting code.|
|AtlAxWinTerm||Uninitializes the control-hosting code.|
HWND parameters in the first three functions must be an existing window of (almost) any type. If you call any of these three functions explicitly (typically, you won't have to), do not pass a handle to a window that's already acting as a host (if you do, the existing host object won't be freed).
The first seven functions call AtlAxWinInit implicitly.
The control-hosting API forms the foundation of ATL's support for ActiveX control containment. However, there is usually little need to call these functions directly if you take advantage of or make full use of ATL's wrapper classes. For more information, see [Which ATL Classes Facilitate ActiveX Control Containment] $$brokenlink$$(../Topic/Which%20ATL%20Classes%20Facilitate%20ActiveX%20Control%20Containment.md).