2016-04-27 8 views
0

Ich bin Bildschirm erfassen Anwendungsfenster von ihrem Fenster Handle (HWND) und bekomme ihren Gerätekontext mit GetWindowDC, die ich verwenden kann, um das gesamte Fenster, Top-Level-Menü und Bildlaufleisten erfassen.Wie erhält man den Gerätekontext für Fenster, Untermenüs und Kontextmenüs?

HDC hdcWindow = GetWindowDC(hwnd); 
HDC hdcMemDC = CreateCompatibleDC(hdcWindow); // or hdcScreen 

Wenn ich ein Untermenü z. Das Menü Datei in der oberen linken Ecke von Editor, dieses Menü wird nicht erfasst. Es scheint nicht im Gerätekontext enthalten zu sein. Gibt es eine Möglichkeit, den Gerätekontext für alles mit dem Anwendungsfenster zu bekommen?

+1

Sie müssten die Anzeige DC (GetDC (NULL)) dann BitBlt das Fenster Rechteck –

+0

@AlexK. Technisch kann sich das Popup-Menü außerhalb des Fensterrechtecks ​​erstrecken ... –

+0

Hallo Alex, das klappt ganz gut, danke. – Anton

Antwort

0

Die von GDI präsentierte Displayabstraktion ist sich der Magie der Desktopkomposition nicht bewusst - ein Fenster DC stellt den Bereich eines Fensters auf dem Bildschirm dar und wenn das Fenster nicht angezeigt oder von anderen Fenstern verdeckt wird Bereich ist abgeschnitten und existiert nicht - Sie können nicht blit es mit dem Fenster DC, und wenn Sie es lesen, werden Sie wahrscheinlich Schwärze bekommen.

Als solche, um einen Bereich des Bildschirms, der den Inhalt aus mehreren Fenstern enthält zu erfassen - Sie müssten einen Bildschirm statt Fenster, DC verwenden.

+0

Wie behandelt diese Antwort das in der Frage dargestellte Problem? – IInspectable