AfxEnableControlContainer()函数是允许应用程序作为控件容器来使用,对于用MFC向导自动生成的单文档框架程序的C...APP::InitInstance()函数中自动加了这一句 AfxEnableControlContainer();

AfxEnableControlContainer() 负责布线所需的 CWnd 对象,以包含 OLE 控件支持结构。如果选择 OLE 控件支持时,此调用应用程序向导通过添加到项目中。您需要手动添加此调用,在以下情况中:


  • 要控制容器支持添加到现有项目。-或者-

  • 将包含 OLE 控件的对象不是直接由应用程序向导,如 OLE 控件创建的。
例如,如果动态地创建 OLE 控件作为另一个 OLE 控件的子级,父控件必须在其构造函数中调用 AfxEnableControlContainer()。

下面的列表列出了一些最常见的问题 (其他人是可能的),如果未调用 AfxEnableControlContainer() 可能会出现:

  • 在许多情况下,您可能会收到下面的调试器输出窗口中跟踪消息:
       >>> If this dialog has OLE controls:
       >>> AfxEnableControlContainer has not been called yet.
       >>> You should call it in your app's InitInstance function.
    						
  • 在其他情况下,您可能会遇到以下文件 Cmdtarg.cpp,行 218 中的断言:
       ASSERT(afxOccManager != NULL);
    						
  • 如果您 Masked Edit 上放置或某些其他 OLE 控件 CFormView,然后运行该应用程序,您可能会看到一个消息框,表明:
    创建空文档失败。
  • 在用AppWizard创建新的应用程序时,你的应用程序就被缺省设置为控件包容器,即在第3步选中支持ActiveX   Controls的复选框。如果你在创建过程中没有选择这项技术支持,以后也可以手动地加入这项支持。如果你手动添加这个函数,和APPWIZEARD添加效果是一样的   
Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐