开发了一个ATL复合控件(ATL Composite Control)之后,建立一个对话框程序,上面有一个RichEditCtrl,然后将生成的ActiveX插进去,结果发现显示的仅仅是个灰框上面写着ATL Composite Control,在CSDN上查了好久也没有查到解决方法,请达人们帮帮忙,不胜感激!

解决方案 »

  1.   

    AfxInitRichEdit( )
    你需要在你的应用程序中加入AfxInitRichEdit( );
      

  2.   

    已经加入了,不是不显示RichEditCtrl,而是不显示我的控件
      

  3.   

    是不是这个选项Invisible at run time 勾了
      

  4.   

    我是用VC6.0 ATL COM Wizard生成的控件,就没有让我选择Invisible at run time 这些选项啊
      

  5.   

    这是自动生成的RGS代码,不知道有没有问题,131473好像是可见的
    HKCR
    {
    Test_AtlCC.AtlButton.1 = s 'AtlButton Class'
    {
    CLSID = s '{732057D9-462F-4364-BB17-996168386B02}'
    }
    Test_AtlCC.AtlButton = s 'AtlButton Class'
    {
    CLSID = s '{732057D9-462F-4364-BB17-996168386B02}'
    CurVer = s 'Test_AtlCC.AtlButton.1'
    }
    NoRemove CLSID
    {
    ForceRemove {732057D9-462F-4364-BB17-996168386B02} = s 'AtlButton Class'
    {
    ProgID = s 'Test_AtlCC.AtlButton.1'
    VersionIndependentProgID = s 'Test_AtlCC.AtlButton'
    ForceRemove 'Programmable'
    InprocServer32 = s '%MODULE%'
    {
    val ThreadingModel = s 'Apartment'
    }
    ForceRemove 'Control'
    ForceRemove 'Insertable'
    ForceRemove 'ToolboxBitmap32' = s '%MODULE%, 101'
    'MiscStatus' = s '0'
    {
        '1' = s '131473'
    }
    'TypeLib' = s '{FBD733CE-B17A-4961-AD1F-BFA6058F73DE}'
    'Version' = s '1.0'
    }
    }
    }
      

  6.   

    莫非是我插入的代码由问题么,大侠们看看:void CTest_AllComponentDlg::OnAtlInsert() 
    {
    IStorage*  lpStorage  = NULL;//存储接口
    IOleObject*  lpOleObject  = NULL;//OLE对象
    LPLOCKBYTES  lpLockBytes  = NULL;//LOCKBYTE
    IOleClientSite* lpOleClientSite = NULL; 
    IAtlButton*       lpAtlButton = NULL;    //控件
    IRichEditOle* lpRichEditOle = NULL;
    CLSID   clsid;
    REOBJECT  reobject;
    HRESULT   hr; 

    lpRichEditOle = m_re.GetIRichEditOle(); if(lpRichEditOle == NULL)
    return;
    //创建PolyCtl对象并获取接口
    hr = ::CoCreateInstance(CLSID_AtlButton,NULL,CLSCTX_INPROC,IID_IAtlButton,(LPVOID*)&lpAtlButton);
    if( lpAtlButton == NULL )
    {
    return;
    }

    // USES_CONVERSION;
    BOOL bRet = TRUE;

    try{
    hr = lpAtlButton->QueryInterface(&lpOleObject);//获得数据对象接口
    if( hr != S_OK ) 
    AfxThrowOleException(hr);
    hr = lpOleObject->GetUserClassID(&clsid);
    if ( hr != S_OK)
    AfxThrowOleException(hr);

    hr = ::CreateILockBytesOnHGlobal(NULL, TRUE, &lpLockBytes);//创建LOCKBYTE对象
    if (hr != S_OK)
    AfxThrowOleException(hr);
    ASSERT(lpLockBytes != NULL);

    hr = ::StgCreateDocfileOnILockBytes(lpLockBytes,//创建复合文档
    STGM_SHARE_EXCLUSIVE|STGM_CREATE|STGM_READWRITE, 0, &lpStorage);
    if (hr != S_OK)
    {
    VERIFY(lpLockBytes->Release() == 0);
    lpLockBytes = NULL;
    AfxThrowOleException(hr);
    }

    lpRichEditOle->GetClientSite(&lpOleClientSite);

    ZeroMemory(&reobject, sizeof(REOBJECT));//初始化一个对象  
    reobject.cbStruct = sizeof(REOBJECT);
    reobject.clsid  = clsid;
    reobject.cp   = REO_CP_SELECTION;
    reobject.dvaspect = DVASPECT_CONTENT;
    reobject.dwFlags = REO_BELOWBASELINE;
    reobject.poleobj = lpOleObject;
    reobject.polesite = lpOleClientSite;
    reobject.pstg  = lpStorage;

    hr = lpRichEditOle->InsertObject( &reobject );
    if (hr != S_OK)
    AfxThrowOleException(hr);
    OleSetContainedObject(lpOleObject,TRUE);
    }

    catch( COleException* e )
    {
    TRACE(_T("OleException code:%d"),e->m_sc);
    e->Delete();
    bRet = FALSE;
    }

    // release the interface
    if( lpAtlButton     != NULL )  lpAtlButton->Release();
    if( lpOleObject  != NULL )  lpOleObject->Release();
    if( lpOleClientSite != NULL ) lpOleClientSite->Release();
    if( lpStorage  != NULL ) lpStorage->Release();

    return;
    }