开发ATL复合控件(ATL Composite Control)的问题? 开发了一个ATL复合控件(ATL Composite Control)之后,建立一个对话框程序,上面有一个RichEditCtrl,然后将生成的ActiveX插进去,结果发现显示的仅仅是个灰框上面写着ATL Composite Control,在CSDN上查了好久也没有查到解决方法,请达人们帮帮忙,不胜感激! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 AfxInitRichEdit( )你需要在你的应用程序中加入AfxInitRichEdit( ); 已经加入了,不是不显示RichEditCtrl,而是不显示我的控件 是不是这个选项Invisible at run time 勾了 我是用VC6.0 ATL COM Wizard生成的控件,就没有让我选择Invisible at run time 这些选项啊 这是自动生成的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' } }} 莫非是我插入的代码由问题么,大侠们看看: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;} 请问,代理服务器的搜索算法如何设计? 请求一个算法,谢谢!! MSHTML的图片对象如何保存 vc2005 mfc 中使用activex封装类没有方法的问题? waveInOpen(调用失败。very simple ! 简单的SDK程序在VC中编译出错,什么原因呢? 支持矢量机读取文件数据 总是提示出错 大家看看是哪里的问题? InstallShield如何制作Sql安装 寻一MFC链表类 谁能详细的说说MSG结构里面的几个参数的意义啊 VS和VC达人来帮帮忙啊~~~~ 怎样实现COM+组件的跨网络方法调用?
你需要在你的应用程序中加入AfxInitRichEdit( );
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'
}
}
}
{
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;
}