Visual Studio 2010 Hilfe
-
Hey,
danke für deine Antwort.
Ich möchte ein Programm erstellen, welches über TCP/IP in der Lage ist, Messwerte von einem anderen Rechner auszulesen.
Dem Benutzer soll eine grafische Oberfläche zur Verfügung stehen, bei der
er auswählen kann, welche Messwerte ausgelesen werden soll.
Selbstverständlich wird das Programm nicht nur aus einem Fenster bestehen.
Mit Windows Forms konnte ich ziemlich schnell eine brauchbare Oberfläche
erzeugen. Leider besteht hierbei das Problem mit der Trennung von *.h und
*.cpp. Ich habe bereits gelesen, wie es möglich ist, in der *.h nur noch
die Deklaration stehen zu lassen. Es kann aber nicht sein, dass ich jede
Funktion einzeln von Hand in die *.cpp kopieren muss und zudem noch
ein paar kleine Änderungen machen muss. Zudem scheint es Probleme beim
Zugriff auf globale Funktion zu geben. Bisher habe ich nur schlechtes
gelesen, wodurch ich nun eher zu MFC tendiere. Im Moment sitze ich
verzweifelt daran in MFC eine toolbar zu finden, mit der ich Elemente via
Drag and Drop einfügen kann. Sowas scheint es hier aber nicht zu geben :(((
lg.
Melli
-
Nimm C#. Wenn du C++ kannst und schon Ahnung von WinForms hast, sollte das für dich relativ einfach sein, dich da reinzufinden...
-
Melanie_27 schrieb:
..., wodurch ich nun eher zu MFC tendiere. Im Moment sitze
ich verzweifelt daran in MFC eine toolbar zu finden, mit der ich Elemente via
Drag and Drop einfügen kann. Sowas scheint es hier aber nicht zu geben :(((Wenn Du ein neues MFC-Projekt anlegst wird die Toolbar doch automatisch erzeugt?
Selbst bei "einfaches Dokument" im Projektstil "MFC-Standard" wird eine Toolbar
angelegt die man mit dem Resourcen-Editor ändern kann.//EDIT:
Leider ist der Resourcen-Editor speziell bei Toolbars etwas unflexibel; wenn
ausser Buttons noch andere Controls in die Toolbar sollen siehe hier:Walkthrough: Putting Controls On Toolbars
http://msdn.microsoft.com/en-us/library/bb983718.aspx
Deutlich einfacher wäre es diese Funktionalität in Dialoge zu verlagern - das wird direkt unterstützt.
-
asc schrieb:
Melanie_27 schrieb:
Ich kann leider nur C++. Meint ihr, dass es schwer ist, sich in MFC einzulesen?
Die MFC kann ich nicht empfehlen, dann würde ich wohl eher zu QT raten (selbst wenn ich es nicht so mag, aber das ist meine persönliche Meinung).
Die Empfehlung finde ich hier total deplatziert.
Einem Programmieranfänger der mal eben was für die Schule machen soll würde ich - wenn er denn schon mit Visual Studio arbeitet -- MFC *sehr* empfehlen.
Weil's schon dabei ist (d.h. er muss nicht erst 100 Stunden googeln bis er Qt installiert hat, die nötigen Linkeroptionen gemacht etc.), und vor allem weil der MFC Dialogeditor schön in Visual Studio integriert ist (wohingegen man mit Qt erst lernen muss Oberflächen "zu Fuss" zu programmieren oder wieder ein neues Tool suchen/lernen/einbinden muss).
-
hustbaer schrieb:
Einem Programmieranfänger der mal eben was für die Schule
machen soll würde ich - wenn er denn schon mit Visual Studio arbeitet -- MFC
*sehr* empfehlen. Weil's schon dabei ist ...Ob das "mal eben" geht würde ich anzweifeln ...
Für einen Programmieranfänger ist eine GUI wohl immer eine Herausforderung.
MFC würde ich empfehlen, wenn man nicht unbedingt mit der Expressversion von
VisualStudio auskommen muss und Windows die Zielplattform ist und man ausserdem
C++ verwenden möchte.
-
hustbaer schrieb:
Einem Programmieranfänger der mal eben was für die Schule machen soll würde ich - wenn er denn schon mit Visual Studio arbeitet -- MFC *sehr* empfehlen.
Ich würde wohl eher einfach C# empfehlen, da C++ für solche Sachen imo nicht wirklich gut geeignet ist, vor allem wenn man Anfänger ist. Von MFC würd ich einem Anfänger, der ja noch keinen gefestigten Programmierstil hat, schon alleine wegen des furchtbaren Vorbilds, das die MFC liefern würde, abraten...
-
hustbaer schrieb:
Einem Programmieranfänger der mal eben was für die Schule machen soll würde ich - wenn er denn schon mit Visual Studio arbeitet -- MFC *sehr* empfehlen.
Ich hatte die MFC im Studium, und sie hat bei den Großteil der Studenten Probleme bereitet. Vielleicht hat sich dies inzwischen geändert, aber empfehlen würde ich die MFC egal wie nicht. Gerade der Umgang mit dem Dialogeditor und den Ressourceneinträgen habe ich noch sehr negativ in Erinnerung.
Ich verstehe aber im Gegenzug auch nicht warum sich Dozenten an bestimmten Paradigmen fest beißen (Die Trennung Header/Source hat zwar Gründe, sollte aber dort aufgegeben werden können, wo es anders einfach nicht praktikabel ist).
-
Vielen Dank für eure vielen Antworten.
Ich würde es sehr gerne mit Visual Studio machen. Ein Windows Forms Projekt wäre perfekt. Leider schreibt mir die IDE aber alles in die header-Datei, was absolut unmöglich ist. MFC verstehe ich noch nicht wirklich. Vorallem das Entfernen von Objekten aus dem Ressourcenbereich macht mir Probleme. Einfach mal Entf geht leider nicht
Ich möchte eine grafische Oberfläche in C++, bei der ich die vielen Steuerelemente der Windows Forms verwenden kann (Choicebox, Buttons usw...), wo mir aber ein clickevent(..) nicht automatisch in die header geschrieben wird...
Liebe Grüße.
Melli
-
Vielen Dank für eure vielen Antworten. Ich würde es sehr gerne mit Visual Studio machen. Ein Windows Forms Projekt wäre perfekt. Leider schreibt mir die IDE aber alles in die header-Datei, was absolut unmöglich ist. MFC verstehe ich noch nicht wirklich. Vorallem das Entfernen von Objekten aus dem Ressourcenbereich macht mir Probleme. Einfach mal Entf geht leider nicht Ich möchte eine grafische Oberfläche in C++ , bei der ich die vielen Steuerelemente der Windows Forms verwenden kann (Choicebox, Button usw...) bei der mir aber ein onclickevent(....) nicht in die header geschrieben wird (nur der Funktionskopf). Ich bin wirklich ratlos.
Lg. Melli
-
Melanie_27 schrieb:
Ein Windows Forms Projekt wäre perfekt.
Du musst Dich entscheiden Wenn Du die Steuerelemente komfortabel mit C++
(ohne .NET und CLI) nutzen willst (Resourcen-Editor) bleibt ein MFC-Projekt
mit C++ fast alternativlos.Melanie_27 schrieb:
Ich möchte eine grafische Oberfläche in C++ , bei der ich die vielen Steuerelemente der Windows Forms verwenden kann (Choicebox, Button usw...) bei der mir aber ein onclickevent(....) nicht in die header geschrieben wird (nur der Funktionskopf). Ich bin wirklich ratlos.
Hast Du das vorgeschagene MFC-Projekt mit CFormView ausprobiert ?
Habe gerade mit VS2010 ein MFC-Projekt mit SDI und CFormView angelegt und
wie erwartet landet z.b. ::OnBnClickedButton1() in der zum View gehörenden
cpp-Datei. Im Header steht nur die Deklaration (auch wie erwartet ..)Möglicherweise hast Du da was anders gemacht ?
Hier die Einzelschritte zum nachvollziehen:
1. MFC-Anwendung (hier z.B. Name projektgui)
2. Einfaches Dokument, Projektstil: Windows Explorer, Unterstützung Dokument-/Ansichtarchitektur,
Stil + Farben: Windows 7, ohne Wechsel des visuellen Stils
3. Menü + Symbolleite verwenden, ohne Benutzerdef. Symbolleite und pers. Menüverhalten
4. Allgemeines Steuerelementemanifest, ohne ActiveX-Steuerelemente, ohne Neustartmanager
5. Den View bei den generierten Klassen auf CFormView ändern
(Den CLeftView kann man nicht ändern und wird ihn auch nicht los)
6. Fertig stellenWenn man den CLeftView nicht will kann man den natürlich löschen:
Die beiden Dateien LeftView.cpp und LeftView.h löschen (sowohl im Projekt alsauch die Dateien selbst.)
Vorher sollte man die Anweisung "class CprojektguiDoc;" aus LeftView.h in die projektguiView.h kopieren.
Da der Compiler nun alles mit LeftView nicht kennt muss die Anweisung
#include "LeftView.h" in projektgui.cpp gelöscht und in MainFrm.cpp durch
#include "projektguiView.h" ersetzt werden.Im Template in projektgui.cpp muss das 'CLeftView' wie folgt ersetzt werden:
RUNTIME_CLASS(CprojektguiDoc), RUNTIME_CLASS(CMainFrame), // Haupt-SDI-Rahmenfenster RUNTIME_CLASS(CprojektguiView));
In MainFrm.cpp muss dann nur noch die Erzeugung des Splitterfensters komplett
auskommentiert werden, da es bei nur einem View keinen Sinn macht. Am Besten
entfernt man das Überschreiben von OnCreateClient sowie die Membervariable des
Splitterfensters in MainFrm.h komplett.// CSplitterWnd m_wndSplitter; // virtual BOOL OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext);
Melanie_27 schrieb:
Vorallem das Entfernen von Objekten aus dem Ressourcenbereich macht mir Probleme.
Notfalls die .rc Datei mit einem Texteditor bearbeiten