C ++中的透明度

时间:2013-02-08 09:43:57

标签: c++ transparency gdi

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

我的代码看起来像这样:

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 OS或更高版本上运行。

2 个答案:

答案 0 :(得分:1)

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

SetWindowRgn会使窗口的某些部分透明。

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

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

答案 1 :(得分:0)

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

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