存在两个CBitmap对象: ScrBmp和DestBmp,
请问高手如何将ScrBmp中的内容复制到DestBmp

解决方案 »

  1.   

    int GetBitmap( BITMAP* pBitMap );
    BOOL CreateBitmapIndirect( LPBITMAP lpBitmap );
      

  2.   

    实际上3楼说的对。
    要是不行。
    就用下面的我写的一段代码吧。
    下面代码的意思是:
    复制当前的位图句柄。
    HBITMAP CSIDropSource::CopyBitmap(HBITMAP hSourceHbitmap //The source bitmap handle. (I)   )
    {
    CDC sourceDC;
    CDC destDC;
    sourceDC.CreateCompatibleDC(NULL);
    destDC.CreateCompatibleDC(NULL);
    //The bitmap information.
    BITMAP bm = {0};
    //Get the bitmap information.
    ::GetObject(hSourceHbitmap, sizeof(bm), &bm);
    // Create a bitmap to hold the result
    HBITMAP hbmResult = ::CreateCompatibleBitmap(CClientDC(NULL), bm.bmWidth, bm.bmHeight); HBITMAP hbmOldSource = (HBITMAP)::SelectObject( sourceDC.m_hDC, hSourceHbitmap);
    HBITMAP hbmOldDest = (HBITMAP)::SelectObject( destDC.m_hDC, hbmResult );
    destDC.BitBlt(0,0,bm.bmWidth, bm.bmHeight, &sourceDC, 0, 0, SRCCOPY ); // Restore DCs
    ::SelectObject( sourceDC.m_hDC, hbmOldSource );
    ::SelectObject( destDC.m_hDC, hbmOldDest );
    ::DeleteObject(sourceDC.m_hDC);
    ::DeleteObject(destDC.m_hDC); return hbmResult;
    }DestBmp.Attach(中的参数是位图句柄)
      

  3.   

    /*************************************************************************
     *
     * 函数名称:
     *   CopyHandle()
     *
     * 参数:
     *   HGLOBAL h          - 要复制的内存区域
     *
     * 返回值:
     *   HGLOBAL            - 复制后的新内存区域
     *
     * 说明:
     *   该函数复制指定的内存区域。返回复制后的新内存区域,出错时返回0。
     *
     ************************************************************************/HGLOBAL WINAPI CopyHandle (HGLOBAL h)
    {
    if (h == NULL)
    return NULL; // 获取指定内存区域大小
    DWORD dwLen = ::GlobalSize((HGLOBAL) h);

    // 分配新内存空间
    HGLOBAL hCopy = ::GlobalAlloc(GHND, dwLen);

    // 判断分配是否成功
    if (hCopy != NULL)
    {
    // 锁定
    void* lpCopy = ::GlobalLock((HGLOBAL) hCopy);
    void* lp     = ::GlobalLock((HGLOBAL) h);

    // 复制
    memcpy(lpCopy, lp, dwLen);

    // 解除锁定
    ::GlobalUnlock(hCopy);
    ::GlobalUnlock(h);
    } return hCopy;
    }这是一个例子程序的一部分,发给你,就是复制句柄,即实现位图的复制,特别 注意的是,256色和24位真彩有一点区别。响应菜单函数后可以应用,原程序是剪切板技术,不过这段代码很好用,我的程序就是用这段程序,写得很好!
      

  4.   

    谢谢TopLevel ,采用你的方法搞定了。