我正在尝试在Native Win32 C++中绘制一个略带透明的蓝色矩形。我正在使用AlphaBlend()函数,但它没有将任何东西绘制到窗口上,什么也没有发生。
我的问题是:当我运行绘制略带透明矩形的函数时,它不会显示在我的窗口上。我感觉我做错了,也许我应该使用HBITMAP?
请告诉我需要做什么才能使我的函数在窗口上绘制一个略带透明的矩形。
另外,我知道有GDI+,但是我想暂时避免使用它,因为当我使用那个库时,我经常会遇到很多编译/包含错误,而且我想尽可能地降低依赖性,不使用那些可以为我完成所有工作的库。
我的问题是:当我运行绘制略带透明矩形的函数时,它不会显示在我的窗口上。我感觉我做错了,也许我应该使用HBITMAP?
请告诉我需要做什么才能使我的函数在窗口上绘制一个略带透明的矩形。
另外,我知道有GDI+,但是我想暂时避免使用它,因为当我使用那个库时,我经常会遇到很多编译/包含错误,而且我想尽可能地降低依赖性,不使用那些可以为我完成所有工作的库。
bool paintRect(HDC hdc, RECT dim, COLORREF penCol, COLORREF brushCol, unsigned int opacity)
{
HDC tempHdc = CreateCompatibleDC(hdc);
BLENDFUNCTION blend = {AC_SRC_OVER, 0, 127, AC_SRC_ALPHA};
SetDCPenColor(tempHdc, RGB(255,255,0));
SetDCBrushColor(tempHdc, RGB(255,255,0));
Rectangle(tempHdc, dim.left, dim.top, dim.right, dim.bottom);
return bool(AlphaBlend(hdc, dim.left, dim.top, dim.right, dim.bottom, tempHdc, dim.left, dim.top, dim.right, dim.bottom, blend));
}
// Usage
case WM_PAINT:
{
HDC hdc;
PAINTSTRUCT ps;
hdc = BeginPaint(hwnd, &ps);
RECT a = {0,0,100,100};
paintRect(hdc, a, RGB(255,255,0), RGB(255,255,0), 127); // 127 is 50% transparency right?
EndPaint(hwnd, &ps);
}
break;
// 将位图的宽度和高度设置为每个水平区域宽度和高度的60%。稍后,混合将在三个区域的中心发生。
是一个复制粘贴错误。 - sergiolAlphaBlend
产生错误87“无效参数”(而在paintRect
内部没有其他调用失败)。 Win7 / 64在这里,FWIW。顺便说一句,opacity
参数从未被使用。 - Sz.