C (GDI)AlphaBlend

C (GDI)AlphaBlend,c,winapi,gdi,C,Winapi,Gdi,这个问题是后续问题 我的问题是我的alpha混合函数不起作用,我想知道是否有人帮我解决 以下是设置WndProc: case WM_PAINT: OnChildPaint(BeginPaint(hWnd, &ps)); EndPaint(hWnd, &ps); break; MyOnChildPaint功能: BOOL OnChildPaint(HDC i_hDC) { HDC hMemDC; HGDIOBJ hOldObj;

这个问题是后续问题

我的问题是我的alpha混合函数不起作用,我想知道是否有人帮我解决

以下是设置
WndProc

case WM_PAINT:
    OnChildPaint(BeginPaint(hWnd, &ps));
    EndPaint(hWnd, &ps);
    break;
My
OnChildPaint
功能:

BOOL
OnChildPaint(HDC i_hDC)
{

    HDC hMemDC;
    HGDIOBJ hOldObj;
    HBITMAP hBitmap;

    BLENDFUNCTION blendFunc_s = {AC_SRC_OVER, 0, 128, AC_SRC_ALPHA};

    hMemDC  = CreateCompatibleDC(i_hDC);
    hBitmap = CreateCompatibleBitmap(hMemDC, 100, 100);
    /* hBrush  = CreateSolidBrush(RGB(255, 0, 0)); */
    hOldObj = SelectObject(hMemDC, hBitmap);

    BitBlt(i_hDC, 10, 100, 100, 100, hMemDC, 0, 0, SRCCOPY);

    AlphaBlend(i_hDC, 10, 100, 100, 100, hMemDC, 10, 100, 100, 100, blendFunc_s);

    SelectObject(hMemDC, hOldObj);
    DeleteObject(hMemDC);
    return TRUE;
}
请记住,我不是在使用实际的位图图像(没有图像)


谢谢

你期待什么?你实际看到了什么?示例代码不初始化源位图。此外,还提供了特定的AC_SRC_ALPHA,它告诉函数源位图具有每像素的ALPHA值(并且像素已预乘以其ALPHA)。兼容位图没有每像素alpha值,所以你在对AlphaBlend撒谎。@AdrianMcCarthy感谢你的回复。我有一个弹出的纯色父窗口。我有一个儿童窗口,我想要的是我的儿童窗口是透明的(即50%)。我不能在子窗口上使用
SetLayeredWindowAttributes
和设置
LWA_ALPHA
,因为如果我正确理解子窗口从父窗口固有的一切,那么如果父窗口不是透明的,子窗口就不能(如果我错了,请纠正我)。你能给我举个例子说明如何使我的孩子的窗口透明吗?这是一个完全不同的问题。试试看:@AdrianMcCarthy这不是另一个问题。如果你看我上面的帖子,我会把链接放在上面,上面解释了我想要什么。解决方法是使用AlphaBlend函数。这就是我发布这个的原因。您发送给我的链接是为了使子控件完全透明,这在我的情况下不存在。但是谢谢你的帮助。很抱歉我错过了链接。我想帮忙。这个问题被标记为GDI,主题是关于AlphaBlend的,文章的大部分内容是关于尝试使用AlphaBlend。这些是我所知道的。我不知道如何使静态控件成为一个透明窗口,但是堆栈溢出似乎已经解决了很多关于这个主题的问题,这就是为什么我建议使用不同的搜索。