Datei öffnen Dialogfenster und fopen() passen irgendwie nicht zusammen?!?
-
[EDIT] dies hat sich schon geklärt meine neue Frage ist weiter unten [/EDIT]
Hallo erstmal allen die in mein Thema gestollpert sind.Ich schreibe gerade für mein Studium eine kleine Simulation (ohne MFC).
Da man in dieses Simulation verschiedene Senarien abspeichern können soll,
ist es notwendig Einstellungen zu speichern.
Leider ist mir gerade überhaupt nicht geläufig, wie ich am besten einen Senario speichern bzw laden Dialog realisiere.Gibt es diesen vorgefährtigt ähnlich wie die MessagBox oder muß man diese selber schreiben?
Bzw. wenn ich ihn selbst erstellen muß, wie realiesiert man dann einen
Dateibrowser am besten.Freue mich über jeden Tipps oder Tutorial zu diesem Thema,
auf das jemand die Nägel aus dem Brett vor meinem Kopf zieht
Gruß wastman
-
-
Aua das tut jetzt aber weh...

Notiz an mich selbst: nutze heufiger die online MSDN Datenbank
und weniger das unvollständige veralltete Ding auf deinem Rechner
Danke für das entfernen der Nägel hoffe mal das ich es mit diesem Tip hinbekommen werde

Gruß wastman
-
Im Platform SDK ist ne Art Mini-MSDN drin, ideal zum auffinden von solchen Funktionen und wenn einem die online-msdn zu langsam lädt

-
Hallo ich bin es nochmal...
Der aufruf des öffnen / schließen dialogs klappt jetzt schon total super

Auszug aus Callback Funktion des Konfigurations dialogs
......... if(wParam == IDC_LADEN) { // open dialog OPENFILENAME ofn; // common dialog box structure char szFile[260]; // buffer for file name //HWND hwndDlg; // owner window HANDLE hf; // file handle // Initialize OPENFILENAME ZeroMemory(&ofn, sizeof(ofn)); ofn.lStructSize = sizeof(ofn); ofn.hwndOwner = hwndDlg; ofn.lpstrFile = szFile; // // Set lpstrFile[0] to '\0' so that GetOpenFileName does not // use the contents of szFile to initialize itself. // ofn.lpstrFile[0] = '\0'; ofn.nMaxFile = sizeof(szFile); ofn.lpstrFilter = "All\0*.*\0Text\0*.TXT\0"; ofn.nFilterIndex = 1; ofn.lpstrFileTitle = NULL; ofn.nMaxFileTitle = 0; ofn.lpstrInitialDir = NULL; ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST; // Display the Open dialog box. if (GetOpenFileName(&ofn)==TRUE) hf = CreateFile(ofn.lpstrFile, GENERIC_READ,0, (LPSECURITY_ATTRIBUTES) NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,(HANDLE) NULL); int test=Konfig.Senario_laden("szFile"); if (test == 0) return FALSE; // Daten in Konfig-Fenster Laden for(i=0; i< Konfig.anz_Auswertung; i++) // Auswertungshäckchen CheckDlgButton(hwndDlg,5000+i ,Konfig.get_Auswertung(i) ? BST_CHECKED: BST_UNCHECKED); for(i=0; i< Konfig.anz_Allgemein; i++) // Allgemeine Einstellungen { sprintf(Text, "%f" , Konfig.get_Allgemein(i)); SetDlgItemText(hwndDlg,5100+i, Text ); } for(i=0; i< Konfig.anz_KIT; i++) // KIT Einstellungen { sprintf(Text, "%f" , Konfig.get_KIT(i)); SetDlgItemText(hwndDlg,5200+i, Text ); } for(i=0; i< Konfig.anz_F1; i++) // F1 Einstellungen { sprintf(Text, "%f" , Konfig.get_F1(i)); if(i == 0) CheckDlgButton(hwndDlg,5300 ,(int)Konfig.get_F1(0) ? BST_CHECKED: BST_UNCHECKED); else SetDlgItemText(hwndDlg,5300+i, Text ); } return TRUE;Nur leider kann ich im Anschluß an den Ladendialog in meiner Funktion Senario_laden("szFile") nicht den Befehl fopen() aufrufen, dieser liefert dann immer 0 zurück. Dies muß mit dem erstellen des Ladendialogs zusammen hängen, da fopen() bis zu dem Zeitpunkt wo ich den Ladendialog create einbandfrei funktioniert.
Senario laden Funktion
bool Konfiguration::Senario_laden(char *Datei ) { FILE *pf; int i =0; pf = fopen( "Datei", "r"); // Datei nur lesend öffnen if( !pf) // wenn Fehler abbruch return 0; for( i = 0; i < anz_Auswertung; i++) // einlesen der werte aus config.dat fscanf( pf, "%d,", &Auswertung[i]); for( i = 0; i < anz_Allgemein; i++) // einlesen der werte aus Datei.dat fscanf( pf, "%f,", &Allgemein[i]); for( i = 0; i < anz_KIT; i++) // einlesen der werte aus Datei.dat fscanf( pf, "%f,", &KIT[i]); for( i = 0; i < anz_F1; i++) // einlesen der werte aus Datei.dat fscanf( pf, "%f,", &F1[i]); fclose( pf); // Datei schließen return 1; }Hat jemand einen Vorschlag was ich machen muß, damit fopen() auch nach dem erstellen der Ladendialogbox weiter nutzbar ist, oder kennt jemand eine funktionierende Alternative zu fopen()?
Ersterer Lösungsansatz wäre mir lieber , da ich dann nicht so viel im Quelltext umbauen müßte
MFG Wastman
-
Meintest du vielleicht....
pf = fopen( Datei, "r"); // Datei ohne die Anführungszeichen ("") if( !pf)
-
[quote="wastman"]
int test=Konfig.Senario_laden("szFile");Hier hat er auch noch nen Hauer drin...
-
Außerdem fehlt da meines erachtens nach noch ein CloseHandle...
hf = CreateFile(ofn.lpstrFile, GENERIC_READ,0, (LPSECURITY_ATTRIBUTES) NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,(HANDLE) NULL); CloseHandle(hf); int test=Konfig.Senario_laden("szFile");Du solltest Dich mal entscheiden: Entweder API-Funktionen (CreateFile, ReadFile, WriteFile) oder gleich ganz mit CRT (fopen, fwrite, fputs, fputc).
Warum so ein Mischmasch?
-
Erstmal danke für die Anmerkungen
zu Dago hast natürlich recht Gänsefüßchen sind zuviel da Datei eine Variable aus dem Funktionsrumpf ist
bool Konfiguration::Senario_laden(char *Datei )zu MSDN Du hast auch recht die Anführungsstriche sind zuviel!
Diese hatte ich vergessen wegzumachen, wie die Anführungszeichen bei Senario_Laden auch, nachdem ich zu Testzwecken feste Dateipfad übergeben hatte.

Ich denke übrigens das du damit recht haben könntest, dass fopen() nicht mehr geht weil der handle noch nicht geschlossen wurde. Werd das mal ausprobieren.
Das Schließen des Handle stand auch nicht im Beispiel bei msdn daher habe ich das wohl "verpeilt"
Na ja und zum Thema entscheiden kann ich nur sagen, das ich ein wenig unter Zeitdruck arbeite
und daher so oft wie möglich auf mir bekannte Dinge zurückgreife was leider ein wenig Mischmasch zur Folge hat *zugeb und nicht stolz drauf*
aber man ist ja lern fähig 
-
oh jetzt habe ich das Kapiert .... *kopfhau*
war natürlich doppelt gemoppelt mit createFile()
und fopen()....... ja ja das kommt davon wenn man code aus Toturials kopiert und nicht jede Zeile im Eifer des Gefechts genau ergründet
Bin jetzt bei fopen() einheitlich geblieben, da das Programm aus einer Consolenanwendung heraus entsteht, und dort auch schon des häufigernen fopen()benutzt wurde.Aber es geht jetzt

Nochmal danke an alle die meine DAU Fragen beantwortet haben
Gruß wastman