winapi — Win32 C ++ Alphable и битовая карта, частично прозрачная

Я гуглил, видел примеры, другие вопросы здесь, 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 не привели к изменениям. Логотип не появляется даже на секунду на экране.

Есть идеи?

Благодарю.

Здесь растровое изображение.

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();

и сейчас работает.

1

Другие решения

Других решений пока нет …