mikrocontroller.net

Forum: PC-Programmierung C++: Messwerte in Fenster anzeigen


Autor: Paul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich suche nach einer Lösung Werte in einem Windows Fenster anzuzeigen.
Bin neu was Windows Programmierung an geht und komme nach Stunden 
googlen und rumprobieren zu einer Lösung.

Ich habe Messwerte, welche über eine COM-Schnittstelle eingelesen 
werden. Zurzeit geben ich diese über eine Konsole aus, was sehr unschön 
ist und würde gerne eine Windows WIN32 Applikation (C++) schreiben 
welche die Werte in einem Fenster anzeigt.

Habe über Visual Studio 2015 bereits ein WIN32 Application erstellt 
welche ein Hauptfenster und einen Dialog anzeigt aber ich weiß nicht wie 
ich dort ein Fenster mit Messwerten füllen kann.

Gruß Paul

Autor: Dirk B. (dirkb2)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Möchtest du eine Tabelle und/oder eine Grafik haben?

Autor: Peter II (Gast)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
Paul schrieb:
> Habe über Visual Studio 2015 bereits ein WIN32 Application erstellt
> welche ein Hauptfenster und einen Dialog anzeigt aber ich weiß nicht wie
> ich dort ein Fenster mit Messwerten füllen kann.

mit was hast du das gemacht, Windows Forms ist doch beim VS2015 nicht 
mehr dabei?

Wenn du flexibel bist, ist das schnelle es mit C# zu machen. Bietet 
alles für eine GUI und die Seriellen Schnittstelle an.

Autor: Sven B. (scummos)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Ich würde QtCharts nehmen.

Autor: Paul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hab keine Erfahrung mit C#, aber wenn das der einfachste Weg ist werde 
ich mich mal in C# einarbeiten.

Windows Forms gibt es bei Visual Studio 2015 noch für C# Projekte.

Dirk B. schrieb:
> Möchtest du eine Tabelle und/oder eine Grafik haben?

Eine einfache Tabelle würde vollkommen ausreichen.
Würde die Daten wohl nicht direkt aus der COM-Schnittstelle auslesen, 
sondern aus der Registry lesen aber das sollte unter C# auch kein 
Beinbruch sein.

Autor: Rolf Magnus (rmagnus)
Datum:

Bewertung
2 lesenswert
nicht lesenswert
Paul schrieb:
> Eine einfache Tabelle würde vollkommen ausreichen.
> Würde die Daten wohl nicht direkt aus der COM-Schnittstelle auslesen,
> sondern aus der Registry lesen aber das sollte unter C# auch kein
> Beinbruch sein.

Du speicherst Messdaten in der Registry!?

Autor: Peter II (Gast)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
Paul schrieb:
> Hab keine Erfahrung mit C#, aber wenn das der einfachste Weg ist werde
> ich mich mal in C# einarbeiten.
>
> Windows Forms gibt es bei Visual Studio 2015 noch für C# Projekte.

Wie hast du denn bis jetzt dein Hauptfenster und den Dialog erzeugt?

Autor: Sheeva Plug (sheevaplug)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Paul schrieb:
> Hab keine Erfahrung mit C#, aber wenn das der einfachste Weg ist werde
> ich mich mal in C# einarbeiten.

Ach, der Peter mal wieder: jedes Problem erschlägt er mit C#, und rührt 
hier immer wieder gerne die Werbetrommel für das proprietäre Zeug. 
Leider vergißt er dabei häufig, daß manche eine Programmiersprache nicht 
zum Selbstzweck lernen und benutzen, sondern, um damit schnell und 
effizient ihre Probleme zu lösen. Naja, Peter kann halt nur C#, und für 
einen, der nur einen Hammer hat, sieht jedes Problem wie ein Nagel aus.

Denn, mal ehrlich -- nur um ein paar Meßwerte in einem Fenster 
anzuzeigen, gleich eine Programmiersprache lernen? Obendrein eine 
proprietäre, mit der man sich in die Einsperrung eines Herstellers und 
seiner Plattform begibt? Obwohl man bereits eine (mindestens) 
gleichwertige, plattformunabhängige und äußerst leistungsfähige 
Programmiersprache wie C++ beherrscht? Das ist nicht einmal mit Kanonen 
auf Spatzen geschossen, sondern mit strategischen Kernwaffen auf 
Pantoffeltierchen.

Wenn Du schon eine neue Sprache für so etwas lernen willst, warum nicht 
eine moderne Skriptsprache wie Python? Damit ist das Anzeigen von 
Meßdaten aus der seriellen Schnettstille eine Sache von wenigen Zeilen, 
und solange Du keine Millionen Meßwerte auf einmal anzeigen willst, ist 
das zweifellos auch mehr schnell genug.

Aber das, was Du vorhast, das geht natürlich auch in C++, ebenso einfach 
und mit einem GUI-Framework wie Qt, GTK oder wxWidgets sogar vollkommen 
ohne irgendwelche Abhängigkeiten und Einsperrungen durch einen 
Hersteller und seine Plattform. Das ist spätestens dann von Vorteil, 
wenn Du Dein Programm irgendwann mal auf einem Raspberry Pi benutzen 
oder vielleicht einmal auf MacOS oder Linux wechseln willst.

> Würde die Daten wohl nicht direkt aus der COM-Schnittstelle auslesen,
> sondern aus der Registry lesen aber das sollte unter C# auch kein
> Beinbruch sein.

Du liest Deine Meßdaten aus der Registry? Wie kommen die denn da hin?

Autor: Paul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Messwerte sind Werte die von einem Treiber in die Registry geladen 
werden.

Habe mal mit einem C# Projekt begonnen. Mein Problem ist eigentlich nur 
noch wie ich es erreiche das
private void Form1_Load(object sender, EventArgs e) kontinuierlich 
ausgeführt wird so das der aktuelle Wert immer angezeigt wird.
Im Moment wird es vermutlich nur einmal beim Laden aufgerufen.
Ich möchte keinen Aktualisierungsbuttondas soll automatisch geschehen.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

using Microsoft.Win32;

namespace BatteryDisplayApp
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {

        }

        private void Form1_Load(object sender, EventArgs e)
        {
                object X = Registry.GetValue("HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Enum\\ROOT\\BATTERY\\0000\\Device Parameters\\BatteryDriver", "Voltage", 0);
                if(X != null)
                { 
                    this.textBox1.Text = X.ToString();
                }
           
        }
    }
}


Autor: Peter II (Gast)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Sheeva P. schrieb:
> Ach, der Peter mal wieder: jedes Problem erschlägt er mit C#, und rührt
> hier immer wieder gerne die Werbetrommel für das proprietäre Zeug.

Er wollte eine einfach GUI für Windows - das ist C# eine einfache 
Lösung. Die auf jeden Windows einfach läuft. im Gegensatz zu Python.

Paul schrieb:
> Habe mal mit einem C# Projekt begonnen. Mein Problem ist eigentlich nur
> noch wie ich es erreiche das
> private void Form1_Load(object sender, EventArgs e) kontinuierlich
> ausgeführt wird so das der aktuelle Wert immer angezeigt wird.

das ist der falsche weg. Nimmer einen Timer dieser Ruft dann regelmäßig 
eine Funktion auf.

Etwas besser würde ich es noch mit einen Backgroundworker (Thread) 
gehen, ist aber etwas schwerer.

Autor: Sebastian E. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Für ein einfaches regelmäßiges Auslesen der Registry sollte ein Timer 
reichen. Den findest du als Komponente in der Toolbox-Leiste bei deb 
anderen Steuerelementen.

Für alles was länger braucht solltest du eine. BackgroundWorker nehmen, 
der dann vom Timer regelmäßig gestartet wird. Damit würde diw Arbeit auf 
einen HintergrundThread ausgelagert und die GUI bleibt bedienbar.

Autor: Paul (Gast)
Datum:

Bewertung
2 lesenswert
nicht lesenswert
Anwendung läuft jetzt und ging super fix mit C#.

Aktuallisiere den Wert jetzt mit einem Timer das reicht für meine zwecke 
vollkommen aus.

Autor: nicht"Gast" (Gast)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Moin,

sry für OT

aber lasst micht mal zusammenfassen.

Paul schrieb:
> Hab keine Erfahrung mit C#, aber wenn das der einfachste Weg ist
> werde
> ich mich mal in C# einarbeiten.

das war um 7:20

Paul schrieb:
> Anwendung läuft jetzt und ging super fix mit C#.

und das um 10:18

Wenn man mal daran denkt, dass das die ersten Gehversuche in C# waren 
ist und zwischendrin eine Frage noch im gestellt wurde ist das eine echt 
kurze Zeit.
Das Selbe in Python hätte warscheinlich deutlich länger gedauert, weil 
die Sprache sich schon in den Grundzügen deutlich unterscheidet.


Leider werde Hater wie Sheeva Plug das nicht wirklich zur Kenntnis 
nehmen.

Grüße

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Paul schrieb:
> Die Messwerte sind Werte die von einem Treiber in die Registry geladen
> werden.

Ist das dieses merkwürdige Ding mit dem Usermode-Treiber von letzter 
Woche?

Autor: Thomas (Gast)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
Hallo Zusammen,


noch einfacher und in rund 30 Zeilen Code geht alles in PureBasic.

Null Runtime  kurzes Programm und Sehr schnell.

www.purebasic.de

Gruß Thomas

Autor: nicht"Gast" (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Thomas schrieb:
> noch einfacher und in rund 30 Zeilen Code geht alles in PureBasic.


Paul schrieb:
> object X =
> Registry.GetValue("HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Enum\\ 
ROOT\\BATTERY\\0000\\Device
> Parameters\\BatteryDriver", "Voltage", 0);
>                 if(X != null)
>                 {
>                     this.textBox1.Text = X.ToString();
>                 }


Das ist der code, den Paul selber schreiben musste^^. Mit deinen 
30Zeilen bist du schon hinten dran :)

Autor: Sheeva Plug (sheevaplug)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
Peter II schrieb:
> Sheeva P. schrieb:
>> Ach, der Peter mal wieder: jedes Problem erschlägt er mit C#, und rührt
>> hier immer wieder gerne die Werbetrommel für das proprietäre Zeug.
>
> Er wollte eine einfach GUI für Windows - das ist C# eine einfache
> Lösung.

Genau wie mit C++, Python, Lua, Ruby, Perl, und so ziemlich jeder 
anderen Programmiersprache auch.

> Die auf jeden Windows einfach läuft. im Gegensatz zu Python.

Python und alle anderen Genannten laufen auch auf jedem Windows.

> Paul schrieb:
>> [...]
>
> das ist der falsche weg. Nimmer einen Timer dieser Ruft dann regelmäßig
> eine Funktion auf.
>
> Etwas besser würde ich es noch mit einen Backgroundworker (Thread)
> gehen, ist aber etwas schwerer.

...wohl doch nicht so einfach wie zuerst behauptet...

Autor: Peter II (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sheeva P. schrieb:
> Genau wie mit C++, Python, Lua, Ruby, Perl, und so ziemlich jeder
> anderen Programmiersprache auch.

scheinbar nicht, sonst hätte er es ja in C++ auch so schnell 
hinbekommen.

und Python, Lua, Ruby, Perl finde ich auf meine Windows PC nicht. Seint 
also nicht üblich zu sein, im Gegensatz zu .net

> ...wohl doch nicht so einfach wie zuerst behauptet...
es gibt immer einfach und komplexe Lösungen. Hier war scheinbar C# eine 
gute Lösung, es hat schnell zum ziel geführt auch wenn du es nicht wahr 
haben willst.

Autor: Sheeva Plug (sheevaplug)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
nicht"Gast" schrieb:
> das war um 7:20
>
> Paul schrieb:
>> Anwendung läuft jetzt und ging super fix mit C#.
>
> und das um 10:18
>
> Wenn man mal daran denkt, dass das die ersten Gehversuche in C# waren
> ist und zwischendrin eine Frage noch im gestellt wurde ist das eine echt
> kurze Zeit.

Ach, das kann man sich ziemlich schnell aus dem Internet 
zusammenkopieren. Die Frage von 09:06 zeigt ja, daß er es nicht wirklich 
verstanden hat.

> Das Selbe in Python hätte warscheinlich deutlich länger gedauert, weil
> die Sprache sich schon in den Grundzügen deutlich unterscheidet.

Du kennst Python nicht, oder?

> Leider werde Hater wie Sheeva Plug das nicht wirklich zur Kenntnis
> nehmen.

"Hater", wie süß. Haste's nicht noch ein bisschen größer? Komm, da geht 
doch bestimmt noch was. ;-) Nee, im Ernst: mir geht nur dieses ständige 
Fänboi-Gesülze vom Peter auf den Keks, der bei jedem Problem mit seinem 
hüperdüper C#-Zeug ankommt, auch wenn eigentlich nach etwas ganz anderem 
gefragt worden war. Hammer, Nagel halt.

Autor: Dumdi Dum (dumdidum)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sheeva P. schrieb:
> hüperdüper C#-Zeug ankommt, auch wenn eigentlich nach etwas ganz anderem
> gefragt worden war. H

Wobei in diesem Fall das ja eigentlich ganz passend war. Visual Studio 
war schon funktionsbereit und das Microsoft forms dings builder ist ja 
eigentlich ganz ok, geht halt nur mit c#.

Autor: nicht"Gast" (Gast)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Sheeva P. schrieb:
>> Das Selbe in Python hätte warscheinlich deutlich länger gedauert, weil
>> die Sprache sich schon in den Grundzügen deutlich unterscheidet.
>
> Du kennst Python nicht, oder?

gewagte These. Warum denkst du, dass ich geschrieben habe, was ich 
geschrieben habe.

Python ist von der Syntax und der Art, wie man Sachen umsetzt deutlich 
weiter weg von C++ als C#.

Wenn du von C++ kommst, kannst du nur grobe Programmierkonzepte mit 
benutzen. Schon eine einfache For Schleife sieht in Python deutlich 
anders aus.

Wenn ich schon C++ etwas kann, und schnell was machen möchte, dann nehme 
ich nun mal eine Sprache, die C++ als Vorbild hat und nicht alles anders 
macht.

Dazu kommt noch, das der TE schon VS installiert hat. Da bekommt er C# 
gleich mit dazu. Er muss sich nicht erst Python/QT/Basic irgend wo 
herunter laden.

Autor: nicht"Gast" (Gast)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Sheeva P. schrieb:
> "Hater", wie süß. Haste's nicht noch ein bisschen größer? Komm, da geht
> doch bestimmt noch was. ;-) Nee, im Ernst: mir geht nur dieses ständige
> Fänboi-Gesülze vom Peter auf den Keks, der bei jedem Problem mit seinem
> hüperdüper C#-Zeug ankommt, auch wenn eigentlich nach etwas ganz anderem
> gefragt worden war. Hammer, Nagel halt.

Lies mal deinen Text selber durch. Du bist hier der einzige, der 
durchgedreht ist.

In dem Fall war das schon ganz gut. Der TE hatte eine Schraube und hat 
gefragt, wie er sie mit dem Hammer reinbekommt. Ihm den Schraubendreher 
zu zeigen war schon nicht schlecht.

BTW nicht alles, was hinkt ist ein Vergleich.

Autor: H-G Sch (haenschen)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Etwas ähnliches habe ich früher mit OpenGL und C++ (DEVC++) gemacht um 
mein Bastel-DSO über den Druckerport am PC anzeigen zu lassen.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.