Seite 1 von 1

hDC behind Window

Verfasst: 13.09.2012 12:49
von Lambda
Hallo zusammen,

ich möchte für einen eigenen Fensterrahmen einige Manipulationen des Hintergrunds in Echtzeit durchführen. Allerdings muss für jeden Zeichnenschritt der unberührte Hintergrund verwendet werden.

Ist es möglich den Bereich eines Fenster (hinter dem Fenster) zu "scannen"? Bei MSDN fand ich lediglich eine DesktopPaint Funktion die den Hintergrund/Pattern des Wallpapers zeichnen kann, allerdings nicht alle Fenster/Desktopsymbole dazwischen.

Re: hDC behind Window

Verfasst: 15.09.2012 18:36
von Lambda
Stelle ich denn so anspruchsvolle Fragen? ^^ Im Prinzip möchte ich z.B das was die dwmapi ermöglicht selbst nachstellen, damit es auf jedem System gleich dargestellt wird.

Re: hDC behind Window

Verfasst: 15.09.2012 19:30
von sibru

Code: Alles auswählen

;Modul      DesktopOutput Version 1.10 vom 08.12.2008
#PB_Vers  = "4.20"
;
;Funktion:  ermöglicht Zeichnen direkt auf´m Desktop
;
;Aufruf:    Hdc = DesktopOutput()
;           StartDrawing(Hdc)
;           
;
;#jaPBeExt exit

Global DesktopOutput_Memory = AllocateMemory(1024)
Procedure.l DesktopOutput()
  PokeL(DesktopOutput_Memory, 1)
  ProcedureReturn DesktopOutput_Memory
EndProcedure
Wenns nicht hinhaut (ich glaub´ seit PB 4.4 klappt´s nicht mehr so recht...), versuch´s mal damit:

Code: Alles auswählen

hdcDesktop = GetDC_(GetDesktopWindow_())
for x = Win_x1 to Win_x9 ;zukünftige Fenster-Spalten
   for y = 1 to Win_y1 to Win_y9 ;zukünftige Fenster-Zeilen
     RGB(x,y) = getPixel_(hdcDesktop, x, y) ;Pixel-Farbe holen und speichern (vielleicht nicht gearde in ´nem Array... nur zur Erklärung)
  next
next
ReleaseDC_(0,hdcDesktop)
Viel Glück....
SiBru

Re: hDC behind Window

Verfasst: 15.09.2012 19:36
von Lambda
Das geht so leider nicht. Man könnte theoretisch mit dem DC und BitBlt die Region des Fenster abkopieren, allerdings wäre die Ausgabe ein Screenshot des Fensters und nicht von dem was sich dahinter befindet.