【问题标题】:Transparency in C++C++ 中的透明度
【发布时间】:2013-02-08 09:43:56
【问题描述】:

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

我的代码如下所示:

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 操作系统或更高版本上工作。

【问题讨论】:

  • “或更早”是什么意思?视窗 2000?视窗我?视窗 98?还是您将其与“或以后”混淆了?

标签: c++ transparency gdi


【解决方案1】:

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

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

SetLayeredWindowAttributes 可以使窗口的一部分透明,也可以对整个窗口的其余部分应用半透明。

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    猜你喜欢
    • 2012-03-28
    • 2013-06-21
    • 1970-01-01
    • 2011-02-07
    • 2011-12-04
    • 1970-01-01
    • 2017-04-25
    • 1970-01-01
    • 2014-01-05
    相关资源
    最近更新 更多