Я гуглил, видел примеры, другие вопросы здесь, MSDN и код загруженного примера. Я не могу понять, что не так с этим.
// 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);
Я использую окно сообщения, чтобы быстро проверить результат. Проверка всегда возвращает ИСТИНА. Растровое изображение и его размеры верны.
Я пробовал использовать разные цвета фона, альфа-значения и все еще ничего, заменив их на BitBlt или TransparentBitBlt, без проблем, логотип отображается. Все мои попытки использования функции AlphaBlend не привели к изменениям. Логотип не появляется даже на секунду на экране.
Есть идеи?
Благодарю.
Нашел решение, посмотрев ближе на пример.
Я установил 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();
и сейчас работает.
Других решений пока нет …