2014-02-19 62 views
0

我GOOGLE,看到的例子,其他的問題在這裏,MSDN和下載實施例的代碼。我無法弄清楚這有什麼問題。的Win32 C++ ALPHABLEND位圖部分透明

// setting up the memory DC and selecting in the bitmap 
HDC hdc = GetDC(hWnd); 
HDC hdcMem = CreateCompatibleDC(hdc); 
ReleaseDC(hWnd, hdc); 
HBITMAP hbmOld = (HBITMAP)SelectObject(hdcMem, bitmap.hbmLogo); 

// setting up the blend function 
BLENDFUNCTION bStruct; 
bStruct.BlendOp = AC_SRC_OVER; 
bStruct.BlendFlags = 0; 
bStruct.SourceConstantAlpha = 255; 
bStruct.AlphaFormat = AC_SRC_ALPHA; 

// try 
BOOL check = AlphaBlend(buffer.getBufferDC(), 0, 0, bitmap.bmLogo.bmWidth, bitmap.bmLogo.bmHeight, hdcMem, 0, 0, bitmap.bmLogo.bmWidth, bitmap.bmLogo.bmHeight, bStruct); 
if (check == FALSE) MessageBox(0,0,0,0); 

// this is how I load the bitmap, it is a resource. 
bitmap.hbmLogo = LoadBitmap(GetModuleHandle(NULL), MAKEINTRESOURCE(IDB_LOGO_0)); 
if (bitmap.hbmLogo == NULL) { MessageBox(NULL, "Could not read the logo bitmap.", "Error", MB_OK); return false; } 
GetObject(bitmap.hbmLogo, sizeof(bitmap.bmLogo), &bitmap.bmLogo); 

我使用消息框來快速檢查結果。檢查總是返回TRUE。位圖及其尺寸是正確的。

我已經試過了在不同的背景顏色,alpha值,並且仍然一無所獲,更換與BitBlt函數或TransparentBitBlt,沒問題,顯示這個標誌。我所有使用AlphaBlend函數的嘗試都沒有改變。屏幕上不會出現徽標,甚至一秒鐘也不會出現。

任何想法?

謝謝。

Here is the bitmap.

+1

你要給我們比多一點細節。你有選擇到hdcmem的位圖嗎? bstruct中的值是什麼?等等你期望看到什麼?你究竟看到了什麼? – thang

+0

我的錯誤,現在更新。 –

+1

你將不得不提供一段代碼來創建位圖...位圖的格式很重要。 – thang

回答

0

實測值的溶液看着一個例子更靠近後。

我設置BLENDFUNCTION作爲一個全球性的,在WM_CREATE消息我用:

m_bf.BlendOp = AC_SRC_OVER; 
    m_bf.BlendFlags = 0; 
    m_bf.SourceConstantAlpha = 100; // any 0 to 255 
    m_bf.AlphaFormat = 0; 
    LoadBitmapsFromResource(); 

和它現在的工作。