我通过将窗口设为包含 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/