Maske
-
Hallo!!
Ich mache gerade ein Praktikum in einer großen Firma und mir wurde folgende Aufgabe gestellt:
ich soll mit Hilfe von Microsoft Visual C++ eine Maske erstellen. In dieser Maske werden Zahlenwerte dargestellt, die aus einer Datei ausgelesen wurden. Einige dieser Zahlenwerte können dann manuell verändert werden. Beim Klicken auf einen ok-Button wird dieser Datensatz dann in eine neue Datei geschrieben. Gleichzeitig wird der nächste Datensatz aus der ursprünglichen Datei ausgelesen und in der Maske dargestellt usw.
Wie man so eine Maske erstellt, das geht ja recht einfach in Visual C++. Aber wie lege ich hinter die einzelnen Buttons Funktionalität bzw. wie verknüpfe ich das mit einer Datei?
Meine Kenntnisse in C++ sind gering.Könnte mir vielleicht jemand bitte eine Internetseite empfehlen, wo ich mich möglichst schnell einlesen/üben kann?
Und jetzt würde mich eure Meinung dazu noch interessieren: wie lange ungefähr dauert das für einen Neuling wie mich auf diesem Gebiet mit einigermaßen vorhandener Intelligenz, bis ich mich eingelesen habe?Liebe Grüße!!

-
Sowas wie du beschreibst hatte ich nach ca. 1,5 Monaten fertig.
Ich muss dazusagen, dass ich mich erst 2 Wochen durch Inside VC6 gequält habe und dann mit Henkessoft.de so richtig losgelegt habe. Also 2 bis 3 Wochen waren es damals wohl effektiv.Ich hatte vorher keine C++ Kenntnisse, nur C, Turbo Pascal und Visual Basic.

Such mal hier im Forum nach: CStdioFile. Da findest du sicher Beispiele, wie man mit Dateien arbeitet.

-
estartu schrieb:
Sowas wie du beschreibst hatte ich nach ca. 1,5 Monaten fertig.
Ich muss dazusagen, dass ich mich erst 2 Wochen durch Inside VC6 gequält habe und dann mit Henkessoft.de so richtig losgelegt habe. Also 2 bis 3 Wochen waren es damals wohl effektiv.Ich hatte vorher keine C++ Kenntnisse, nur C, Turbo Pascal und Visual Basic.

Such mal hier im Forum nach: CStdioFile. Da findest du sicher Beispiele, wie man mit Dateien arbeitet.

1,5 Monate? Das bisschen PillePalle ist an max. nem Tag gemacht

CStdioFile muss nicht das beste sein. Eventuell ist es ja auch ne Ini-Datei?! Ein paar mehr infos wären nicht schlecht.
Btw: Button-Handler fügst du hinzu, indem du im Formdesigner doppelt drauf klickst auf den Button.
-
Machine schrieb:
1,5 Monate? Das bisschen PillePalle ist an max. nem Tag gemacht

Wenn man weiß wie es geht, ja. :p
-
erstmal schon diiiiiicke danke!!
@estartu
da werd ich mal ein paar Blicke reinwerfen! Bisher arbeite ich mit http://www.cpp-tutor.de, macht sich ganz hübsch, aber ich bin mir nicht sicher, ob diese beiden dort angebotenen Kurse auch mein Thema ausreichend treffen.@Machine
ja, da gibt es auch noch eine ini-Datei, in der steht nur folgendes:OutputFile=S:\...\\kor.opt
InputFile_1=S:\...\\kor.dataus kor.opt werden dann die Daten ausgelesen, in der Maske gegebenenfalls geändert und in die kor.dat geschrieben
(oder war das umgekehrt??
)wenn das an einem Tag gemacht werden kann, ist es mit meiner Klugheit wohl ganz schön besch...eiden aus, denn davon bin ich weit entfernt

-
Und noch eine Frage:
Machine schrieb:
Btw: Button-Handler fügst du hinzu, indem du im Formdesigner doppelt drauf klickst auf den Button.
in dem Beispielprogramm, das mir vorgelegt wurde, wenn ich auf Ressourcen -> Dialog gehe, dann öffnet sich im rechten Bereich die Maske. Mache ich dann auf eines der Eingabefelder einen Doppelklick, öffnet sich ein Fenster mit dem Namen der Member-Funktion.
Erscheint ganz simpel und logisch. Jetzt könnte ich ja diese Fkt entsprechend bearbeiten.ABER WIE KANN ES SEIN, DASS ICH DEN NAMEN DIESER FUNKTION IM GESAMTEN DATEIORDNER NICHT FINDEN KANN??
Ich suche mit Bearbeiten -> Suchen in Dateien, und trotzdem scheint es so, als ob es diese Funktion nicht gäbe.Auche weder Main- noch WinMain-Funktionen kann ich finden.
Wie gibt's denn das?
-
Hast du denn in diesem Dialogfeld mal auf "OK" geklickt? Wenn nein, solltest du das schnellstens nachholen - damit teilst du Visual Studio mit, daß es doch bitte die Funktion mit dem eingegebenen Namen anlegen soll.
(PS: Und die WinMain() Funktion ist bei MFC-Programmen so weit versteckt, daß du nicht mehr direkt damit zu tun bekommst.)
-
julchen81 schrieb:
Auche weder Main- noch WinMain-Funktionen kann ich finden.
Wie gibt's denn das?
Das ist korrekt so. Die WinMain versteckt sich in den Tiefen der MFC.

Sowas ähnliches ist die InitInstance. Da kommt das rein, was du gleich beim Programmstart machen willst.
-
@CStoll: dich kenn ich doch *gg*
gut, ist richtig, beim Klicken auf OK wird eine Funktion angelegt. Diese Funktion hat es scheinbar bisher nicht gegeben, das Programm funktioniert aber trotzdem, und das ergibt für meine Wenigkeit grad keinen Sinn...?
-
Wenn der Button die ID "IDOK" hat, dann gibt es standardmäßig vom Dialog aus die Funktion...
ich gehe davon aus, dass das ne dialogbasierte Anwendung ist, die du da hast.. kannst ja mal n bisschen Sourcode posten, wenn du es nicht weißt...
-
julchen81 schrieb:
@CStoll: dich kenn ich doch *gg*
Ja, die Welt ist klein - und dieses Forum noch kleiner

Diese Funktion hat es scheinbar bisher nicht gegeben, das Programm funktioniert aber trotzdem, und das ergibt für meine Wenigkeit grad keinen Sinn...?
Und was hatte sich bisher gemeldet, wenn du den fraglichen Button angeklickt hast? (btw, was für eine ID wird angezeigt, wenn du mit der rechten Taste draufklickst und "Properties" auswählst?)
-
Code? Aber sicher doch:
#include "stdafx.h" #include "WZ_KOR_IN_OUT_DLG.h" #include "WZ_KOR_IN_OUT_DLGDlg.h" //************************************************************************ #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif //************************************************************************ // CWZ_KOR_IN_OUT_DLGApp //************************************************************************************************* BEGIN_MESSAGE_MAP(CWZ_KOR_IN_OUT_DLGApp, CWinApp) //{{AFX_MSG_MAP(CWZ_KOR_IN_OUT_DLGApp) // HINWEIS - Hier werden Mapping-Makros vom Klassen-Assistenten eingefügt und entfernt. // Innerhalb dieser generierten Quelltextabschnitte NICHTS VERÄNDERN! //}}AFX_MSG ON_COMMAND(ID_HELP, CWinApp::OnHelp) END_MESSAGE_MAP() //************************************************************************************************* // CWZ_KOR_IN_OUT_DLGApp Konstruktion //************************************************************************************************* CWZ_KOR_IN_OUT_DLGApp::CWZ_KOR_IN_OUT_DLGApp() { // ZU ERLEDIGEN: Hier Code zur Konstruktion einfügen // Alle wichtigen Initialisierungen in InitInstance platzieren } //************************************************************************************************* // Das einzige CWZ_KOR_IN_OUT_DLGApp-Objekt //************************************************************************************************* CWZ_KOR_IN_OUT_DLGApp theApp; //************************************************************************************************* // //************************************************************************************************* BOOL CWZ_KOR_IN_OUT_DLGApp::InitInstance() { AfxEnableControlContainer(); // Standardinitialisierung // Wenn Sie diese Funktionen nicht nutzen und die Größe Ihrer fertigen // ausführbaren Datei reduzieren wollen, sollten Sie die nachfolgenden // spezifischen Initialisierungsroutinen, die Sie nicht benötigen, entfernen. #ifdef _AFXDLL Enable3dControls(); // Diese Funktion bei Verwendung von MFC in gemeinsam genutzten DLLs aufrufen #else Enable3dControlsStatic(); // Diese Funktion bei statischen MFC-Anbindungen aufrufen #endif // Da das Dialogfeld geschlossen wurde, FALSE zurückliefern, so dass wir die // Anwendung verlassen, anstatt das Nachrichtensystem der Anwendung zu starten. OpenChangeDlg(); return TRUE; //FALSE; } //************************************************************************************************* // //************************************************************************************************* void CWZ_KOR_IN_OUT_DLGApp::OpenChangeDlg() { CWZ_KOR_IN_OUT_DLGDlg dlg; m_pMainWnd = &dlg; int nResponse = dlg.DoModal(); if (nResponse == IDOK) { // ZU ERLEDIGEN: Fügen Sie hier Code ein, um ein Schließen des // Dialogfelds über OK zu steuern } else if (nResponse == IDCANCEL) { // ZU ERLEDIGEN: Fügen Sie hier Code ein, um ein Schließen des // Dialogfelds über "Abbrechen" zu steuern } }Machine schrieb:
Wenn der Button die ID "IDOK" hat, dann gibt es standardmäßig vom Dialog aus die Funktion...
Wieso finde ich diese Funktionen dann im gesamten Code nicht? Das ist mir ein Rätsel, gibt's da irgendwie versteckte Dateien oder so was??
-
die funktion ist dann in der dialogklasse, also CDialog, definiert. dann kannst du sie nicht finden, da sie nicht in deinen klassen steckt, sondern in den coreklassen...
-
Machine schrieb:
die funktion ist dann in der dialogklasse, also CDialog, definiert. dann kannst du sie nicht finden, da sie nicht in deinen klassen steckt, sondern in den coreklassen...
Aber das wie geht denn das??
Jetzt noch mal konkret:
In meiner Maske gibt es ein Feld, indem erscheint eine Nummer, die aus einer Datei ausgelesen worden ist. Diese Nummer kann ích dann evtl. verändern. Die evtl. neue Nummer wird dann in eine andere Datei geschrieben.Was davon kann ich dann in meinem Code lesen, wenn schon nicht die Funktion, die dahintersteckt?
Wie bekomme ich die Verknüpfung zwischen Datei, Erscheinen eines Wertes davon in der Maske und neuer Datei? Davon muss ich doch im Code was lesen können??Hat jemand zufällig eine ganz ganz simple Maske, z.B. bestehend aus nur einem Textfeld und einem OK-Button, das dann oben beschriebene Aktion durchführt? Würd extremst gerne dazu mal den Code sehen.
Mein mir zur Verfügung gestelltes Programm ist so aufgebläht, es fällt mir schwer, darin das Wesentliche zu finden.grüßle
-
ach jetz versteh ich.. wenn du das sehen willst, dann musst du in die klasse WZ_KOR_IN_OUT_DLGDlg schauen. du hast den code von der klasse CWZ_KOR_IN_OUT_DLGApp gepostet...
-
julchen81 schrieb:
Hat jemand zufällig eine ganz ganz simple Maske, z.B. bestehend aus nur einem Textfeld und einem OK-Button, das dann oben beschriebene Aktion durchführt? Würd extremst gerne dazu mal den Code sehen.
grüßle
Mach dir doch einfach eine neue Anwendung (Dialogbasiert) und dann machst du ein Edit drauf und einen Button und versuchst es nochmal.

Dann sind die Klassen überschaubarer.

-
Machine schrieb:
ach jetz versteh ich.. wenn du das sehen willst, dann musst du in die klasse WZ_KOR_IN_OUT_DLGDlg schauen. du hast den code von der klasse CWZ_KOR_IN_OUT_DLGApp gepostet...
auch da find ich das nicht... hab echt den kompletten Ordner danach durchsucht.
estartu schrieb:
Mach dir doch einfach eine neue Anwendung (Dialogbasiert) und dann machst du ein Edit drauf und einen Button und versuchst es nochmal.

Dann sind die Klassen überschaubarer.

Damit mach ich morgen weiter.
Herzliches Dankeschön an alle!!
Und natürlich einen schönen Feierabend
-
Guten Morgen,
hab jetzt da ein bisschen rumgebastelt, aber auch bei einem sehr einfachen Fenster wird der Code gleich dermaßen lang... es müssten dann Funktionen überschrieben werden usw.
Also wenn's da nicht irgendeinen gigantisch vereinfachenden Trick gibt, dann nutzt es wohl nichts: ich muss zuerst fiter in C++ werden.
Soweit ich sehen kann, führt kein Weg daran vorbei.ODER???

-
ich denke ja...
-
Moin!
Ja, ohne Grundlagen wird es sehr frustrierend. Schau doch da mal rein: http://henkessoft.de/C++/MFC/mfc_einsteigerbuch_kapitel2.htm (Besser noch mit Kapitel 1 anfangen)
Hast du vorher unter DOS programmiert? Dann dürfte das Iritierendste für dich das mit den Nachrichten sein. Ich habs damals so nebenbei begriffen, wie das funktioniert. Einfach durchbeißen.

PS: Der Sprung von C nach C++ ist imho leichter als der von DOS auf Windows.
