AfxOleRegisterControlClass

BOOL AFXAPI AfxOleRegisterControlClass(
            HINSTANCE hInstance,
            REFCLSID clsid,
            LPCTSTR pszProgID,
            UINT idTypeName,
            UINT idBitmap,
            int nRegFlags,
            DWORD dwMiscStatus,
            REFGUID tlid,
            WORD wVerMajor,
            WORD wVerMinor
          );

#include <afxctl.h>

返回值:如果注册了控件类,则返回非零值;否则返回0。

参数:
hInstance与控件类相关的模块的实例句柄。
clsid控件的唯一的类ID。
pszProgID控件的唯一的程序ID。
idTypeName字符串的资源ID,该字符串中包含了用户可读的控件的类型名。
idBitmap位图的资源ID,该位图用于在工具条或调色板中表示OLE控件。
nRegFlags包含了下列标志的一个或多个:
·afxRegInsertable允许控件在OLE对象的插入对象对话框中出现。
·afxRegApartmentThreading将注册表中的线程模式设置为ThreadingModel=Apartment.
注意:在MFC4.2以前的MFC版本中,整型的nRegFlags参数是BOOL类型的。由bInsetable来决定是否可以通过插入对象对话框来加入控件。
dwMiscStatus包含了下列状态标志中的一个或多个(对这些标志的详细描述请参见《OLE程序员参考》中列举的OLEMISC)。
·OLEMISC_RECOMPOSEONRESIZE
·OLEMISC_ONLYICONIC
·OLEMISC_INSERTNOTREPLACE
·OLEMISC_STATIC
·OLEMISC_CANTLINKINSIDE
·OLEMISC_CANLINKBYOLE1
·OLEMISC_ISLINKOBJECT
·OLEMISC_INSIDEOUT
·OLEMISC_ACTIVATEWHENVISIBLE
·OLEMISC_RENDERINGISDEVICEINDEPENDENT
·OLEMISC_INVISIBLEATRUNTIME
·OLEMISC_ALWAYSRUN
·OLEMISC_ACTSLIKEBUTTON
·OLEMISC_ACTSLIKELABEL
·OLEMISC_NOUIACTIVATE
·OLEMISC_ALIGNABLE
·OLEMISC_IMEMODE
·OLEMISC_SIMPLEFRAME
·OLEMISC_SETCLIENTSITEFIRST
tlid控件类的唯一的ID。
wVerMajor控件类的主版本号码。
wVerMinor控件类的次版本号码。

说明:
通过Windows的注册数据库来注册控件类。这就使得控件可以被具有OLE控件能力的容器所使用。AfxOleRegisterControlClass用控件的名字及其在系统中的位置来更新系统注册表,同时在注册表中设置控件支持的线程模式。有关的更多信息请参见《Visual C++联机文档》中的“技术注释64”,名为“OLE控件中的Apartment模式”,以及《Win32 SDK》中的“进程与线程”。

示例:
// COleObjectFactory::UpdateRegistry 类成员函数的实现
//
BOOL CMyApartmentAwareCtrl::CApartmentCtrlFactory::UpdateRegistry(BOOL bRegister)
{
  // 目的:检验你的控件是否遵循Apartment模式线程规则。
  // 更多的信息参考MFC 技术注释64。
  // 如果你的控件不遵循Apartment模式规则,那么你必须修改下面的代码
  // 将第六个参数从 afxRegInsertable | afxRegApartmentThreading
  // 变为 afxRegInsertable.
  if(bRegister)
     return AfxOleRegisterControlClass()
        AfxGetInstanceHandle(),
        m_clsid,
        m_lpszProgID,
        IDS_APARTMENT,
        IDB_APARTMENT,
        afxRegInsertable | afxRegApartmentThreading,
        _dwApartmentOleMisc,
        _tlid,
        _wVerMajor,
        _wVerMinor);
  else
     return AfxOleUnregisterClass(m_clsid, m_lpszProgID);
上面的例子演示了如何将代表可插入的标志和代表Apartment模式的标志通过或运算组合成第六个参数来调用AfxOleregisterControlClass函数。
  afxRegInsertable | afxRegApartmentThreading,
对于允许的容器,该控件将出现在插入对象对话框中,同时它将会适用Apartment模式。适用于Apartment模式的控件必须确保静态的类数据通过锁定得到保护,因此当Apartment中的控件访问静态数据时,在它结束之前不会被调度程序禁止,相同类的其它对象也不会开始使用相同的静态数据。对静态数据的任何访问都必须间接地通过临界区代码进行。

请参阅:
AfxOleRegisterPropertyPageClass, AfxOleRegisterTypeLib, AfxOleUnregisterClass, AfxOleUnregisterTypeLib