c++ - 禁用 "desktop"子窗口的透明度

标签 c++ c windows winapi gdi

我通过将窗口设为包含 Windows 7 Aero 中的桌面 FolderView 的 WorkerW 窗口的子窗口来将窗口固定到桌面。到目前为止,这对于将窗口固定到桌面非常有效,但是该窗口具有某种透明度,这是最顶层窗口所没有的。 Instead of a dark background RGB(0,21,32) the actual desktop background/wallpaper shines through

case WM_PAINT:
    hdc = BeginPaint(hWnd, &ps);
    GetClientRect(hWnd, &cr);
    SelectObject(hdc, GetStockObject(DC_BRUSH));
    SetDCBrushColor(hdc, RGB(0,21,32));
    FillRect(hdc, &cr, (HBRUSH) GetStockObject(DC_BRUSH));

客户区是通过 GDI 绘制的,我尝试了所有我能想到的使窗口完全不透明的方法:SetBkColor、SetLayeredWindowAttributes、WNDCLASSEX.style = CS_PARENTDC,使用 RGBA 颜色(只能使透明度达到 100%) ,但将其设置为不透明不会改变结果)

有什么方法可以绘制不透明窗口作为 Aero 桌面的子窗口吗?

最佳答案

使用 Direct2D 可以按预期完成工作(100% 不透明),只要我将它与 GDI(CreateDCRenderTarget 或 ID2D1GdiInteropRenderTarget)混合使用,整个透明度问题就会再次出现。 “Direct2D 和 GDI 互操作性”就这么多 我猜是时候将旧版 GDI 代码移植到 Direct2D 了......

关于c++ - 禁用 "desktop"子窗口的透明度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38483273/

相关文章:

c++ - 在类中使用 tostring。 C++

c++ - 为什么变量用最大值而不是零初始化

C++ Windows dll查看器

c - 如何传递参数

c -/bin/ls程序从什么地址开始执行?

c - 移动主窗口位置或弹出消息框后列表框控件未重绘

c++ - Valgrind 在为字符串赋值时报告内存泄漏

c - 初始化包含指向其自身类型的指针的常量结构

windows - `cleartool lsco -r -cvi -me` 与 `cleartool lsco -graphical` 相比非常慢。是否有可能提高它的性能?

windows - 在 Windows 中使用 grep、sed、awk 进行 Shell