【发布时间】:2016-11-23 19:25:00
【问题描述】:
我将一个窗口固定到桌面,方法是将其设为 WorkerW 窗口的子窗口,该窗口包含 Windows 7 Aero 中的桌面 FolderView。到目前为止,这非常适合将窗口固定在桌面上,但是窗口具有某种透明度,而它作为最顶层窗口所没有的。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 桌面的子窗口?
【问题讨论】:
-
据我所知,甚至没有支持为桌面创建子窗口的方法。但是,如果您坚持必须 Hack The Planet™,请考虑创建没有重定向位图 (
WS_EX_NOREDIRECTIONBITMAP) 的窗口并手动添加 DirectX 表面以进行渲染。这可能让您更好地控制桌面组合。或者也许你可以使用 DirectComposition API 来控制桌面合成,虽然我没有这方面的经验。 -
你为什么要尝试做这个不受支持的事情?你知道你不应该这样做吗?
-
为什么要让它成为一个孩子?简单地放置窗口会导致什么问题?您是否考虑过这将如何在远程桌面下工作?关闭 Aero 开关?使用 Windows 8、8.1 和 10?
-
为什么应该“不受支持”?没有在文档中阅读有关它的任何内容。这是将窗口固定到桌面的唯一方法,将其置于 z 顺序(底部)不能可靠地工作,请参阅:Openhardwaremonitor 小工具、Rainmeter,或者即使您仍然敢于使用它,Windows 7 侧边栏。 EXE文件。因此,即使 Microsoft 可执行文件也难以将窗口固定在特定的 z 顺序,我也没有看到另一种方法。它不必为8-10工作。如果有人可以提供一种方法以将窗口固定在特定的 z 顺序上,那么我将很乐意实现它;-)
-
@IInspectable DirectComposition 不只是 Win 8 或更高版本吗?