Hallo…
Ich habe folgendes Problem:
Ich habe eine SDI-Anwendung.
In dem Fenster werden diverse Dinge ausgegeben.
Ich möchte nun aber einen Teilbereich
(z.B. von der linken oberen Ecke bis Punkt 800,600)
davon haben.
Bzw. was ich brauche, ist ein HWND auf genau diesen
Teilbereich des Fensters…
Ein Handle-Zeiger kann immer nur auf das Fensterobjekt als ganzes den Zugriff bieten.
Um nur auf einen rechteckigen Teilbereich zu zeichnen oder diesen in andere Speichervariablen zu kopieren, dienen Funktionen wie BitBlt und ähnliche, wo diese Maße jeweils einzugeben sind. Oft wird hierzu ein kompatibler DC verwendet, der mit Funktionen wie CreateCompatibleDC erzeugt werden kann und der dann als interner Puffer verwendet werden kann, so auch in fester Verbindung mit einem CBitmap-Objekt.
Um tatsächlich einen bearbeitbaren Speicherbereich zu schaffen, sind dann oft die relativ komplizierten Funktionen GetDIBits und SetDIBits von großer Bedeutung, um aus DC- oder Bitmap-Objekten die Daten in einen selbst allokierten lockbaren Speicherbereich zu bekommen, wo dann auch Verarbeitungen vorgenommen werden können. Um dies alles zu verstehen, kommt man fast nicht darum, sich mit Musterbeispielen aus den MSDN-Paketen zu beschäftigen.
Wie mach ich sowas?
-Eventuell den HWND aufs ganze Fenster nehmen, und irgendwie
verändern? Wenn das geht, wie?
-Oder muß ich da ein neues Fenster anlegen?
-Oder muß ich vielleicht einen devicecontext anlegen und
mirt ein Handle auf den holen?
Wenn nur einzele Pixel zu verarbeiten sind oder darauf mit Standardfunktionen geschrieben werden soll, genügt es vielleicht, sich einen zweiten kompatiblen DC anzulegen. Wenn mit hoher Geschwindigkeit komplexere Bildverarbeitungen erfolgen sollen, muss über GetDIBits eine Kopie des Datenspeichers angelegt werden, da die üblichen Manipulationsfunktionen für DCs sonst nicht effizient arbeiten, wahrscheinlich weil dann wegen jedem Pixel intern das ganze Bild gelockt und wieder freigegeben wird.
Gerald