VB (VB.NET) Direkt auf bildschirm zeichnen. (Animation) - Hilfe

NeoGriever

Well-known member
ID: 348575
L
24 Juni 2008
902
61
Hi

Ich verzweifel noch. Google, SelfHTML und VBArchiv haben mir bisher keine lösung geliefert.

Was ich möchte:
Elemente DIREKT auf den Bildschirm zeichnen.

Was ich NICHT möchte:
DirectDraw nutzen, da dies kein Desktop im Hintergrund erlaubt.
GetDC, ReleaseDC und Graphics (in verbindung), da dies keine "Zurücksetzen"-Funktion hat, soweit mir Google das sagt.

Kennt jemand eine Möglichkeit, eine Grafik auf den Bildschirm zu zeichnen, ohne die Desktop-Funktion zu beeinträchtigen (FormBorderStyle.None und Vollbild funktioniert z. b. unter Win7 nicht). Dabei möchte ich die gezeichneten Elemente auch wieder "löschen" können und diese dann so "animieren". (Es soll ein Tamagotchi-Clone werden, welcher jedoch live auf dem Bildschirm rumspringt.)

Falls jemand eine c++, c, basic oder sonstwas dll für mich erstellen kann, der ich z. b. eine grafik übergeben kann, der diese zeichnet und ich mit einer weiteren funktion den desktop wieder zurücksetzen kann. (Region Reset z. b.)

Ich habe mit DirectDraw bereits versucht, das Problem zu lösen. Aber das funktioniert nicht, da ich dafür die Auflösung ändern lassen muss (auch wenns auf die bereits eingestellte auflösung ist) und der bildschirm einfarbig gefüllt wird.

Ich hoffe, da kennt jemand ne Lösung und ich habe mich hier nicht unnötig kompliziert ausgedrückt.

MFG
NeoGriever
 
DirectDraw geht auch ohne Vollbild. (Sicher auch ohne Füllung, das hab ich aber nie gemacht; ich hatte damals Spieleprogrammierung mit Vollbild, wahlweise Fenster gemacht).

Seit Windows 7 hab ich nichts mehr unter Windows programmiert, aber grundsätzlich müsste es doch klappen, ganz normal ein Fenster zu erstellen, dass keinen Rahmen hat und keinen Hintergrund-Brush und das auf WS_EX_TOPMOST zu stellen. Wenn du da dann reinmalst, hast du scheinbar den ganzen Desktop.

Pass aber auf: Dort wo das Fenster is, kannst du nicht "durch-messagen" (außer, du baust das irgendwie sehr komplex nach). Klickt also einer z.B. in das Fenster, weil da der Browser im Hintergrund durchschimmert, so trifft er dein Fenster und nicht den Browser.
Wie man also ein nicht-eckiges Fenster sinnvoll hinkriegt, weiß ich ned. Ich würde da dann den komplexen Weg wählen: Transparenz-Treffer prüfen, Falls im Transparentbereich -> Nachricht abfangen, gucken, wer unter mir liegt, Nachricht weitersenden, als wär nix gewesen.

Vermutlich bietet sich deshalb ein kleines Fenster an, wo deine Grafik reinpasst, die sich zur Not verschiebt, falls das Ding z.B. über den Desktop rennen will.

edit:
Als Alternative den DC des "Bildschirms" (ich glaube, das war der Aufruf mit NULL) geben lassen. Natürlich gibt es kein "Zurücksetzen" - immer diese VB-Leute :ugly: Das heißt aber nicht, dass es damit nicht geht. Du musst dir merken, was du kaputt machst, dass du es selber zurücksetzen kannst, wenn du fertig bist.
 
Hm.

Wie man Messages "weiterleitet" ist mir absolut unbekannt. Haste da beispielcode?

Unter Win7 sind viele Sachen, die GEGEN Programmierer sind. Ich habe mal unter Win7 versucht, mit SharpDevelop was zu programmieren. Nach 2 Stunden Systemeinstellungs-Gefummel habe ich es aufgegeben.

Also könntest du mir vielleicht Beispielcode (C# oder VB ist dabei egal) bieten?