Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/133.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 禁用“的透明度”;“桌面”;子窗口_C++_C_Windows_Winapi_Gdi - Fatal编程技术网

C++ 禁用“的透明度”;“桌面”;子窗口

C++ 禁用“的透明度”;“桌面”;子窗口,c++,c,windows,winapi,gdi,C++,C,Windows,Winapi,Gdi,我通过使窗口成为WorkerW窗口的子窗口将窗口固定到桌面,WorkerW窗口包含Windows7 Aero中的桌面FolderView。到目前为止,这对于将窗口固定到桌面非常有效,但是窗口具有某种透明度,而它作为最上面的窗口没有这种透明度 客户端区域是通过GDI绘制的,我尝试了所有我能想到的方法使窗口完全不透明:SetBkColor、SetLayeredWindowAttributes、WNDCLASSEX.style=CS_PARENTDC,使用RGBA颜色(只会使透明度提高到100%,但将

我通过使窗口成为WorkerW窗口的子窗口将窗口固定到桌面,WorkerW窗口包含Windows7 Aero中的桌面FolderView。到目前为止,这对于将窗口固定到桌面非常有效,但是窗口具有某种透明度,而它作为最上面的窗口没有这种透明度

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


有没有办法将不透明窗口绘制为Aero desktop的子窗口?

使用Direct2D完成了预期的工作(100%不透明),只要我将其与GDI(CreateDCRenderTarget或ID2D1GdiInteropRenderTarget)混合使用,整个透明度问题就会再次出现。“Direct2D和GDI互操作性”到此为止
我猜是时候将传统的GDI代码移植到Direct2D了,然后……

使用Direct2D完成了预期的工作(100%不透明),只要我将其与GDI(CreateDCRenderTarget或ID2D1GdiInteropRenderTarget)混合使用,整个透明性问题就会再次出现。“Direct2D和GDI互操作性”到此为止
我想是时候将传统的GDI代码移植到Direct2D了……据我所知,甚至没有一种受支持的方法来为桌面创建子窗口。但是如果你坚持你必须入侵这个星球™, 考虑在没有重定向位图的情况下创建窗口(<代码> WSXEXORNORADION BITMAP),并手动添加DirectX曲面进行渲染。这可能会让你更好地控制桌面构图。或者你可以使用DirectComposition API来控制桌面合成,尽管我没有这方面的经验。你为什么要尝试做这个不受支持的事情?你意识到你不应该这样做吗?为什么要让它成为一个孩子?仅仅放置窗口就可以解决什么问题?您是否考虑过在远程桌面下如何工作?关闭空气动力开关?使用Windows 8、8.1和10?为什么要“不支持”?没有在文档中读到任何关于它的内容。这可能是将窗口固定到桌面上的唯一方法,将其放置在z顺序(底部)无法可靠工作,请参阅:Openhardwaremonitor gadget、Rainmeter,或者即使您仍敢使用它,也可以使用Windows 7 sidebar.exe。因此,即使是微软的可执行文件也难以将窗口固定在特定的z顺序上,我也看不到其他方法。它不必在8-10小时内工作。如果有人能提供一种将窗口固定在特定z顺序的方法,那么我将很乐意实现它;-)@IInspectable不仅仅是DirectComposition Win 8或更新版本吗?据我所知,甚至没有一种受支持的方法为桌面创建子窗口。但是如果你坚持你必须入侵这个星球™, 考虑在没有重定向位图的情况下创建窗口(<代码> WSXEXORNORADION BITMAP),并手动添加DirectX曲面进行渲染。这可能会让你更好地控制桌面构图。或者你可以使用DirectComposition API来控制桌面合成,尽管我没有这方面的经验。你为什么要尝试做这个不受支持的事情?你意识到你不应该这样做吗?为什么要让它成为一个孩子?仅仅放置窗口就可以解决什么问题?您是否考虑过在远程桌面下如何工作?关闭空气动力开关?使用Windows 8、8.1和10?为什么要“不支持”?没有在文档中读到任何关于它的内容。这可能是将窗口固定到桌面上的唯一方法,将其放置在z顺序(底部)无法可靠工作,请参阅:Openhardwaremonitor gadget、Rainmeter,或者即使您仍敢使用它,也可以使用Windows 7 sidebar.exe。因此,即使是微软的可执行文件也难以将窗口固定在特定的z顺序上,我也看不到其他方法。它不必在8-10小时内工作。如果有人能提供一种将窗口固定在特定z顺序的方法,那么我将很乐意实现它;-)@IInspectable不是DirectComposition Win 8或更高版本吗?顺便说一句,我尝试了文档中可以找到的每种像素格式(DXGI_格式和D2D1_ALPHA_模式)的组合,只要涉及GDI,它就不会改变行为,因此如果没有人提出GDI的解决方案,Direct2D方法似乎是唯一的“答案”顺便说一句,我尝试了文档中可以找到的像素格式(DXGI_格式和D2D1_ALPHA_模式)的每一种组合,只要涉及GDI,它就不会改变行为,因此如果没有人提出GDI的解决方案,Direct2D方法似乎是唯一的“答案”
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));