31. Mai 200124 j So, ich wollt mich nun auchmal an den so hochgelobten VC++ machen. Bin allerdings schon bei der leichtesten Aufgabe gescheitert. Gibts es eine Funktion wie bei Borland mit der ich direkt den Wert aus einem Editfeld hole und auch wieder reinstelle? Genau das haben die nämlich auch in : "VC++ in 21 Tagen" vergessen. Thnx4Help
31. Mai 200124 j UpdateData(TRUE); //fenster->variablen //daten ändern UpdateData(FALSE); //variablen->fenster
31. Mai 200124 j Ähm und dass dann bitte nochmal in Deutsch? Ich hab doch erst angefangen mit dem Kram. Gibts da ein 3-zeiler Beispielprogramm? Thnx4Help
31. Mai 200124 j Du musst deinem Edit Feld eine MemberVariale zuweisen (das machst du im ClassWizard) UpdateData(TRUE); schreibst du jetzt das was in dem EditFeld steht in die variable UpdateData(FALSE); schreibst du dass was in der Variable steht in dein edit Feld Ist eigentlich ganz einfach
6. Juni 200124 j Gehe im Resource-Editor auf den Dialog und wähle das betreffende Fenster aus. Drück Strg-W und rufe so den Class-Wizard auf. Wähle dort die Karte "Member-Variables" und klicke auf die entsprechende Control-ID des Fensters. Drücke "Add Variable" und füge bei m_ irgenwas dahinter wie z.B. m_Fenster (das m_ steht für Member-Variable). Wähle in der Kategorie "Control" aus und Bestätige alles mit "OK". Hiermit ist m_Fenster in Deinem kompletten Source-Code über DDX-Funktionen bekannt (Direct-Data-Exchange) und kann über den Punkt-Operator alle Funktionen die dem Fenster bereitstehen benutzen. So arbeiten die (faulen) Profis! Viel Spaß!!!
6. Juni 200124 j Supi, hab ich jetzt geschnallt. Hab auch schon meinen ersten Rechner gecodet. Aber nochwas, wie mache ich denn, dass der jetzt meine ganzen ergebnisse in einer Datei abspeichert? fopen?fclose? FILE *MeineDatei; MeineDatei = fopen("C:\\temp.txt", "w+"); fputc('H', MeineDatei); fputc('a', MeineDatei); fputc('l', MeineDatei); fputc('l', MeineDatei); fputc('o', MeineDatei); fclose(MeineDatei); soweit ist klar, aber wie binde ich das jetzt in mein jetziges Prog ein? .h? oder .cpp? ich bin noch net so fit in Visual. Muß ich mir da nen Button IDC_SPEICHERN machen und dann den kram in OnSPEICHERN legen? Thnx4Help
6. Juni 200124 j Muß ich mir da nen Button IDC_SPEICHERN machen und dann den kram in OnSPEICHERN legen? -> Wäre so denkbar... Alles was den Dialog betrifft würde ich auch da reinsetzen, es sei denn du willst eine universale Speicherfunktion machen, die müstest Du dann mit #include einbinden also eine eigene .CPP und .h dafür anlegen.
6. Juni 200124 j Eigene cpp und h? wie kann ich denn das machen? die wird doch dann im Hauptteil included oder? aber doch nur die .h? PS: Das funktioniert! Aber wenn ich fputc(m_ergebniss, MeineDatei); schreibe sagt er das das mit der konvertierung von double zu int nicht möglich. Kann ich denn keine double speichern? Wie könnte ich denn überhaupt konvertieren. so Float -> Text? Thnx4Help
6. Juni 200124 j fputc schreibt leider nur ints. Deshalb ist es sinnvoll den double(bei Win98 8 Bytes) in 2 ints(4 Bytes) zu zerlegen. Das geht so: So kann man sehen, wie groß int oder doubles sind: int x=sizeof(int); // int anschauen double y=sizeof(double); // alles klar? und jetzt das Beispiel: double m_ergebniss; int xhi,xlo; double*p1=&m_ergebniss; // Zeiger auf double xlo=*(int*)p1; // lo als int auslesen xhi=*((int*)p1+1); // hi als int auslesen leider muß man den Pointer definieren, da sonst versucht wird den kompletten double auf int zu kürzen. Das heißt der integer-Wert von m_ergebniss wird in den int übertragen und der Exponent in den Gulli geworfen - das wäre falsch (Information geht verloren). Ein double y=5 ist nämlich byteweise nicht 5 sondern: Hi int Lo int 00 00 00 00 | 00 00 14 40 oder am besten gleich in den fputc setzen: int xhi,xlo; double*p1=&m_ergebniss; fputc(*((int*)p1+1), MeineDatei); // lo fputc(*(int*)p1, MeineDatei); // hi Ich hab´s jetzt nicht getestet aber der fputc sollte es so fressen ansonsten halt ein int xhi,und ein int xlo einlesen über als m_ergebniss abspeichern. Das Einlesen muß also auch wieder als xlo und xhi erfolgen und dann muß ein double im speicher so gefüllt werden. Klappt 100%ig! Die Methode ist zwar ein wenig brutal, aber so funktionierts bestimmt. P.S.: Bei STL lassen sich CObjects ganz einfach in Dateien streamen - da ist dann wurst ob´s ints doubles oder strings sind.
7. Juni 200124 j Ähm sorry, aber das war zu viel. Also das mit dem konvertieren ist klar. Aber welche function,wenn nicht fputc, schreibt denn text in eine Datei? Damit es gleich egal ist was in dem Eingabefeld steht? Thnx4Help
7. Juni 200124 j Ach so, das geht dann so: Mit Strings: fputs, fputws Write a string to a stream. int fputs( const char *string, FILE *stream ); ACHTUNG: Es werden 0-terminierte-Strings geschrieben!!! Man muß hier falls nicht vorhanden 0er setzen. Oder so mit unformatierten Daten aller Art: fwrite Writes data to a stream. size_t fwrite( const void *buffer, size_t size, size_t count, FILE *stream ); Parameters: buffer Pointer to data to be written size Item size in bytes count Maximum number of items to be written stream Pointer to FILE structure Das ist feiner, so kann man die Schreib-Länge im Aufruf bestimmen. Vielleicht hilft Dir das weiter? Aber auch hier muß ein Pointer auf den double gesetzt werden. Da kommt man einfach nicht rum.
7. Juni 200124 j versuchs mal hiermit fprintf(deinFileStream,"%d", deinedoublevariable); ist nicht so schoen wie bei crush aber dafuer ziemlich einfach und schnell kapierbar [ 07. Juni 2001: Beitrag editiert von: Hasi ]
7. Juni 200124 j Ähm, ich habs immernoch nicht verstanden Könnt ihr vielleicht mal nen 3-zeiler schreiben mit nem beispiel, wo oben irgendein Zahlenwert z.B. double reinkommt und der wert dann als text in einer neuen Variable wieder rauskommt? So, mit deklaration und so? Das wäre tierisch guat von euch. Thnx4Help [ 07. Juni 2001: Beitrag editiert von: FaFo ]
7. Juni 200124 j magst jetzt deinen double in ne Datei schreiben oder in eine andere Variable? und der wert dann als text in einer neuen Variable wieder rauskommt?
7. Juni 200124 j zum schreiben in einen Buffer(char) schau dir das an : #include <stdio.h> void main( void ) { char buffer[200], s[] = "computer", c = 'l'; int i = 35, j; float fp = 1.7320534f; /* Format and print various data: */ j = sprintf( buffer, "\tString: %s\n", s ); j += sprintf( buffer + j, "\tCharacter: %c\n", c ); j += sprintf( buffer + j, "\tInteger: %d\n", i ); j += sprintf( buffer + j, "\tReal: %f\n", fp ); printf( "Output:\n%s\ncharacter count = %d\n", buffer, j ); } zum schreiben des Buffers oder des Double in die datei les mal das: #include <stdio.h> #include <process.h> FILE *stream; void main( void ) { int i = 10; double fp = 1.5; char s[] = "this is a string"; char c = '\n'; stream = fopen( "fprintf.out", "w" ); fprintf( stream, "%s%c", s, c ); fprintf( stream, "%d\n", i ); fprintf( stream, "%f\n", fp ); fclose( stream ); system( "type fprintf.out" ); } OK?
8. Juni 200124 j Supi, hab es heut früh probiert und es so umgebaut, das es auch wirklich mein ergebniss als char bla[...] speichert. Dankeschön. Auf einen im Netz stehenden Rechner kann man das nicht speichern? oder? ich hab das schonmal probiert, denke aber, dass ich die adresse falsch eingegeben hab. eigentlich müßte doch: \\X0529AP\C\temp.txt auch reichen oder? Greetz Carsten
8. Juni 200124 j hmm wahrscheinlich muss man mit escape charactern arbeiten, d.h. um einen backslash zu schreiben muss ich zwei machen siehe hier : void main() { cout << "\\ ein Backslash\n"; cout << "\\\\ zwei Backslash"; }
8. Juni 200124 j yep, funtzt, jetzt kann ich schonmal die daten auf einem anderen rechner abspeichern. Danke, denke das wars erstmal. Greetz Carsten
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.