0

我正在尝试在我的应用程序中创建透明度。例如,我的应用程序的窗口是方形的,我想通过隐藏窗口的一部分来使其变为圆形。

我的代码看起来像这样:

HDC hdcMask = nullptr;
HBITMAP hBMP = (HBITMAP)LoadImageW(nullptr, L"C:\\mask.bmp", IMAGE_BITMAP, 150, 160, LR_LOADFROMFILE);
SelectObject(hdcMask, hBMP);
HWND hWnd = GetActiveWindow();
HDC hdcWindow = GetDC(hWnd);

TransparentBlt(hdcWindow, 0, 0, 150, 160, hdcWindow, 0, 0, 150, 160, RGB(0,0,0));

其中 mask.bmp 是一个位图,其中白色是我想要透明的,黑色是我想要可见的。

应用此代码后,什么也没有发生。我究竟做错了什么 ?是否有另一种方法来获得所需的结果?

注意:我需要此代码才能在 Windows XP 操作系统或更高版本上工作。

4

2 回答 2

1

有几种方法可以使窗口透明和/或半透明。

SetWindowRgn将使窗口的某些部分变得透明。

SetLayeredWindowAttributes可以使窗口的某些部分透明,也可以将半透明应用于整个窗口的其余部分。

UpdateLayeredWindow可以为各个窗口提供不同程度的半透明度。

于 2013-02-08T10:52:55.753 回答
0

为什么不使用与 bmp 不同的格式,其中还可以包含 alpha 数据?

您可以使用 PixelFormat32bppPARGB 位图,使用 Bitmap::LockBits 和 Bitmap::Unlockbits 来保持文件的格式并避免覆盖 alpha 设置。

于 2013-02-08T10:06:58.373 回答