如题

解决方案 »

  1.   

    BOOL CShow_WindowDCView::Show_WindowDC(CWnd *pWndDest /*目标窗口的wnd指针*/,
    CWnd *pWndSrc /*源窗口*/)
    {
     //当然正规点还得判断它IsKindof(“CWnd”),这里我就偷懒了
     if(pWndDest==NULL || pWndSrc==NULL) return FALSE; CRect SrcRect;
     pWndSrc->GetWindowRect(&SrcRect); // 内存设备描述表
     HDC hSrcDC, hMemDC; 
     // 位图句柄
     HBITMAP hBitmap, hOldBitmap; 
     // 位图宽度和高度
     int nWidth, nHeight; 
     pWndSrc->Invalidate();
     hSrcDC=pWndSrc->GetDC()->m_hDC; // 创建一个与源窗口设备描述表兼容的内存设备描述表
     hMemDC = CreateCompatibleDC(hSrcDC);
     nWidth = SrcRect.Width();
     nHeight = SrcRect.Height(); // 创建一个与源窗口设备描述表兼容的位图
     hBitmap = CreateCompatibleBitmap(hSrcDC, nWidth, nHeight); 
     // 把新位图选到内存设备描述表中 
     hOldBitmap = (HBITMAP)SelectObject(hMemDC, hBitmap);
     // 把屏幕设备描述表拷贝到内存设备描述表中
     BitBlt(hMemDC, 0, 0, nWidth, nHeight,hSrcDC, 0, 0, SRCCOPY); 
     //得到位图的句柄
     hBitmap = (HBITMAP)SelectObject(hMemDC, hOldBitmap);
     CRect DestRect;
     GetWindowRect(&DestRect);
     CDC dcMem;
     //创建一个与目标窗口设备描述表兼容的位图
     dcMem.CreateCompatibleDC(GetDC());
     HBITMAP poldBitmap=(HBITMAP)SelectObject(dcMem.m_hDC,hBitmap);
     GetDC()->StretchBlt(0,0 ,DestRect.Width(),DestRect.Height(),&dcMem,0 ,0,nWidth,nHeight,SRCCOPY); //显示位图
    //善后工作
     DeleteDC(hSrcDC);
     DeleteDC(hMemDC);
     dcMem.SelectObject(poldBitmap);
     dcMem.DeleteDC();
     return TRUE;
    }