Fragensteller
Beim erstellen von console Modulen mit graphics Klassen, welche Eingabe soll ich statt Me.CreateGraphics() verwenden?

Frage
-
Guten Abend,
die Microsoft.Net Dokumentationen sind beim unterscheiden von Form Beispielen und Konsole Beispielen nicht immer 100% nachweisbar.
Um mein Forschungsziel weiter im Rahmen meiner Kräfte suchen zu können fehlen mir noch immer die genauen Übersetzungen der Klassenanwendungen um in meiner nicht gebildeten Datenbank anwenden zu können.
Ein drawstring ist in einer Konsolenanwendung implementierbar (zu ausführen eintragbar, frei übersetzt). Nur sind die Grafikeigenschaften der Konsole nicht stabil.
Ich würde gerne die GraphicBuffereigenschaften der Konsole kennen lernen. Auf der Seite
BufferedGraphics Microsoft.Net Dokumentation
ist
Me.CreateGraphics()
mein nächstes Problem, den ich kann statt dem Keyword Me nicht erkennen was the current instance in einer Konsolengrafik sein soll.
Und create graphics ist nur in einer Form Klasse möglich. Ich weiß nicht genau wo ich meine Suche fortsetzen soll.
Mit dem Beispiel
Imports System.Drawing Imports System.Reflection Module broadcastChanchicha ReadOnly ArrayCast As IntPtr = Process.GetCurrentProcess().MainWindowHandle ReadOnly ResearchPattern As Graphics = Graphics.FromHwnd(ArrayCast) 'planimetry Sub Main() Dim PinResolution As BufferedGraphics ' Retrieves the BufferedGraphicsContext for the ' current application domain. Dim appDomainGraphicsContext As BufferedGraphicsContext = BufferedGraphicsManager.Current ' Allocates a graphics buffer using the pixel format ' of the specified Graphics object. PinResolution = appDomainGraphicsContext.Allocate(*.CreateGraphics(), New Rectangle(0, 0, 400, 400)) While True Select Case Console.ReadKey(True).Key Case ConsoleKey.D Console.Write("claimed") With ResearchPattern .DrawString("Drawstring load", New Font("Consolas", 22), New SolidBrush(Color.FromArgb(162, 228, 201, 127)), 320, 320) End With Case ConsoleKey.F12 With ResearchPattern .DrawString("Drawstring invalidate", New Font("Consolas", 22), New SolidBrush(Color.FromArgb(162, 228, 201, 127)), 320, 320) End With End Select End While End Sub End Module
ist meine aktuelle Programmierumgebung auf Grund gelaufen.
Bei einer Write Anweisung mit der selben set cursor position kann ich zwischen zwei Sätzen wechseln. Die drawstring Anweisungen werden nicht ersetzt sondern überlappen sich. Ich stelle nicht die Funktionen in Frage, sondern würde gerne wissen wie ich zwischen zwei drawstring Sätzen wechseln kann und die BufferedGraphics Eigenschaften genauer kennen lernen kann.
Alle Antworten
-
Hallo Stefan,
PinResolution = appDomainGraphicsContext.Allocate(*.CreateGraphics(), New Rectangle(0, 0, 400, 400))
Versuch es mit dem Modulnamen:
Imports System.Drawing Imports System.Reflection Imports System.Diagnostics Module broadcastChanchicha Shared graphics As Graphics '... Dim prozess As Process = Process.GetCurrentProcess() broadcastChanchicha.graphics = Graphics.FromHdc(GetDC(prozess.MainWindowHandle)) PinResolution = appDomainGraphicsContext.Allocate(broadcastChanchicha.graphics, New Rectangle(0, 0, 400, 400)) '... End Module
Gruß,
Dimitar
Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.
- Bearbeitet Dimitar DenkovMicrosoft contingent staff, Administrator Freitag, 4. Dezember 2020 19:47
-
Ich verwendete mein Modul für die Konsolanwendung erstellt mit Visual Studio. Version Version 16.8.2.
Die Intelli Sense Angaben die ich anführe, Variablen in Modulen können nicht als "Shared" deklariert werden.
Ich habe den Module Namen in einer Methode angewendet.
Mit den Intelli Sense Vorschlägen
Meine Klassen sind nicht Formübergreifend. Das verstehe ich weil ich viel gelesen habe und nicht weil ich anwenden gelernt habe.
Um das nächste Ergebnis eingrenzen zu können muss ich noch immer einen Main Window Handle bilden und keinen handle to the devise context. Kann sein um die Grafik unter Kontrolle bringen zu können, dass ich den devise context nicht einfach ausklammern sollte.
Wenn ich teilweise nicht den Pfad verliere ist GetDC trotzdem zum Teil C++ und ich keine Ahnung habe wie ich diesen Schlüssel anwenden sollte.
Meine Lösung, da ich noch immer nicht auf graphische Änderungen verzichten kann, ist
Dim hwnd As IntPtr = Process.GetCurrentProcess().MainWindowHandle Dim newGraphics As Graphics = Graphics.FromHwnd(hwnd) Dim appDomainGraphicsContext As BufferedGraphicsContext = BufferedGraphicsManager.Current Dim PinResolution As BufferedGraphics = appDomainGraphicsContext.Allocate _ (Graphics.FromHwnd(ArrayCast), New Rectangle(300, 300, 300, 300))
Select Case Console.ReadKey(True).Key Case ConsoleKey.Z PinResolution.Render() PinResolution.Dispose() End Select
Bei meiner Anwendung ist ein Viereck mit der Konsolenhintergundfarbe dargestellt. Das hilft mir leider nicht weiter.