Using Visual C++ version 4.0, it is possible to construct OLE Control
Containers. These containers must call AfxEnableControlContainer() in their
CWinApp::InitInstance(). This call is added automatically if OLE Controls
support is checked in AppWizard Step 3, but in some cases, this call must
be added manually. This article explains why you need to call
AfxEnableControlContainer() and the possible problems that might occur if
this call is not made.
AfxEnableControlContainer() is responsible for wiring up the support
structure necessary for a CWnd object to contain an OLE Control. This call
is added to a project by AppWizard if OLE Controls support is selected. You
need to add this call manually in the following cases:
| • | You are adding control container support to an existing project.
-or-
|
| • | The object that will contain the OLE controls is not created directly by
AppWizard, such as an OLE Control. |
For example, if you are dynamically creating an OLE Control as a child of
another OLE Control, the parent control must call
AfxEnableControlContainer() in its constructor.
The following list outlines some of the most common problems (others are
possible) that can occur if AfxEnableControlContainer() is not called:
| • | In many cases, you might receive the following TRACE messages in the
Output Window of the debugger:
>>> If this dialog has OLE controls:
>>> AfxEnableControlContainer has not been called yet.
>>> You should call it in your app's InitInstance function.
|
| • | In other cases, you might encounter the following ASSERT in file
Cmdtarg.cpp, line 218:
ASSERT(afxOccManager != NULL);
|
| • | If you place a Masked Edit or some other OLE control on a CFormView and
then run the application, you might see a message box indicating:
Failed to create empty document.
|