GDI+ zum Zeichnen auf dem Desktop

    • VB.NET

    Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von thefiloe.

      GDI+ zum Zeichnen auf dem Desktop

      Moin,

      In diesem Post erkläre ich, wie man mit GDI+ auf jeden beliebigen Fensterhandle zeichnen kann. Dies ist zum Beispiel nötig für Bildschirmschoner.

      Zunächst erstellen wir ein neues Projekt. Ich habe hier den Typ "Windows-Forms-Applikation" gewählt. Dann ziehen wir einen Button ins Fenster und doppelklicken auf selbigen. Nachdem sich die Codeansicht geöffnet hat, brauchen wir den Handle auf den wir zeichnen wollen. In unserem Fall ist dieser 0 (Null). Wenn wir darauf zeichnen, übermalen wir alles andere. Wir können natürlich auch jeden anderen Handle nehmen.

      VB.NET-Quellcode

      1. Dim Target As IntPtr = CType(0, IntPtr) ' Besser wäre IntPtr.Zero, aber so sieht man, wie man den Handle ändern kann

      Jetzt brauchen wir nur noch ein Graphics-Objekt:

      VB.NET-Quellcode

      1. Dim g As Graphics = Graphics.FromHwnd(Target)

      Das war es schon! Jetzt können wir mit den ganz normalen GDI+-Funktionen zeichnen. Der einzige Nachteil: Wir haben hier kein Paint-Event, das heißt, sobald zum Beispiel ein Fenster über das Gezeichnete gezogen wird, wird es überzeichnet und verschwindet. Ich verweise an dieser Stelle mal hierdrauf: [VB 2008] [Tutorial] GDI+

      Im Anhang befindet sich ein Testprojekt, das zeigt, wie man das einsetzen kann.
      Dateien
      Mit freundlichen Grüßen,
      Thunderbolt

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „timmi31061“ ()

      timmi31061 schrieb:

      Jetzt brauchen wir nur noch ein Graphics-Objekt:
      Geht auch in einem Einzeiler:

      VB.NET-Quellcode

      1. Dim g As Graphics = Graphics.FromHwnd(IntPtr.Zero)
      Und ein Demo-Programm für dieses Graphics-Objekt ist:

      VB.NET-Quellcode

      1. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
      2. Dim g As Graphics = Graphics.FromHwnd(IntPtr.Zero)
      3. g.Clear(Color.Coral)
      4. End Sub
      Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
      Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
      Ein guter .NET-Snippetkonverter (der ist verfügbar).
      Programmierfragen über PN / Konversation werden ignoriert!
      a) Ist das Desktophandle nicht zwingend 0x00000000 sondern kann auch etwas anderes sein. Deshalb gibt es diese Funktion: msdn.microsoft.com/en-us/libra…op/ms633504(v=vs.85).aspx
      b) Ist fraglich ob das wirklich im richtigen Unterforum ist. Wenn ich bedenke, dass ich schon wesentlich längere, nützlichere, saubere und besser erklärte Dinge hier rein gestellt habe, welche mit dem Vermerk, dass diese für dieses Unterforum unangemessen seien, abgelehnt wurden, dann frage ich mich hier schon, weshalb sowas nicht zumindest in "Sourcecode austausch" verschoben wurde. Ansonsten fehlen zumindest wichtige Aspekte wie z.B. das von Artentus gepostete "Paint-Event".


      Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.