"Programminterner Screenshot(?)"
-
Hi,
gibt es eine Funktion mit der man einen Rechteckigen Bereich innerhalb des Fensters speichern kann, um diesen dann an eine andere Stelle zu zeichnen?
Irgendwoher kenn ich das!? Gibts sowas auch bei der WinAPI?
Thx
-
GetClientRect();
dann den bereich darin nehmen den de haben willst... dann da nen pic von machen und fertig -.-
-
(D)Evil schrieb:
GetClientRect();
Dann hab ich ja nur die Grösse des Fensters als Rechteck.
(D)Evil schrieb:
dann den bereich darin nehmen den de haben willst.
Okaayy...
(D)Evil schrieb:
dann da nen pic von machen und fertig -.-
Und was heisst das?
Ist damit gemeint, ein Bild in eine seperate Bilddatei zu speichern und dann zu laden, also einen richtigen Screenshot machen?Ich dachte da eher an eine Funktion wie:
BereichSpeichern(50, 50, 100, 100);Und es dann einfach zu verwenden wie:
GespeichertenBereichZeichnen(75, 75);Ich meine so in der Art ging das mit Turbo Pascal, oder so!?
Thx
-
kann man natürlich machen, ist aber wie alles bei windows komplizierter als man denkt.
zuerst brauchst du ein bitmap-objekt von der größe des bildschirms, das zudem auch noch kompatibel zum bildschirm ist (gleiche farbtiefe etc). das kriegst du mit CreateCompatibleBitmap(). dann brauchst du noch einen sogenannten kompatiblen device-context. du kannst unter windows nämlich nicht direkt in bitmaps zeichnen sondern nur in dc's. den kompatiblen dc bekommst du mit CreateCompatibleDC(dc). in den kompatiblen dc selektierst du dann mit SelectObject() die bitmap rein. jetzt kannst du mit BitBlt() eine rasteroperation zwischen dem dc des fensters und dem kompatiblen dc machen.
HBITMAP Bmp; HDC Cdc; INT W,H VOID Init (HDC dc) // dc des fensters { // dc und bmp erzeugen, die zu dem pixelformat des bildschirms // kompatibel sind, auf dem sich das fenster befindet Bmp=CreateCompatibleBitmap( dc, GetSystemMetrics(SM_CX_SCREEN), // breite des desktop-bildschirms GetSystemMetrics(SM_CY_SCREEN)); // höhe des desktop-bildschirms Cdc=CreateCompatibleDC(dc); // damit man die bitmap auch über den kompatiblen dc // bearbeiten kann, muß die bitmap in den dc selektiert werden SelectObject(Cdc,Bmp); } VOID BereichSpeichern (HDC dc, INT x, INT y, INT w, INT h) { W=w; H=h; BitBlt(cdc,0,0,w,h,dc,x,y,SRCCOPY); } VOID GespeichertenBereichZeichnen (HDC dc, INT x, INT y) { BitBlt(dc,x,y,W,H,dc,0,0,SRCCOPY); }
-
geh auf www.codeproject.com und suche mal nach Capture Screen
-
Eine Forensuche macht manchma Sinn:
06.02.2006:
http://www.c-plusplus.net/forum/viewtopic-var-t-is-135906-and-highlight-is-screenshot.html
-
Hi,
ja Konfusius, das meinte ich, aber...
ich hätte da noch ne Frage, und zwar wenn ich es so mache, funktioniert es:
BitBlt(cdc, 0,0, 1000,100, hdc, 0,0, SRCCOPY); BitBlt(hdc, 0,100, 1000,100, hdc, 0,0, SRCCOPY);Wenn ich es aber so mache dann ist es da, wo er zeichnen soll, einfach nur schwarz:
BitBlt(cdc, 0,0, 320,600, hdc, 350,0, SRCCOPY); BitBlt(hdc, 350,20, 320,600, hdc, 0,0, SRCCOPY);Was ist hier falsch?
Und hierbei setzt er es zwar ein Stückchen runter, aber auch ein großes Stück nach rechts, obwohl die x-Koordiante zum speichern und zeichnen doch die selbe ist:
BitBlt(cdc, 0,0, 670,580, hdc, 350,0, SRCCOPY); BitBlt(hdc, 350,20, 670,580, hdc, 0,0, SRCCOPY);Also, wenn die erste funktioniert, versteh ich nicht wieso die anderen es nicht tun.

Thx