关于剪贴板的代码,运行时为什么会出错那,该如何解决

关于剪贴板的代码,运行时为什么会出错那
void DrawImage(CDC * pDC, CString pText) 
{
CRect clip(0,0,200,200);
pDC->FillSolidRect(clip,RGB(170,170,222));
CPen pen;
pen.CreatePen(PS_SOLID, 3, RGB(255,10,10));
CPen * oldpen = pDC->SelectObject(&pen);
pDC->MoveTo(0,0);
pDC->LineTo(clip.right,clip.bottom);
pDC->MoveTo(clip.right,clip.top);
pDC->LineTo(0,clip.bottom);
pDC->SelectObject(oldpen);
pen.DeleteObject();
pDC->TextOut(10,10,pText);
pDC->TextOut(30,80,pText);
pDC->TextOut(50,150,pText);
}

void CTestDlg::ClipboardBitmap()
{
  if(OpenClipboard())
  {
  EmptyClipboard();
  CBitmap * junk = new CBitmap();
  CClientDC cdc(this);
  CDC dc;
  dc.CreateCompatibleDC(&cdc);
  CRect client(0,0,200,200);
  junk->CreateCompatibleBitmap(&cdc,client.Width(),client.Height());
  dc.SelectObject(junk);

  DrawImage(&dc,CString("Bitmap"));

  SetClipboardData(CF_BITMAP,junk->m_hObject);
  CloseClipboard();

  delete junk;
  }
  //到这里好用,往画图里面粘贴可以

  if(OpenClipboard())
  {
  HBITMAP handle = (HBITMAP)GetClipboardData(CF_DIB);
  //这个handle就是空了,下面的自然也就不行,不知道为什么
  CBitmap * bm = CBitmap::FromHandle(handle);

  CClientDC cdc(this);
  CDC dc;
  dc.CreateCompatibleDC(&cdc);
  dc.SelectObject(bm);
  cdc.BitBlt(0,0,200,200,&dc,0,0,SRCCOPY);

  CloseClipboard();
  }
}


------解决方案--------------------
if(OpenClipboard())
{
 //获得剪贴板数据
 HBITMAP handle = (HBITMAP)GetClipboardData(CF_BITMAP);
 CBitmap * bm = CBitmap::FromHandle(handle);

 CClientDC cdc(this);
 CDC dc;
 dc.CreateCompatibleDC(&cdc);
 dc.SelectObject(bm);
 cdc.BitBlt(0,0,200,200,&dc,0,0,SRCCOPY);

 CloseClipboard();
}