2016-07-20 8 views
1

Ich fixiere ein Fenster auf dem Desktop, indem ich es in das WorkerW-Fenster untergeordne, das den Desktop FolderView in Windows 7 Aero enthält. Bis jetzt funktioniert das perfekt, um das Fenster an den Desktop zu hängen, aber das Fenster hat eine Art von Transparenz, die es nicht als oberstes Fenster hat. Instead of a dark background RGB(0,21,32) the actual desktop background/wallpaper shines throughDeaktivieren der Transparenz für ein untergeordnetes "Desktop" -Fenster

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)); 

Der Client-Bereich über GDI gezeichnet wird, habe ich versucht, alles, was ich denken konnte, das Fenster vollständig undurchsichtig zu machen: SetBkColor, SetLayeredWindowAttributes, WNDCLASSEX.style = CS_PARENTDC, mit RGBA Farben (nur noch mehr bekommen funktioniert Transparenz bis zu 100%, aber die Einstellung auf undurchsichtig ändert nicht das Ergebnis)

Gibt es eine Möglichkeit, ein undurchsichtiges Fenster als Kind des Aero-Desktops zu zeichnen?

+0

Soweit ich weiß, gibt es nicht einmal eine unterstützte Möglichkeit, ein untergeordnetes Fenster zu erstellen Desktop. Wenn Sie jedoch darauf bestehen, Hack The Planet ™ zu verwenden, sollten Sie das Fenster ohne Umleitungsbitmap erstellen ('WS_EX_NOREDIRECTIONBITMAP') und manuell eine DirectX-Oberfläche zum Rendern hinzufügen. Das * könnte * Ihnen mehr Kontrolle über die Zusammensetzung des Desktops geben. Oder Sie können die DirectComposition-API verwenden, um die Desktop-Komposition zu steuern, obwohl ich keine Erfahrung damit habe. – IInspectable

+0

Warum versuchen Sie, diese nicht unterstützte Sache zu tun? Ist dir klar, dass du das nicht tun sollst? –

+0

Warum es ein Kind machen? Welches Problem löst das, dass das Fenster einfach platziert? Haben Sie überlegt, wie dies unter Remote Desktop funktioniert? Mit Aero ausschalten? Mit Windows 8, 8.1 und 10? –

Antwort

0

Die Verwendung von Direct2D macht den Job wie vorgesehen (100% undurchsichtig), sobald ich es mit GDI (CreateDCRenderTarget oder ID2D1GdiInteropRenderTarget) mische, kommt die ganze Transparenz-Sache wieder auf. So viel zu "Direct2D und GDI Interoperabilität" Rate mal, dass es Zeit ist, den Legacy-GDI-Code auf Direct2D zu portieren ....

+0

zw. Ich habe versucht jede Kombination des pixelFormat (DXGI_FORMAT & D2D1_ALPHA_MODE) die ich in der Dokumentation finden konnte und es änderte das Verhalten nicht, solange GDI involviert war. Wenn also niemand eine Lösung für GDI findet, scheint der Direct2D Ansatz das zu sein nur "antworten" – shrln

Verwandte Themen