怎样插入一个控件到CRichEditCtrl中去
WEE 2006-03-29 11:38:38 我用VS2003 ATL Control 向导创建了一个控件,我用ActiveX测试容器,测试的时候很好,但是我如何才能把这个控件插入到RichEdit里呢 我是在对话框中的一个RichEdit。有人知道可以给个代码例子
下面的例子是我从网上找的,但是插入后有个问题就是插入后部创建窗口,因为我里面有一个消息处理的一些函数会处理WM_CREATE 和 WM_PAINT 等消息,用那个测试容器测试是正常的,但是我插到对话框的RichEdit中的时候就是不行,没有任何消息,是不是我的插入代码的问题,或者我少做了什么
有谁知道,这里我先谢谢了
LPSTORAGE lpStorage=NULL;
LPLOCKBYTES lpLockBytes = NULL;
::CreateILockBytesOnHGlobal(NULL, TRUE, &lpLockBytes);
::StgCreateDocfileOnILockBytes(lpLockBytes,
STGM_SHARE_EXCLUSIVE | STGM_CREATE | STGM_READWRITE, 0, &lpStorage);
CComPtr<IRichEditOle> pRichEditOle = m_Ctrl_RichEdit.GetIRichEditOle();
IFCOMUIPtr pCOMUI;
HRESULT hr;
hr = pCOMUI.CreateInstance(__uuidof(FCOMUI));
REOBJECT reo;
reo.cbStruct = sizeof(reo);
reo.clsid = __uuidof(FCOMUI);
reo.cp = REO_CP_SELECTION;
reo.dvaspect = DVASPECT_CONTENT;
reo.dwFlags = REO_BELOWBASELINE;
reo.dwUser = 0;
hr = pCOMUI.QueryInterface(IID_IOleObject, &reo.poleobj);
hr = pRichEditOle->GetClientSite(&reo.polesite);
hr = reo.poleobj->SetClientSite(reo.polesite);
reo.pstg = lpStorage;
reo.sizel.cx = reo.sizel.cy = 0;
hr = pRichEditOle->InsertObject(&reo);
hr = ::OleSetContainedObject(reo.poleobj, TRUE);
reo.poleobj->Release();
reo.polesite->Release();
lpStorage->Release();