15,979
社区成员
发帖
与我相关
我的任务
分享
hr = CreateILockBytesOnHGlobal(NULL, TRUE, &spLockBytes);
if (hr != S_OK) {
break;
}
ASSERT(spLockBytes != NULL);
// 创建Storage
hr = StgCreateDocfileOnILockBytes(spLockBytes,
STGM_SHARE_EXCLUSIVE | STGM_CREATE | STGM_READWRITE, 0, &spStorage);
if (hr != S_OK) {
break;
}
// 获取ClientSite
hr = m_pRichEditOle->GetClientSite(&spOleClientSite);
if (hr != S_OK) {
break;
}
// 创建COleImage实例
hr = CoCreateInstance(CLSID_OleImage, NULL, CLSCTX_INPROC, IID_IOleImage, (LPVOID*) &spOleImage);
if (hr != S_OK) {
break;
}
hr = spOleImage->loadFromFile(this, atype, _bstr_t(path), resId, 400);
spOleImage->SetMsgIdAndPicPos(msgId, picpos);
if (hr != S_OK) {
TRACE(_T("FUCKFUCKFUCK.\n"));
break;
}
// 获取IOleObject接口
hr = spOleImage->QueryInterface(IID_IOleObject, (LPVOID *) &spOleObject);
if (hr != S_OK) {
break;
}
// 获取IOleObject的用户CLSID
hr = spOleObject->GetUserClassID(&clsid);
if (hr != S_OK) {
break;
}
// 填充OLE对象属性
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 = spOleObject;
reobject.polesite = spOleClientSite;
reobject.pstg = spStorage;
SIZEL sizel = {0};
reobject.sizel = sizel;
// 插入OLE对象
hr = m_pRichEditOle->InsertObject(&reobject);
if (hr != S_OK) {
break;
}
// 通知OLE容器保证OLE对象被正确引用
hr = OleSetContainedObject(spOleObject, TRUE);