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函數的嘗試都沒有改變。屏幕上不會出現徽標,甚至一秒鐘也不會出現。
任何想法?
謝謝。
你要給我們比多一點細節。你有選擇到hdcmem的位圖嗎? bstruct中的值是什麼?等等你期望看到什麼?你究竟看到了什麼? – thang
我的錯誤,現在更新。 –
你將不得不提供一段代碼來創建位圖...位圖的格式很重要。 – thang