荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: oopilix (PADRAD), 信区: Visual
标  题: [FR]ActiveX控件免提示框
发信站: 荔园晨风BBS站 (Tue May 13 20:29:19 2003), 站内信件


添加以下代码
    ////////////////////////////////////////////////////////////////
    // Copied from the ActiveX SDK
    // This code is used to register and unregister a
    // control as safe for initialization and safe for scripting

    HRESULT CreateComponentCategory(CATID catid, WCHAR*
catDescription)
    {

    ICatRegister* pcr = NULL ;
    HRESULT hr = S_OK ;

    hr = CoCreateInstance(CLSID_StdComponentCategoriesMgr,
    NULL, CLSCTX_INPROC_SERVER, IID_ICatRegister, (void**)&pcr);
    if (FAILED(hr))
    return hr;

    // Make sure the HKCR\Component Categories\{..catid...}
    // key is registered
    CATEGORYINFO catinfo;
    catinfo.catid = catid;
    catinfo.lcid = 0x0409 ; // english

    // Make sure the provided description is not too long.
    // Only copy the first 127 characters if it is
    int len = wcslen(catDescription);
    if (len>127)
    len = 127;
    wcsncpy(catinfo.szDescription, catDescription, len);
    // Make sure the description is null terminated
    catinfo.szDescription[len] = '\0';

    hr = pcr->RegisterCategories(1, &catinfo);
    pcr->Release();

    return hr;
    }


    HRESULT RegisterCLSIDInCategory(REFCLSID clsid, CATID catid)
    {
    // Register your component categories information.
    ICatRegister* pcr = NULL ;
    HRESULT hr = S_OK ;
    hr = CoCreateInstance(CLSID_StdComponentCategoriesMgr,
    NULL, CLSCTX_INPROC_SERVER, IID_ICatRegister, (void**)&pcr);
    if (SUCCEEDED(hr))
    {
    // Register this category as being "implemented" by
    // the class.
    CATID rgcatid[1] ;
    rgcatid[0] = catid;
    hr = pcr->RegisterClassImplCategories(clsid, 1, rgcatid);
    }

    if (pcr != NULL)
    pcr->Release();

    return hr;
    }

    HRESULT UnRegisterCLSIDInCategory(REFCLSID clsid, CATID catid)
    {
    ICatRegister* pcr = NULL ;
    HRESULT hr = S_OK ;
    hr = CoCreateInstance(CLSID_StdComponentCategoriesMgr,
    NULL, CLSCTX_INPROC_SERVER, IID_ICatRegister, (void**)&pcr);
    if (SUCCEEDED(hr))
    {
    // Unregister this category as being "implemented" by
    // the class.
    CATID rgcatid[1] ;
    rgcatid[0] = catid;
    hr = pcr->UnRegisterClassImplCategories(clsid, 1, rgcatid);
    }

    if (pcr != NULL)
    pcr->Release();

    return hr;
    }


    /*****************************************
    在 xxxctl.cpp 文件中添加如下两个头文件
    *****************************************/
    #include "comcat.h"
    #include "objsafe.h"

    /*****************************************
    修改如下函数
    *****************************************/
    BOOL CxxxCtrl::CxxxCtrlFactory::UpdateRegistry(BOOL bRegister)
    {
    // TODO: Verify that your control follows apartment-model
threading rules.
    // Refer to MFC TechNote 64 for more information.
    // If your control does not conform to the apartment-model rules,
then
    // you must modify the code below, changing the 6th parameter from

    // afxRegInsertable | afxRegApartmentThreading to afxRegInsertable.


    if (bRegister)
    {
    HRESULT hr = S_OK ;

    // register as safe for scripting
    hr = CreateComponentCategory(CATID_SafeForScripting,
    L"Controls that are safely scriptable");

    if (FAILED(hr))
    return FALSE;

    hr = RegisterCLSIDInCategory(m_clsid, CATID_SafeForScripting);

    if (FAILED(hr))
    return FALSE;

    // register as safe for initializing
    hr = CreateComponentCategory(CATID_SafeForInitializing,
    L"Controls safely initializable from persistent data");

    if (FAILED(hr))
    return FALSE;

    hr = RegisterCLSIDInCategory(m_clsid, CATID_SafeForInitializing);

    if (FAILED(hr))
    return FALSE;

    return AfxOleRegisterControlClass(
    AfxGetInstanceHandle(),
    m_clsid,
    m_lpszProgID,
    IDS_DIEROLL,
    IDB_DIEROLL,
    afxRegInsertable | afxRegApartmentThreading,
    _dwDierollOleMisc,
    _tlid,
    _wVerMajor,
    _wVerMinor);
    }
    else
    {
    HRESULT hr = S_OK ;

    hr = UnRegisterCLSIDInCategory(m_clsid, CATID_SafeForScripting);

    if (FAILED(hr))
    return FALSE;

    hr = UnRegisterCLSIDInCategory(m_clsid, CATID_SafeForInitializing);


    if (FAILED(hr))
    return FALSE;

    return AfxOleUnregisterClass(m_clsid, m_lpszProgID);
    }
    }

--
※ 来源:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM: 61.144.235.41]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店