C++ "edit" WinAPI auslesen & Speichern

M.E.

Lt. Commander
Registriert
Jan. 2007
Beiträge
1.923
Hallo,
Ich habe folgende Edit-box:
Code:
   hwndEdit2   = CreateWindow ( "edit", "Name", 
                                   WS_CHILD | WS_VISIBLE, 
                                   20, 100, 160, 20, hwnd, (HMENU)2, 
                                   (HINSTANCE) GetWindowLong (hwnd, GWL_HINSTANCE), NULL);

Ich möchte diese per Knopfdruck auslesen und speichern lassen:
Code:
 #include <fstream>
#include <windows.h>
.
.
.
ofstream out("EDITBOX-EINGABE.txt"); //sowohl als Dateiname
out<<EDITBOX-EINGABE<<endl; //als auch als Inhalt

Zusätzlich möchte ich auch Ordner mit der Editboxeingabe erstellen; wie geht das?

Gibt es eventuell eine andere (nicht kompliziertere) methode z.B. txt dateien mit Inhalt zu erstellen? (Keine INI Dateien!)

MfG

M.E.
 
M.E. schrieb:
Gibt es eventuell eine andere (nicht kompliziertere) methode z.B. txt dateien mit Inhalt zu erstellen? (Keine INI Dateien!)

um mit dateien umgehen zu können, empfehle ich dir anfangs FILE * und dessen zugehörige methoden fopen, fwrite, fclose, fseek, ...
 
Ganz einfach, dank Windows Funtionen:

Code:
            case IDC_BUTTON:
                {
                    char buffer[128];
                    GetWindowText(GetDlgItem(hWnd, IDC_EDITBOX), buffer, 128);
                }break;
Sobald du den String hast brauchst dus nurnoch speichern. Wie schon claW bemerkt hat, FILE* stream bietet sich da an.
In deinem Fall ist IDC_BUTTON die ID deines Buttons und IDC_EDITBOX die der Eingabezeile.

Code:
sprintf(buffer, "%s.txt", buffer);
FILE* outstream = fopen(buffer, "w");
fwrite(&buffer, sizeof(buffer), 1, outstream);
fclose(outstream);
 
Hallo,
vielen Dank für die schnelle Hilfe!

aber hier funktioniert was noch nicht:
Code:
sprintf(buffer, "%s.txt", buffer);
FILE* outstream = fopen(buffer, "w");
fwrite(&buffer, sizeof(buffer), 1, outstream);
fclose(outstream);

DevC++ gibt die Fehlermeldung:
`buffer' undeclared (first use this function)

fehlt mir ein header, oder muss ich das wie das IDC_EDITBOX von deinem code durch irgendwas ersetzten?

Ach ja, noch was anderes: Wie kann ich das Zeichen '\' in einem Windows Fenster anzeigen? es erscheint einfach nicht...

MfG

M.E.
 
Hast du denn dass "\" auch mit einer Escapesequenz dargestellt ?

Escapesequenzen:
\a Bell (Peepton)
\b Backspace
\f Formfeed
\n New line
\r Carriage return
\t Horizontal tab
\v Vertical tab
\' Single quotation mark
\" Double quotation mark
\\ Backslash
\ooo Character in octal notation
\xhh Character in hexadecimal notation
 
Es hilft, sich die Windowsfunktionen selbst in der MSDN anzuschauen. Klärt viele Fragen.

Wie du erkennen kannst erzeugst du hier:

Code:
char buffer[128];
GetWindowText(GetDlgItem(hWnd, IDC_EDITBOX), buffer, 128);

ein Char-Array Namens buffer.

In der nächsten Zeile handelt es sich um 2 verschachtelte Funktionen, die erste empfängt den Text einer Window-Klasse (in deinem Fall die Editbox) und schreibt sie in den "buffer"-Buffer. Dazu braucht sie aber das Handle deiner Editbox, welches man mit GetDlgItem und der ID bekommt.

Jetzt ist der String in deinem Char-Array gespeichert. Ab diesem Punkt kannst du alles mögliche mit dem String machen, wir wollen es aber in eine Datei schreiben.

Dass dein Compiler "buffer" nicht kennt liegt warscheinlich daran dass du den 2. Teil außerhalb des Gültigkeitsbereich des Char-Arrays benutzt hast.
Solang du das Char-Array innerhalb der Callback-Funktion deklarierst, musst du den 2. Teil hintendran hängen.

Natürlich musst du auch die IDs anpassen. Da du aber die Elemente manuell erstellst und direkt ein Handle der Editbox bekommst kannst du auch gleich das benutzen.

Sähe dann so aus:
Code:
char buffer[128];
GetWindowText(hwndEdit2, buffer, 128);  //hwndEdit2 ist das Handle, was du vorher beim Erstellen der Editbox zurückgegeben bekommen hast


Aber ganz ehrlich, wenn ich mir deine Fragen so ansehe, bin ich mir nicht sicher ob du im Moment bei der Windows-Programmierung so gut aufgehoben bist. Ich würde da leichtere Kost empfehlen.
 
Zurück
Oben