在32位系统下是正常的,一移植到64位系统中,要实现透明的地方就变黑了,有谁碰到过这个问题么?

解决方案 »

  1.   

    http://forum.codejock.com/forum_posts.asp?TID=12770&title=how-to-make-the-up-background-transparent
    你看看这个。不确实能不能解决你的问题。
      

  2.   

    我遇见过,后来没有用TransparentBlt,改用下面的函数替换。你试试先。。
    BOOL CMyFormats::DrawTransparentBitmap(HDC hdcDest,int nXOriginDest, int nYOriginDest, int nWidthDest, int nHeightDest, HDC hdcSrc,
       int nXOriginSrc, int nYOriginSrc, int nWidthSrc, int nHeightSrc, UINT crTransparent)
    {
    if (nWidthDest < 1) 
    return false; 
    if (nWidthSrc < 1) 
    return false; 
    if (nHeightDest < 1) 
    return false; 
    if (nHeightSrc < 1) 
    return false; 
    HDC dc = CreateCompatibleDC(NULL); 
    HBITMAP bitmap = CreateBitmap(nWidthSrc, nHeightSrc, 1, GetDeviceCaps(dc, BITSPIXEL), NULL); 
    if (bitmap == NULL) 

    DeleteDC(dc); 
    return false; 

    HBITMAP oldBitmap = (HBITMAP)SelectObject(dc, bitmap); 
    if (!BitBlt(dc, 0, 0, nWidthSrc, nHeightSrc, hdcSrc, nXOriginSrc, nYOriginSrc, SRCCOPY)) 

    SelectObject(dc, oldBitmap); 
    DeleteObject(bitmap); 
    DeleteDC(dc); 
    return false; 

    HDC maskDC = CreateCompatibleDC(NULL); 
    HBITMAP maskBitmap = CreateBitmap(nWidthSrc, nHeightSrc, 1, 1, NULL); 
    if (maskBitmap == NULL) 

    SelectObject(dc, oldBitmap); 
    DeleteObject(bitmap); 
    DeleteDC(dc); 
    DeleteDC(maskDC); 
    return false; 

    HBITMAP oldMask = (HBITMAP)SelectObject(maskDC, maskBitmap); 
    SetBkColor(maskDC, RGB(0,0,0)); 
    SetTextColor(maskDC, RGB(255,255,255)); 
    if (!BitBlt(maskDC, 0,0,nWidthSrc,nHeightSrc,NULL,0,0,BLACKNESS)) 

    SelectObject(maskDC, oldMask);
    DeleteObject(maskBitmap); 
    DeleteDC(maskDC); 
    SelectObject(dc, oldBitmap); 
    DeleteObject(bitmap); 
    DeleteDC(dc); 
    return false;

    SetBkColor(dc, crTransparent); 
    BitBlt(maskDC, 0,0,nWidthSrc,nHeightSrc,dc,0,0,SRCINVERT); 
    SetBkColor(dc, RGB(0,0,0)); 
    SetTextColor(dc, RGB(255,255,255)); 
    BitBlt(dc, 0,0,nWidthSrc,nHeightSrc,maskDC,0,0,SRCAND); 
    HDC newMaskDC = CreateCompatibleDC(NULL); 
    HBITMAP newMask; 
    newMask = CreateBitmap(nWidthDest, nHeightDest, 1, GetDeviceCaps(newMaskDC, BITSPIXEL), NULL); 
    if (newMask == NULL)
    {
    SelectObject(dc, oldBitmap); 
    DeleteDC(dc); 
    SelectObject(maskDC, oldMask); 
    DeleteDC(maskDC); 
    DeleteDC(newMaskDC); 
    DeleteObject(bitmap);
    DeleteObject(maskBitmap); 
    return false; 

    SetStretchBltMode(newMaskDC, COLORONCOLOR); 
    HBITMAP oldNewMask = (HBITMAP) SelectObject(newMaskDC, newMask); 
    StretchBlt(newMaskDC, 0, 0, nWidthDest, nHeightDest, maskDC, 0, 0, nWidthSrc, nHeightSrc, SRCCOPY);
    SelectObject(maskDC, oldMask);
    DeleteDC(maskDC); 
    DeleteObject(maskBitmap); 
    HDC newImageDC = CreateCompatibleDC(NULL); 
    HBITMAP newImage = CreateBitmap(nWidthDest, nHeightDest, 1, GetDeviceCaps(newMaskDC, BITSPIXEL), NULL); 
    if (newImage == NULL)

    SelectObject(dc, oldBitmap); 
    DeleteDC(dc); 
    DeleteDC(newMaskDC);
    DeleteObject(bitmap); 
    return false; 

    HBITMAP oldNewImage = (HBITMAP)SelectObject(newImageDC, newImage); 
    StretchBlt(newImageDC, 0, 0, nWidthDest, nHeightDest, dc, 0, 0, nWidthSrc, nHeightSrc, SRCCOPY); 
    SelectObject(dc, oldBitmap); DeleteDC(dc); DeleteObject(bitmap); 
    BitBlt( hdcDest, nXOriginDest, nYOriginDest, nWidthDest, nHeightDest, newMaskDC, 0, 0, SRCAND); 
    BitBlt( hdcDest, nXOriginDest, nYOriginDest, nWidthDest, nHeightDest, newImageDC, 0, 0, SRCPAINT); 
    SelectObject(newImageDC, oldNewImage); 
    DeleteDC(newImageDC); 
    SelectObject(newMaskDC, oldNewMask);
    DeleteDC(newMaskDC); 
    DeleteObject(newImage); 
    DeleteObject(newMask); 
    return true;
    }
      

  3.   

    DrawTransparentBitmap这个方法可以,非常感谢,解决了燃眉之急呢,结贴,顺便请问下这方面的资料您是在哪找到的,我想参考下为什么这样修改,谢谢了