TransparentBlt在64位系统中不能过滤出透明解决办法

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

------解决方案--------------------
http://forum.codejock.com/forum_posts.asp?TID=12770&title=how-to-make-the-markup-background-transparent
你看看这个。不确实能不能解决你的问题。
------解决方案--------------------
我遇见过,后来没有用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);