怎样插入一个控件到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();
...全文
198 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
WEE 2006-03-29
  • 打赏
  • 举报
回复
那就是说在控件没有激活的时候是不可能有消息的?我是想做一个按钮在里面,当然这个按钮应该随时响应,控件现在可以插进去了但是,那个按钮(就是我的控件)只有在双击后才可以看到按钮,而且当你点了RichEidt里的其他的文字后,就是焦点移开后,这个控件好像又被销毁了,这是为什么?
蒋晟 2006-03-29
  • 打赏
  • 举报
回复
我的函数里面没有Inplace Activate控件。每个容器可以有一个控件处于激活状态,只有当控件处于激活状态时,容器才会给它发送消息。关于Inplace Activate控件的示例,可以参照http://msdn.microsoft.com/library/en-us/vcsample98/html/vcsmptstconactivexcontroltestcontainer.asp

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧