Laden...

Fensterinhalt in Control anzeigen

Erstellt von JunkyXL vor 16 Jahren Letzter Beitrag vor 16 Jahren 1.592 Views
JunkyXL Themenstarter:in
1.665 Beiträge seit 2006
vor 16 Jahren
Fensterinhalt in Control anzeigen

Hallo,

ich möchte in meiner Anwendung alle geöffneten MDI's in einer Übersicht anzeigen, wie es der IE macht (Quickview, ganz links bei mindestens 2 Tabs sichtbar).
Nur die Frage wie ich an den Inhalt des Fensters komme...
Wollte erst einen Screenshot von jedem Tab machen, aber die live Ansicht gefällt mir besser.

Hat jemand eine Lösung dafür?

Gelöschter Account
vor 16 Jahren

jedes control hat ein DrwToBitmap(...) das kannst du wunderbar hierfür verwenden. vorsicht aber mit der performance.

JunkyXL Themenstarter:in
1.665 Beiträge seit 2006
vor 16 Jahren

Danke, wie ich aber sagte, möchte ich die live Ansicht. Sozusagen also per Window Handle den Inhalt irgendwo anzeigen. Geht das nicht?
In Vista gibts diese live Ansicht in der Taskleiste für die Fenster ebenfalls.

915 Beiträge seit 2006
vor 16 Jahren

Also JAck30lena hat schon den Nagel auf den kopf getroffen, die LiveAnsicht wird natürlich immer wieder aktuallisiert z.B. über einen zeitlichen Intervall.

Deswegen meinte er auch "Vorsicht" mit der Performance, denn die Zeichenroutine muss ständig geleert und neu gezeichnet werden mit DrawToBitmap das kann evtl. in die Performance gehen.

Der schwerere Weg mit selben "Erfolg" wäre folgender, du klaust dir das Vista verhallten.

Um erstmal das verhallten zu imitieren muss man erst einmal herausfinden wie man es provoziert, denn das weis ich grade nicht.

Bastle ein neues Projekt und erstelel Form1, überschreibe CreateParams, übergebe an CreateParams cp den cp.StyleEx|= WindowsStyleEx.WS_EX_APPWINDOW siehe hierzu www.pinvoke.net. Überwache mit dem Spy++ das Fenster und beobachte die Taskleiste dazu mit. Schau dir an ob die Taskleste die zeichenroutine zur verfügung stellt oder ob das Fenster selbst diese auslöst.

Wenn die Taskleiste das Zeichnen übernimmt kommst um JAck30lena (besseren) Weg nicht drum herum. Ansonsten überschreibst in deinenControl ebenso die CreateParams und fügst den StyleEx WindowsStyleEx.WS_EX_APPWINDOW an. Und schaust was passiert wenn das Control "den zustand" minimiert erhällt. Sieht dann lustig aus nen minimiertes nicht sichtbares Control das aber da ist um nen Fenster anzuzeigen, die WindowsNachricht WM_ACTIVATE müsste dafür verantwortlich sein und da diese auf den Msg.Return Intptr.Zerofür False und 1 für True reagiert hängst einfach ne Methode dazwischen die du je nachdem ob die Maus eine gewünschte Aktion ausführt auf False ( Intptr.Zero) oder True ( new Intptr(1)).

Also, denke das JAck30lena's Lösung bewieten weniger kompliziert ist und sogar zuverlässiger arbeitet.

Wie vernichtet stand Andreas unter den flammenden Augen seiner Kunden.
Ihm war's, als stünde des Schicksals dunkle Wetterwolke über seinem Haupte X(

JunkyXL Themenstarter:in
1.665 Beiträge seit 2006
vor 16 Jahren

Achso ok, dachte dass das Window Handle an ein beliebiges Control geleitet wird und somit automatisch die Ansicht besteht.

2.760 Beiträge seit 2006
vor 16 Jahren

Hallo Andreas.May ich denke das das in Vista über die Desktop Composition läuft.
http://msdn2.microsoft.com/en-us/library/aa969541(VS.85).aspx

915 Beiträge seit 2006
vor 16 Jahren

Hrm, hatte da nur mal mit dem Windows Styles etwas rumgespielt und bin zufällig drüber gestolpert. Aber was damit zusammenhängt war mir nicht so ganz klar.

Werd's einfach wenn ich Zeit habe mal austesten wie das ganze AERO Thumbnails so funktioniert, danke dir jaensen 🙂

Also, JunkyXL wirst JAck30lena's Lösung verwenden müssen sonst bekommst Probleme unter älteren Betriebssystemen als Windows Vista.

Wie vernichtet stand Andreas unter den flammenden Augen seiner Kunden.
Ihm war's, als stünde des Schicksals dunkle Wetterwolke über seinem Haupte X(

Gelöschter Account
vor 16 Jahren

was passiert, wenn aero deaktiviert bzw nciht vorhanden ist?

2.760 Beiträge seit 2006
vor 16 Jahren

Dann klappts wahrscheinlich einfach nicht 😉 Aber man könnte natürlich auch all diese Fälle abfragen (Ist Vista? Ist WDM an?) und dann entweder mit DrawToBitmap was überall funktionieren dürfte arbeiten oder eben mit WDM was dann eine höhere Performance haben sollte.