Screenshot von MDI-Fenster
-
Hallo zusammen,
das ist mein erstes Post in diesem Forum, da mir sonst für meine Probleme meist schon die Anworten auf Frage anderer User geholfen haben. Diesmal hab ich leider nichts gefunden, vielleicht aber auch weil ich nicht genau weiss, wie ich folgendes Problem lösen soll.
Ich möchte so eine Art "Screenshot" von einem child-window in einer MDI Anwendung machen. Dieses soll dazu dienen: Wenn das entsprechende child-window in der MDI, minimiert wird dann soll wenn der Benutzer, wenn er über das minimiert Fenster hovered, als so einer Art "preview" einen 200x200 Pixel großen Screenshot des Fensters sehen können. Danach kann er dann entscheiden, ob er dieses Fenster vergrößern/maximieren möchte.
Ich weiss nicht genau, wie ich dass machen soll. Man müsste irgendwie, die Methoden zum Zeichnen des Fensters (also z.B. OnDraw) so überschreiben, dass man sich einen Screenshot erstellen lassen kann, in dem man die Pixel, welche im Fenster gezeichnet werden, in einen Buffer umleitet und so (ohne Funktionalität z.B. von Buttons), ein genaues Abbild (Screenshot) des Fensters zu einem bestimmten Zeitpunkt hat.
Diesen Buffer könnte man dann ja als Rechteck über dem minimiert Fenster ausgeben. Dadurch weiss der Benutzer dann, was in diesem Fenster dargestellt wird, ohne es zu vergrößern.Ich bin mir nicht sicher ob das so überhaupt möglich ist, aber falls jemand eine Idee ... her damit

Grüssle
sfs
-
Genauso würd ichs machen (hab ich auch schon
). Funktioniert gut, wahrscheinlich hilfts dir wenn Du mal nach MemoryDC suchst, da gibts einiges zu beachten. Ansonsten fällt mir noch BitBlt und StretchBlt ein, die brauchst Du ganz sicher.
-
Der folgende Code kopiert ein bestimmtes rect des aktuellen Fensters in eine eigene Bitmap.
CClientDC dcScrn(this); CDC memDc; if(!memDc.CreateCompatibleDC(&dcScrn)) return FALSE; CBitmap bitmap; if( !bitmap.CreateCompatibleBitmap(&dcScrn,rect.Width(), rect.Height())) return FALSE; CBitmap* pOldBitmap = memDc.SelectObject(&bitmap); memDc.BitBlt(0,0,rect.Width(),rect.Height(),&dcScrn,rect.left , rect.top ,SRCCOPY ); memDc.SelectObject(pOldBitmap);
-
hi zusammen,
danke für eure Hilfe. Ich werd dass gleich mal ausprobieren.
Das hätte ich auch selber finden können
Grüßle