Virtuelle Fenster / Desktops?



  • Hi,

    gibt es unter der WinAPI die Möglichkeit (Versteckte oder Virtuelle) Fenster zu erstellen, die ich dann wie gewohnt per BitBlt überzeichnen und diese Bildinformationen wieder auslesen kann.

    Wichtig wäre, dass diese nicht sichtbar sind und nicht überzeichnet werden.

    Viele Grüße :xmas1:
    Ciao



  • Ich weiß nicht, ob dass das ist was du suchst, aber du kannst mit CreateCompatibleDC einen Memory-DC erstellen in den du dann zeichnen kannst und den du dann bei Bedarf in den DC deines Fensters blitten kannst (Back-Buffering)



  • Kannst auch ein verstecktes Fenster erstellen. Dazu ein normales Fenster ohne WS_VISIBLE in CreateWindow(Ex) und zur Sicherheit nochmal ShowWindow(SW_HIDE).



  • @flenders:
    das ist schon richtig, nur ist das Problem, dass ich unbedingt ein Fenster(-Handle) brauche - da eine sekundär-API ein HWND erwartet.

    @Badestrand:
    Naja, hier hab ich immernoch das Problem, dass das Fenster durch das "On-Top" liegen Fenster verdeckt ist.



  • Hmm.. Was ist denn das Problem dabei wenns verdeckt ist? Ich mein, es ist doch sowieso unsichtbar^^



  • Es wird von einem weiteren Programm gescannt und analysiert. wenn es verdeckt ist, so kann dies natürlich nicht passieren, wenn der DC gelesen wird.

    Theoretisch kann ich einfach das Fenster in einen DC Rendern mit PrintWindow() und dann den DC bearbeiten und wieder löschen.

    Nur arbeite ich mit einer API zusammen(wie bereits oben angegeben) das keinen DC erwartet oder Bitmap (womit das Problem behoben wäre), sondern ein Handle. Damit bin ich automatisch an dieses Fenster gebunden.

    Eig. könnte man ein Fenster erstellen, dass die Eigenschaft "Immer OnTop" hat und zudem vesteckt ist - und darauf zeichnen. Die Frage ist, ob der DC vom Fenster durch das HIDE-Attribute gelöscht wird, und der Hintergrund angezeigt wird.

    Evt. hat damit jemand schon Erfahrung gemacht? :xmas1:



  • Ein TopMost-Fenster kann aber auch überdeckt werden (von anderen TopMost-Fenstern).

    PS:

    Glaube Du machst es Dir zu schwer:
    1. Erstell ein Fenster mit CreateWindow(Ex)
    2. Versteck das Fenster mit ShowWindow(hWnd, SW_HIDE); oder gibs gleich das Style-Flag WS_VISIBLE NICHT an.

    Danach kannste da soviel rein malen, wie Du willst, das sollte funktionieren (Habs aber auch noch nicht ausprobiert). ... TryAndError 😉 ...



  • Für den DC ist es egal, ob das Fenster verdeckt ist! Erst später werden die ganzen DCs zusammengemischt und es wird ein fertiges Bild daraus gemacht. Mit PrintWindow kannst du natürlich den Fenster-Inhalt einfach in deinen DC ausgeben lassen, und dabei ist es, wie gesagt, absolut vollständig sowas von egal, ob das Fenster dabei von anderen verdeckt wird ⚠


Anmelden zum Antworten