Geschriebenes von einer Editbox in eine Textdatei?



  • (D)Evil schrieb:

    Style: 6 😉

    Ja, vor allem für die Spaces vor den Semikola und Doppelpunkten könnt' man ihn würgen...

    BTW: Du willst sicher statt

    static char szAppName[] = "GameInfo Creater" ;
    
    const char szAppName[] = "GameInfo Creater";
    

    Greetz, Swordfish



  • #include <iostream>
    
    case WM_COMMAND:
                  switch (HIWORD(wParam))
                  {
                  case BN_CLICKED:
                      switch(LOWORD(wParam))
                      {
                      case but: 
    			char buf[500]  
    			GetWindowText(hwnded, edit1, iLength+1);
    			char buf[500] = "Das ist ein Test";
    			std::fstream datei;
    			datei.open("GameInfo.txt",std::ios::out|std::ios::binary);
    			if(!datei.is_open())
    			{
     			  ... //Fehlerbehandlung: Datei lässt sich nicht öffnen
    			}
    			datei.write(buf,500);
    			//datei.close() 
    		break;
    

    So richtig? wenn nicht bitte korrigieren
    und kann man z.b auch wenn ich jetz den namen eingegeben habe also in meine editbox, dass dann automatisch noch "game" in der txt davor setze

    game	"name"
    

    übrigens danke Swordfish



  • naja... weil deinen Code keiner lesen kann... das ganze mal aufgeräumt und funktionierent:

    #include <iostream> 
    #include <fstream>
    #include <windows.h> 
    
    #define IDC_EDIT1		100
    #define IDC_BUTTON1		1001
    
    LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); 
    
    int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE /*hPrevInstance*/, PSTR /*szCmdLine*/, int nCmdShow) 
    { 
    	const char szAppName[] = "GameInfo Creater"; 
    
    	HWND			hWnd; 
    	MSG				msg; 
    	WNDCLASSEX		wc; 
    
    	wc.cbSize			= sizeof(wc); 
    	wc.style			= CS_HREDRAW | CS_VREDRAW; 
    	wc.lpfnWndProc		= WndProc; 
    	wc.cbClsExtra		= 0; 
    	wc.cbWndExtra		= 0; 
    	wc.hInstance		= hInstance; 
    	wc.hIcon			= LoadIcon(NULL, IDI_APPLICATION); 
    	wc.hCursor			= LoadCursor (NULL, IDC_ARROW); 
    	wc.hbrBackground	= (HBRUSH)GetStockObject(WHITE_BRUSH); 
    	wc.lpszMenuName		= NULL; 
    	wc.lpszClassName	= szAppName; 
    	wc.hIconSm			= LoadIcon(NULL, IDI_APPLICATION); 
    
    	RegisterClassEx(&wc); 
    
    	hWnd = CreateWindow(szAppName, "GameInfo Creater", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL);    
    
    	if (!hWnd)
    		return 0;
    
    	ShowWindow(hWnd, nCmdShow); 
    	UpdateWindow(hWnd); 
    
    	while (GetMessage(&msg, NULL, 0, 0)) 
    	{ 
    		TranslateMessage(&msg); 
    		DispatchMessage(&msg); 
    	} 
    
    	return (int)msg.wParam; 
    } 
    
    LRESULT CALLBACK WndProc(HWND hWnd, UINT nMessage, WPARAM wParam, LPARAM lParam) 
    { 
    	static HWND hWndEdit1	= NULL;
    	static HWND hWndButton1	= NULL; 
    
    	switch (nMessage) 
    	{
    	case WM_CHAR:
    		{
    			switch (wParam) 
    			{ 
    			case VK_ESCAPE: 
    				{
    					SendMessage(hWnd, WM_DESTROY, 0, 0); 
    				} break; 
    			}
    		} break;
    	case WM_CREATE: 
    		{
    			hWndEdit1 = CreateWindowEx(WS_EX_CLIENTEDGE, "edit", NULL, WS_CHILD | WS_VISIBLE | ES_LEFT, 50, 50, 150, 25, hWnd, (HMENU)IDC_EDIT1, ((LPCREATESTRUCT)lParam)->hInstance, NULL); 
    
    			if (!hWndEdit1)
    			{
    				MessageBox(hWnd, "Fehler beim erstellen eines Textfeldes!", "Fehler", MB_OK | MB_ICONERROR);
    				return 1;
    			}
    
    			SendMessage(hWndEdit1, WM_SETFONT, (WPARAM)GetStockObject(DEFAULT_GUI_FONT), 0); 
    
    			hWndButton1 = CreateWindow("button", "Save", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 200, 50, 150, 25, hWnd, (HMENU)IDC_BUTTON1, ((LPCREATESTRUCT)lParam)->hInstance, NULL); 
    
    			if (!hWndButton1)
    			{
    				MessageBox(hWnd, "Fehler beim erstellen eines Buttons!", "Fehler", MB_OK | MB_ICONERROR);
    				return 1;
    			}
    
    			SendMessage(hWndButton1, WM_SETFONT, (WPARAM)GetStockObject(DEFAULT_GUI_FONT), 0); 
    
    			return 0; 
    		} break;
    	case WM_COMMAND: 
    		{
    			switch (HIWORD(wParam)) 
    			{ 
    			case BN_CLICKED:
    				{
    					switch(LOWORD(wParam)) 
    					{ 
    					case IDC_BUTTON1: 
    						{
    							unsigned int nLength = (unsigned int)GetWindowTextLength(hWndEdit1);
    							char* pText = new char[nLength + 1]; 
    							GetWindowText(hWndEdit1, pText, nLength);
    
    							std::fstream file; 
    							file.open("ouput.txt", std::ios::out | std::ios::binary); 
    
    							if (!file.is_open()) 
    								MessageBox(hWnd, "Die Datei \"output.txt\" konnte nicht erstellt werden!", "Fehler", MB_OK | MB_ICONERROR);
    
    							file.write(pText, nLength + 1); 
    							file.close();
    
    							delete [] pText;
    
    						} break; 
    					} 
    				} break; 
    			} 
    		} break;
    	case WM_PAINT: 
    		{
    		} break;
    	case WM_DESTROY: 
    		{
    			PostQuitMessage(0); 
    			return 0; 
    		} break;
    	}
    
    	return DefWindowProc (hWnd, nMessage, wParam, lParam); 
    }
    

    Kann aber sein das ich vergessen hab ne Stelle zu fixen 😉



  • Danke jetz weiß ichs wieß funktioniert echt super dieses Forum



  • Das sieht zwar immer noch alles ein bisschen Dirty aus, sollte aber gehen. Mal ein bisschen OT: Warum machst du für jede Childwindow Erstellung eine eigene if-Abfrage. Wenn da jetzt noch ein paar Controls dazukommen, steigst du da nie mehr durch.

    Entweder baust du dir dafür:
    a) Eine Funktion, die eine MessageBox erstellt, wenn es nicht geht (und dann zB die ID des Fensters meldet das nicht erstellt werden konnte).
    b) du lässt es bleiben
    c) ...

    Mein Tip ist, las es einfach. Der Fehler dürfte nur während der Programmierphase auftreten. 🙂



  • ein Problem hab ich noch der letze Buchstabe wird nicht abgespeichert



  • PhoeniXXX schrieb:

    ein Problem hab ich noch der letze Buchstabe wird nicht abgespeichert

    Jo weil du

    GetWindowText(hWndEdit1, pText, nLength);
    

    geschrieben hast.

    Du musst

    GetWindowText(hWndEdit1, pText, nLength + 1);
    

    schreiben 😉



  • danke



  • Ja sry... hmm @flammenvogel... nein. Wieso sollte man da die übersicht verlieren... wenn man das so wie ich hinter jeder create direkt macht, weiß man immer wozu es gehört und kann so Fehler vermeiden.



  • @(D)evil: Ich glaube das das zum Großteil Geschmacksache ist. Meiner Meinung nach ist das Fehlerabfangen bei CreateWindow sinnlos, da:

    1. die beste Fehlermeldung ist das das Window nicht da ist
    2. sollte das Window nicht da sein, stürtzt das Programm in der Regel nicht ab, da ich bei mit CreateWindow erstellten Fenstern eigentlich immer mit IDs arbeite und da einfach auch alle Folgefunktionen fehlschlagen (aber das Programm stürzt eben nicht ab)

    Außerdem ist ein nichterstellen eines Fensters etwas was sehr selten (ich habs erhlich gesagt noch nie erlebt) vorkommt. Ich meine damit das es auf meinem Rechner geht und auf irgendeinem anderen nicht.

    Dann bleibt für mich der einzige Grund eine if-Abfrage zu machen, dem Programmier bei Programmierfehlern zu helfen. Was das anbelangt, setzte ich in meinen Programmen zum debuggen immer meine selbstgeschriebene Funktion ShowLastWinApi Error ein, von der ich eine sehr viel genauere Fehlerbeschreibung erhalte, als das mit einer einfachen if-Abfrage möglich wäre.

    Ich persönlich halte eine ausführliche Fehlerbehandlung bei CreateWindow für absoluten Overkill. Aber das ist nur meine Meinung. 🙂


Anmelden zum Antworten