点击“重试”调制断点处,图纸红色出断言失败 m_dwRef的值为2;另外我发现的release模式下没有问题
解决方案 »
- CTime兼容问题 vs2008 与 VC6
- OnSize()与OnPaint()的问题!
- 有C++/VC/MFC的程序员吗?学习完C++和MFC,都可以在那些领域工作?
- 关于std::list与std::auto_ptr的问题.
- 请教两个完成端口的问题,自己实在不能解决,高分求高手相助,问题解决立即散分
- 急!!1如何 在改变系统DPI 后 保持对话框的大小 字体不变
- ★★★★★急!急!高分请教一个很简单的问题,请各位指点★★★★★
- 请教一个PLAYSOUND地问题
- 学完c++之后学什么?c++ builder:v c++;
- 急急急。。。。。。。。。如何用ado生成一个dbf文件
- MFC怎么绘制类似word中的表格
- 江湖告急 如何用C#包装 C++ ocx? 没一点思路 在线等
void CTapEditorView::OnInsertImage()
{
// TODO: Add your command handler code here
CString sFilter = "All image file|*.bmp;*.jpg;*.gif|Bitmap Files (*.bmp)|*.bmp|JPEG Files (*.jpg)|*.jpg|GIF Files (*.gif)|*.gif|";
CFileDialog dlg(TRUE, NULL, NULL, OFN_FILEMUSTEXIST|OFN_READONLY, sFilter);
if(dlg.DoModal() == IDOK)
{
CTapBitmap bmp;
if(bmp.Load(dlg.GetPathName())==FALSE)
{
AfxMessageBox(_T("Could not load image."));
return;
}
CEnBitmap enBitmap;
CBitmap Bitmap;
if (enBitmap.Attach(bmp.GetBMP(), 0))
{
Bitmap.DeleteObject();
Bitmap.Attach(enBitmap.Detach());
IRichEditOle *pRichEditOle;
pRichEditOle = GetRichEditCtrl().GetIRichEditOle();
HBITMAP hBitmap = (HBITMAP)Bitmap;
if(hBitmap)
{
CImageDataObject::InsertBitmap(pRichEditOle, hBitmap);
}
}
}
}其中CImageDataObject是继承自IDataObject
void CImageDataObject::InsertBitmap(IRichEditOle* pRichEditOle, HBITMAP hBitmap)
{
SCODE sc; // Get the image data object
//
CImageDataObject *pods = new CImageDataObject;
LPDATAOBJECT lpDataObject;
pods->QueryInterface(IID_IDataObject, (void **)&lpDataObject); pods->SetBitmap(hBitmap); // Get the RichEdit container site
//
IOleClientSite *pOleClientSite;
pRichEditOle->GetClientSite(&pOleClientSite); // Initialize a Storage Object
//
IStorage *pStorage; LPLOCKBYTES lpLockBytes = NULL;
sc = ::CreateILockBytesOnHGlobal(NULL, TRUE, &lpLockBytes);
if (sc != S_OK)
AfxThrowOleException(sc);
ASSERT(lpLockBytes != NULL);
sc = ::StgCreateDocfileOnILockBytes(lpLockBytes,
STGM_SHARE_EXCLUSIVE|STGM_CREATE|STGM_READWRITE, 0, &pStorage);
if (sc != S_OK)
{
VERIFY(lpLockBytes->Release() == 0);
lpLockBytes = NULL;
AfxThrowOleException(sc);
}
ASSERT(pStorage != NULL); // The final ole object which will be inserted in the richedit control
//
IOleObject *pOleObject;
pOleObject = pods->GetOleObject(pOleClientSite, pStorage); // all items are "contained" -- this makes our reference to this object
// weak -- which is needed for links to embedding silent update.
OleSetContainedObject(pOleObject, TRUE); // Now Add the object to the RichEdit
//
REOBJECT reobject;
ZeroMemory(&reobject, sizeof(REOBJECT));
reobject.cbStruct = sizeof(REOBJECT);
CLSID clsid;
sc = pOleObject->GetUserClassID(&clsid);
if (sc != S_OK)
AfxThrowOleException(sc); reobject.clsid = clsid;
reobject.cp = REO_CP_SELECTION;
//reobject.dvaspect = DVASPECT_CONTENT;
reobject.dvaspect = DVASPECT_CONTENT;
reobject.dwFlags = REO_RESIZABLE ; reobject.poleobj = pOleObject;
reobject.polesite = pOleClientSite;
reobject.pstg = pStorage; // Insert the bitmap at the current location in the richedit control
//
pRichEditOle->InsertObject(&reobject); // Release all unnecessary interfaces
//
pOleObject->Release();
pOleClientSite->Release();
pStorage->Release();
lpDataObject->Release();
}
pRichEditOle->Release();
之前我二的用的是delete!呵呵!