Place a bitmap image on the clipboard (uses OLE)
Posted
by Randy More
on August 6th, 1998
#include <afxole.h>
and do the following during initialization
OleInitialize(NULL);
(2) The following places a bitmap copy of a view on the clipboard. It can be easily modified to work with any CWnd that draws to a CDC.
void CMyView::OnEditCopy()
{
COLORREF BACKGROUND_COLOR = RGB(255,255,255);
tagSTGMEDIUM * data;
CBitmap * junk;
COleDataSource* pData = new COleDataSource;
data = new tagSTGMEDIUM;
junk = new CBitmap();
CClientDC cdc(this);
CDC dc;
dc.CreateCompatibleDC(&cdc);
CRect client;
//replace this with something that calculates
//the proper rectangle size
GetClientRect(client);
junk->CreateCompatibleBitmap(&cdc,client.Width(),client.Height());
dc.SelectObject(junk);
CBrush fill(BACKGROUND_COLOR);
dc.FillRect(client,&fill);
//replace this with something that draws to a CDC
OnDraw(&dc);
data->tymed = TYMED_GDI;
data->hBitmap = HBITMAP(*junk);
pData->CacheData( CF_BITMAP, data );
pData->SetClipboard();
delete data;
delete junk;
}

Comments
I'm want source code c++ for bitmap graphic
Posted by Legacy on 12/25/2003 12:00amOriginally posted by: Wichit
ReplyInitialization failed
Posted by Legacy on 06/09/2001 12:00amOriginally posted by: Biju Abraham
when I creating the clip board it diplays an error. colinitialize failed.what is the reson for this thing.
Replyplease reply me
Biju
Bug fix for Access violation
Posted by Legacy on 07/24/2000 12:00amOriginally posted by: Mahantesh
There is one problem with this code, This is visible when the function is called second time, at SetClipBoard() function. When this functions is called second time you can see a "first chance exception -Access violation" warning in the debug window, This also causes crash in the release version. Here is the fix for the problem.
COLORREF BACKGROUND_COLOR = RGB(255,255,255);
tagSTGMEDIUM * data;
FORMATETC fe = {
CF_BITMAP,NULL,DVASPECT_CONTENT,-1,TYMED_GDI
};
CBitmap * junk;
COleDataSource* pData = new COleDataSource;
data = new tagSTGMEDIUM;
junk = new CBitmap();
CClientDC cdc(this);
CDC dc;
dc.CreateCompatibleDC(&cdc);
CRect client;
//replace this with something that calculates
//the proper rectangle size
GetClientRect(client);
junk->DeleteObject();
junk->CreateCompatibleBitmap(&cdc,client.Width(),client.Height());
CBitmap* pOld = dc.SelectObject(junk);
CBrush fill(BACKGROUND_COLOR);
dc.FillRect(client,&fill);
//replace this with something that draws to a CDC
OnDraw(&dc);
dc.SelectObject(pOld);
fe.cfFormat = CF_BITMAP;
fe.ptd = NULL;
fe.dwAspect = DVASPECT_CONTENT;
fe.lindex = -1;
fe.tymed = TYMED_GDI;
data->tymed = TYMED_GDI;
data->hBitmap = (HBITMAP)junk->m_hObject;// HBITMAP(*junk);
data->pUnkForRelease = NULL;
pData->CacheData( CF_BITMAP, data, &fe);
pData->SetClipboard();
delete data;
delete junk;
ReplyMemory leak
Posted by Legacy on 05/12/2000 12:00amOriginally posted by: Brent Mantooth
As stated earlier you must delete the junk variable,but does this cause a memory leak? Is it taken care of elsewhere or does this just eat memory every time you copy stuff?
ReplyHow to retrieve from clipboard?
Posted by Legacy on 02/16/2000 12:00amOriginally posted by: Lawrence Tay
hi, the editcopy works well, but how do i paste the clipboard bmp?
ReplyIs it correct?
Posted by Legacy on 11/17/1999 12:00amOriginally posted by: Julius Noche
With the previous comments stated. It seems that the code may have lots of bugs. Could anyone provide me with the correct code?
ReplyDoesn't the Bitmap data need to be in Global memory?
Posted by Legacy on 05/08/1999 12:00amOriginally posted by: James Skinner
ReplyDoesn't the memory the bitmap is in need
to have allocated with GlobalAlloc() ?
bugfix:must remove "delete junk;" from codes
Posted by Legacy on 03/31/1999 12:00amOriginally posted by: kevin
ReplyHow can diable one item after I click on it?
Posted by Legacy on 12/07/1998 12:00amOriginally posted by: Xiaoliang Chen
I still do not how to disable a item after I click on it or on
Replyspecial situation.