Textdatei im Fenster anzeigen



  • Ich würde gerne den gesamten Inhalt einer Textdatei (*.txt) in meinem Fenster anzeigen lassen. Habe bisher aber noch keine möglichkeit gefunden das zu bewerkstelligen.
    Es würde mir ja reichen den inhalt der Datei in eine Variable einzulesen die ich dann anzeigen kann.

    Folgendes funktioniert jedenfalls nicht:

    int i = 0;
    char cstring;
    char f[99999];
    
    fstream myfile;
    myfile.open(file);
    
    while (myfile.get(cstring))
    {
    
    f[i] = cstring;
    i++;
    
    }
    
    TFile2 = CreateWindowA(
    	"STATIC",
    	f,
    	WS_VISIBLE | WS_CHILD,
    	10,
    	10,
    	500,
    	20,
    	hWnd,
    	NULL,
    	NULL,
    	NULL);
    

    Die Variable 'file' ist ein TCHAR Array in dem der Dateipfad gespeichert ist.

    Ich bekomme keinerlei Fehler beim debuggen aber das Fenster bleibt einfach leer.



  • yay, WinAPI 😕

    #define WIN32_LEAN_AND_MEAN
    #include <windows.h>
    #include <tchar.h>
    
    #include <string>
    #include <fstream>
    
    LRESULT CALLBACK window_proc( HWND window, UINT message, WPARAM wparam, LPARAM lparam )
    {
    	static HWND edit_box;
    
    	switch( message ) {
    		case WM_CREATE:
    		{
    			RECT rect;
    			GetClientRect( window, &rect );
    			edit_box = CreateWindowA( "EDIT", "", WS_CHILD | WS_VISIBLE | ES_MULTILINE | ES_READONLY, 0, 0, rect.right, rect.bottom, window, nullptr, nullptr, nullptr );
    
    			if( !edit_box ) {
    				MessageBox( window, _T( "Failed to create a child window!" ), _T( "Fatal Error:" ), MB_ICONEXCLAMATION );
    				return -1;
    			}
    
    			std::ifstream is{ "D:/test.txt" };
    			if( !is.is_open() ) {
    				MessageBox( window, _T( "Couldn't open file for reading!" ), _T( "Fatal Error:" ), MB_ICONEXCLAMATION );
    				return -1;
    			}
    
    			std::string str( ( std::istreambuf_iterator< decltype( is )::char_type >( is ) ),
    				std::istreambuf_iterator< decltype( is )::char_type >() );
    
    			SendMessageA( edit_box, WM_SETTEXT, 0, reinterpret_cast< LPARAM >( str.c_str() ) );
    			return 0;
    		}
    
    		case WM_SIZE:
    			MoveWindow( edit_box, 0, 0, LOWORD( lparam ), HIWORD( lparam ), true );
    			return 0;
    
    		case WM_CLOSE:
    			PostQuitMessage( 0 );
    			return 0;
    	}
    
    	return DefWindowProc( window, message, wparam, lparam );
    }
    
    int WINAPI WinMain( HINSTANCE instance, HINSTANCE, LPSTR, int show_state )
    {
    	WNDCLASS wc{ 0 };
    	wc.lpfnWndProc = window_proc;
    	wc.hInstance = instance;
    	wc.lpszClassName = _T( "Text Viewer Window Class" );
    	wc.hbrBackground = reinterpret_cast< HBRUSH >( COLOR_APPWORKSPACE );
    	wc.hCursor = LoadCursor( nullptr, IDC_ARROW );
    
    	auto window_class{ RegisterClass( &wc ) };
    
    	if( !window_class ) {
    		MessageBox( nullptr, _T( "Failed to register the main window class!" ), _T( "Fatal Error:" ), MB_ICONEXCLAMATION );
    		return 0;
    	}
    
    	auto window{ CreateWindow( reinterpret_cast<LPCTSTR>( window_class ), _T( "Text Viewer" ),
    		WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
    		nullptr, nullptr, instance, nullptr )
    	};
    
    	if( !window ) {
    		MessageBox( nullptr, _T( "Failed to create the main window!" ), _T( "Fatal Error:" ), MB_ICONEXCLAMATION );
    		return 0;
    	}
    
    	UpdateWindow( window );
    	ShowWindow( window, show_state );
    
    	MSG msg;
    	BOOL result;
    
    	while( result = GetMessage( &msg, window, 0, 0 ) ) {
    
    		if( result == -1 )
    			break;
    
    		TranslateMessage( &msg );
    		DispatchMessage( &msg );
    	}
    
    	return static_cast< int >( msg.wParam );
    }
    


  • Erstmal danke für die schnelle Antwort!

    Ich habe jetzt meinen Code entsprechend angepasst, aber aus irgendeinem Grund wird die Datei nicht richtig geöffnet. Ich habe auch versucht einfach *.open(Dateipfad) zu verwenden aber das funktioniert auch nicht.
    Es kann auch nicht an einem Tippfehler im Pfad liegen da ich zuvor mit PathFileExists(Dateipfad) überprüfe ob die Datei existiert. Vielleicht hat ifstraem was dagegen das der Pfad als TCHAR Array übergeben wird.

    Vielleicht kann mir ja jemand weiterhelfen.



  • #include <fstream>
    
    #include <tchar.h>
    
    // ...
    
    TCHAR filename[] = _T( "foo.bar" );
    std::istream is{ _tfopen( filename, _T( "r" ) };
    


  • Es geht auch kürzer:

    int WINAPI WinMain( HINSTANCE hInst, HINSTANCE, LPSTR, int nCmdShow)
    {
       HWND hWnd = CreateWindow(TEXT("LISTBOX"), TEXT("EasyWin"),  
          WS_VISIBLE | WS_SIZEBOX | WS_OVERLAPPEDWINDOW,
          100, 100, 300, 300, NULL, NULL, hInst, NULL);
    
        if(!hWnd)
            return 10;
    
         // ShowWindow(hWnd, nCmdShow);
    
        SendMessage(hWnd, LB_ADDSTRING, 0, (LPARAM)TEXT("Hier steht der Text!"));
    
        UpdateWindow(hWnd);
    
        // Messageschleife
        MSG msg;  
        while(GetMessage(&msg, NULL, 0, 0)) {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
    
        return 0;
    }
    


  • Habe jetzt folgendes aus euren Antworten gemacht:

    TFile2 = CreateWindowA(
    	"EDIT",
    	"",
    	WS_VISIBLE | WS_CHILD | ES_MULTILINE | ES_READONLY,
    	10,
    	10,
    	530,
    	550,
    	hWnd,
    	NULL,
    	NULL,
    	NULL);
    
    fstream fi;
    
    fi.open(file, ios::in);
    
    if (!fi.is_open()) {
    	MessageBox(hWnd, L"Error", L"Error", MB_ICONERROR | MB_OK);
    	return -1;
    }
    
    string str((istreambuf_iterator< decltype(fi)::char_type >(fi)),
    	istreambuf_iterator< decltype(fi)::char_type >());
    
    SendMessageA(TFile2, WM_SETTEXT, 0, reinterpret_cast< LPARAM >(str.c_str()));
    

    Dies ist im WM_Paint Teil der switch (message) Funktion und der Dateipfad wird als char-Array file weiter oben im Programm aus einer Textbox ausgelesen und mit PathFileExistsA(file) überprüft.
    Das Problem was ich jetzt bekomme ist, das immer die Messagebox "Error" kommt obwohl die Datei existiert, der Dateipfad korrekt ist und Die Datei ja auch unmittelbar vor der if-Abfrage mit fi.open(...) geöffnet wird.

    Hat jemand vielleicht eine Idee, warum die Datei nicht geöffnet wird oder wo sonst das Problem sein könnte?

    Vielen Dank schonmal für eure bisherige Hilfe!



  • XPModder schrieb:

    Habe jetzt folgendes aus euren Antworten gemacht:

    TFile2 = CreateWindowA(...
    

    Dies ist im WM_Paint Teil der switch (message) Funktion ...

    Wir wollen doch hoffen das dies NICHT der WM_Paint-Teil ist.

    Eine mögliche Ursache für dein Problem wäre es ohnehin 😉



  • Warum sollte es nicht in dem WM_Paint Teil stehen? Im WM_Paint Teil steht alles das, was in das Fenster gezeichnet werden soll, also muss auch eine Textbox die im Fenster erscheinen soll im WM_Paint Teil definiert sein.

    Wenn es nicht im WM_Paint Teil steht dann wird die Textbox auch niemals gezeichnet werden.

    Könntest du deinen Kommentar bitte etwas deutlicher erklären. Ich sehe nämlich nicht wo ich die Textbox definieren soll, wenn nicht im WM_Paint Teil.
    Trotzdem Danke für die schnelle Antwort!


  • Mod

    XPModder schrieb:

    Warum sollte es nicht in dem WM_Paint Teil stehen? Im WM_Paint Teil steht alles das, was in das Fenster gezeichnet werden soll, also muss auch eine Textbox die im Fenster erscheinen soll im WM_Paint Teil definiert sein.

    Wenn es nicht im WM_Paint Teil steht dann wird die Textbox auch niemals gezeichnet werden.

    Totaler Unfug. Child windows sorgen für sich selbst und zeichnen sich auch selbst neu. Da muss man gar nichts im eigenen WM_PAINT bauen.



  • Ok. Verstanden.
    Aber inwiefern sollte das den Fehler verursachen den ich beschrieben habe?

    Habe jetzt auch mal die gesamte Funktion an eine andere Stelle im Code geschrieben und bekomme immer noch den selben Fehler.

    PS: Kennt vielleicht jemand eine Fuktion die alle Child-Windows entfernt, das Parent-Window aber beibehält?

    Danke für eure Hilfe!



  • Kompletter Code?



  • XPModder schrieb:

    Warum sollte es nicht in dem WM_Paint Teil stehen? Im WM_Paint Teil steht alles das, was in das Fenster gezeichnet werden soll, also muss auch eine Textbox die im Fenster erscheinen soll im WM_Paint Teil definiert sein.

    Wenn es nicht im WM_Paint Teil steht dann wird die Textbox auch niemals gezeichnet werden.

    Könntest du deinen Kommentar bitte etwas deutlicher erklären. Ich sehe nämlich nicht wo ich die Textbox definieren soll, wenn nicht im WM_Paint Teil.
    Trotzdem Danke für die schnelle Antwort!

    Wenn Du meine Lösung verwendet hättest bräuchten wir das nicht erörtern.

    Wenn du die Lösung von Swordfish genommen hättest auch nicht.

    Deine Lösung ist leider keine.

    Child-Fenster werden bei WM_CREATE erzeugt - und wie Martin bereits gesagt hat wissen sie auch selbst wie sie sich anzeigen.



  • merano schrieb:

    Wenn Du meine Lösung verwendet hättest bräuchten wir das nicht erörtern.

    Wenn du die Lösung von Swordfish genommen hättest auch nicht.

    Deine Lösung ist leider keine.

    Meine Lösung besteht aus Elementen von der ersten Lösung von Swordfish.
    Die nächste Lösung von Swordfish kann ich nicht verwenden, da VisualStudio 2015 den _tfopen Befehl zwar erkennt aber als unsicher bezeichnet und deshalb mit diesem Befehl im Code nicht kompiliert.

    Swordfish schrieb:

    #include <fstream>
    
    #include <tchar.h>
     
    // ...
     
    TCHAR filename[] = _T( "foo.bar" );
    std::istream is{ _tfopen( filename, _T( "r" ) };
    

    Und deine Lösung kann ich auch nicht verwenden, da Ich schon ein Fenster habe und ich dieses auch noch für andere Dinge verwende.
    Soweit ich weiß kann ich auch nicht mehrere WinMain-Funktionen in einer Datei haben.

    Vielleicht wird das ganze etwas klarer, wenn ich einfach mal alles was ich bisher an Code habe hier schreibe.

    #include<windows.h>
    #include<iostream>
    #include<stdlib.h>
    #include<string.h>
    #include<tchar.h>
    #include <fstream>
    #include <Shlwapi.h>
    #include <cstringt.h>
    
    #pragma comment (lib, "Shlwapi.lib")
    //#pragma warning(disable : 4996)
    using namespace std;
    
    LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
    
    HWND TBFile;
    HWND BOpenFile;
    HWND TPath;
    HWND TFile;
    HWND TFoundFile;
    HWND BFunction1;
    HWND BFunction2;
    HWND BFunction3;
    HWND BFunction4;
    HWND BFunction5;
    HWND BFunction6;
    HWND BBack;
    HWND TBFunction3;
    HWND TBFunction4;
    HWND TBFunction5;
    HWND TB1Function6;
    HWND TB2Function6;
    HWND TFunction3;
    HWND TFunction4;
    HWND TFunction5;
    HWND T1Function6;
    HWND T2Function6;
    HWND T3Function6;
    HWND TFile2;
    char file[256];
    int p = 0;
    
    int WINAPI WinMain(HINSTANCE hInstance,
    	HINSTANCE hPrevInstance,
    	LPSTR lpCmdLine,
    	int nCmdShow)
    {
    	static TCHAR szWindowClass[] = _T("Informatik Projekt");
    	static TCHAR szTitle[] = _T("Arbeiten mit Textdateien");
    
    	WNDCLASSEX wcex;
    
    	wcex.cbSize = sizeof(WNDCLASSEX);
    	wcex.style = CS_HREDRAW | CS_VREDRAW;
    	wcex.lpfnWndProc = WndProc;
    	wcex.cbClsExtra = 0;
    	wcex.cbWndExtra = 0;
    	wcex.hInstance = hInstance;
    	wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_APPLICATION));
    	wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
    	wcex.hbrBackground = (HBRUSH)COLOR_WINDOW;
    	wcex.lpszMenuName = NULL;
    	wcex.lpszClassName = szWindowClass;
    	wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_APPLICATION));
    
    	if (!RegisterClassEx(&wcex))
    	{
    		MessageBox(NULL,
    			_T("Call to RegisterClassEx failed!"),
    			_T("Arbeiten mit Textdateien"),
    			NULL);
    
    		return 1;
    	}
    
    	HINSTANCE hInst = hInstance;
    
    	HWND hWnd = CreateWindow(
    		szWindowClass,
    		szTitle,
    		WS_OVERLAPPEDWINDOW,
    		CW_USEDEFAULT, CW_USEDEFAULT,
    		550, 570,
    		NULL,
    		NULL,
    		hInstance,
    		NULL
    		);
    
    	if (!hWnd)
    	{
    		MessageBox(NULL,
    			_T("Call to CreateWindow failed!"),
    			_T("Arbeiten mit Textdateien"),
    			NULL);
    
    		return 1;
    	}
    
    	ShowWindow(hWnd,
    		nCmdShow);
    	UpdateWindow(hWnd);
    
    	MSG msg;
    	while (GetMessage(&msg, NULL, 0, 0))
    	{
    		TranslateMessage(&msg);
    		DispatchMessage(&msg);
    	}
    
    	return (int)msg.wParam;
    }
    
    LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
    	PAINTSTRUCT ps;
    	HDC hdc;
    
    	switch (message)
    	{
    	case WM_COMMAND:
    
    		GetWindowTextA(TBFile, &file[0], 256);
    
    		switch (LOWORD(wParam)) {
    
    		case 1:
    
    			if (!(GetWindowTextA(TBFile, &file[0], 256) == 0)) {
    
    				if (PathFileExistsA(file)) {
    
    					p = 1;
    					DestroyWindow(TPath);
    					DestroyWindow(TBFile);
    					DestroyWindow(BOpenFile);
    					UpdateWindow(hWnd);
    					UpdateWindow(TFile);
    
    				}
    				else {
    
    					MessageBox(hWnd, L"Ein Fehler ist aufgetreten! Bitte versuchen sie es erneut!", L"Error", MB_ICONERROR | MB_OK);
    
    				}
    
    			}
    			else {
    
    				MessageBox(hWnd, L"Ein Fehler ist aufgetreten! Bitte versuchen sie es erneut!", L"Error", MB_ICONERROR | MB_OK);
    
    			}
    
    			break;
    
    		case 2:
    
    			PostQuitMessage(0);
    			break;
    
    		case 8:
    
    			p = 0;
    			DestroyWindow(TFile);
    			DestroyWindow(TFoundFile);
    			DestroyWindow(BBack);
    			DestroyWindow(BFunction1);
    			DestroyWindow(BFunction2);
    			DestroyWindow(BFunction3);
    			DestroyWindow(BFunction4);
    			DestroyWindow(BFunction5);
    			DestroyWindow(BFunction6);
    			DestroyWindow(TFunction3);
    			DestroyWindow(TFunction4);
    			DestroyWindow(TFunction5);
    			DestroyWindow(T1Function6);
    			DestroyWindow(T2Function6);
    			DestroyWindow(T3Function6);
    			DestroyWindow(TBFunction3);
    			DestroyWindow(TBFunction4);
    			DestroyWindow(TBFunction5);
    			DestroyWindow(TB1Function6);
    			DestroyWindow(TB2Function6);
    			UpdateWindow(hWnd);
    
    			break;
    
    		case 3:
    
    			p = 2;
    			DestroyWindow(TFile);
    			DestroyWindow(TFoundFile);
    			DestroyWindow(BBack);
    			DestroyWindow(BFunction1);
    			DestroyWindow(BFunction2);
    			DestroyWindow(BFunction3);
    			DestroyWindow(BFunction4);
    			DestroyWindow(BFunction5);
    			DestroyWindow(BFunction6);
    			DestroyWindow(TFunction3);
    			DestroyWindow(TFunction4);
    			DestroyWindow(TFunction5);
    			DestroyWindow(T1Function6);
    			DestroyWindow(T2Function6);
    			DestroyWindow(T3Function6);
    			DestroyWindow(TBFunction3);
    			DestroyWindow(TBFunction4);
    			DestroyWindow(TBFunction5);
    			DestroyWindow(TB1Function6);
    			DestroyWindow(TB2Function6);
    
    			UpdateWindow(hWnd);
    
    			fstream fi;
    
    			fi.open(file, ios::in);
    
    			if (!fi.is_open()) {
    				MessageBox(hWnd, L"Error", L"Error", MB_ICONERROR | MB_OK);
    				return -1;
    			}
    
    			string str((istreambuf_iterator< decltype(fi)::char_type >(fi)),
    				istreambuf_iterator< decltype(fi)::char_type >());
    
    			SendMessage(TFile2, WM_SETTEXT, 0, reinterpret_cast< LPARAM >(str.c_str()));
    
    		}
    		break;
    
    	case WM_PAINT:
    
    		hdc = BeginPaint(hWnd, &ps);
    
    		if (p == 0) {
    
    			TPath = CreateWindow(
    				L"STATIC",
    				L"Dateipfad:",
    				WS_VISIBLE | WS_CHILD,
    				5,
    				15,
    				70,
    				20,
    				hWnd,
    				NULL,
    				NULL,
    				NULL);
    
    			TBFile = CreateWindow(
    				L"EDIT",
    				L"",
    				WS_VISIBLE | WS_THICKFRAME | WS_CHILD | WS_BORDER,
    				75,
    				5,
    				340,
    				10,
    				hWnd,
    				NULL,
    				NULL,
    				NULL);
    
    			BOpenFile = CreateWindow(
    				L"BUTTON",
    				L"Datei öffnen",
    				WS_TABSTOP | WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON,
    				420,
    				11,
    				100,
    				25,
    				hWnd,
    				(HMENU)1,
    				(HINSTANCE)GetWindowLong(hWnd, GWL_HINSTANCE),
    				NULL);
    
    		}
    		else if (p == 1) {
    
    			TFile = CreateWindowA(
    				"STATIC",
    				file,
    				WS_VISIBLE | WS_CHILD,
    				20,
    				10,
    				360,
    				20,
    				hWnd,
    				NULL,
    				NULL,
    				NULL);
    
    			TFoundFile = CreateWindow(
    				L"STATIC",
    				L"Datei gefunden!",
    				WS_VISIBLE | WS_CHILD,
    				400,
    				10,
    				150,
    				20,
    				hWnd,
    				NULL,
    				NULL,
    				NULL);
    
    			BFunction1 = CreateWindow(
    				L"BUTTON",
    				L"Beenden",
    				WS_TABSTOP | WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON,
    				10,
    				50,
    				250,
    				40,
    				hWnd,
    				(HMENU)2,
    				(HINSTANCE)GetWindowLong(hWnd, GWL_HINSTANCE),
    				NULL);
    
    			BBack = CreateWindow(
    				L"BUTTON",
    				L"Zurück",
    				WS_TABSTOP | WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON,
    				270,
    				50,
    				250,
    				40,
    				hWnd,
    				(HMENU)8,
    				(HINSTANCE)GetWindowLong(hWnd, GWL_HINSTANCE),
    				NULL);
    
    			BFunction2 = CreateWindow(
    				L"BUTTON",
    				L"Datei anzeigen",
    				WS_TABSTOP | WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON,
    				10,
    				110,
    				250,
    				40,
    				hWnd,
    				(HMENU)3,
    				(HINSTANCE)GetWindowLong(hWnd, GWL_HINSTANCE),
    				NULL);
    
    			BFunction3 = CreateWindow(
    				L"BUTTON",
    				L"Eine bestimmte Zeile anzeigen",
    				WS_TABSTOP | WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON,
    				10,
    				170,
    				250,
    				40,
    				hWnd,
    				(HMENU)4,
    				(HINSTANCE)GetWindowLong(hWnd, GWL_HINSTANCE),
    				NULL);
    
    			TFunction3 = CreateWindow(
    				L"STATIC",
    				L"Zeile:",
    				WS_VISIBLE | WS_CHILD,
    				270,
    				180,
    				40,
    				20,
    				hWnd,
    				NULL,
    				NULL,
    				NULL);
    
    			TBFunction3 = CreateWindow(
    				L"EDIT",
    				L"",
    				WS_VISIBLE | WS_THICKFRAME | WS_CHILD | WS_BORDER,
    				370,
    				170,
    				20,
    				20,
    				hWnd,
    				NULL,
    				NULL,
    				NULL);
    
    			BFunction4 = CreateWindow(
    				L"BUTTON",
    				L"Anzahl eines Zeichens anzeigen",
    				WS_TABSTOP | WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON,
    				10,
    				230,
    				250,
    				40,
    				hWnd,
    				(HMENU)5,
    				(HINSTANCE)GetWindowLong(hWnd, GWL_HINSTANCE),
    				NULL);
    
    			TFunction4 = CreateWindow(
    				L"STATIC",
    				L"Zeichen:",
    				WS_VISIBLE | WS_CHILD,
    				270,
    				240,
    				60,
    				20,
    				hWnd,
    				NULL,
    				NULL,
    				NULL);
    
    			TBFunction4 = CreateWindow(
    				L"EDIT",
    				L"",
    				WS_VISIBLE | WS_THICKFRAME | WS_CHILD | WS_BORDER,
    				370,
    				230,
    				20,
    				20,
    				hWnd,
    				NULL,
    				NULL,
    				NULL);
    
    			BFunction5 = CreateWindow(
    				L"BUTTON",
    				L"Anzahl der Zeichen anzeigen",
    				WS_TABSTOP | WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON,
    				10,
    				290,
    				250,
    				40,
    				hWnd,
    				(HMENU)6,
    				(HINSTANCE)GetWindowLong(hWnd, GWL_HINSTANCE),
    				NULL);
    
    			TFunction5 = CreateWindow(
    				L"STATIC",
    				L"Details? J/N",
    				WS_VISIBLE | WS_CHILD,
    				270,
    				300,
    				100,
    				20,
    				hWnd,
    				NULL,
    				NULL,
    				NULL);
    
    			TBFunction5 = CreateWindow(
    				L"EDIT",
    				L"",
    				WS_VISIBLE | WS_THICKFRAME | WS_CHILD | WS_BORDER,
    				370,
    				290,
    				20,
    				20,
    				hWnd,
    				NULL,
    				NULL,
    				NULL);
    
    			BFunction6 = CreateWindow(
    				L"BUTTON",
    				L"Datei kopieren",
    				WS_TABSTOP | WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON,
    				10,
    				350,
    				250,
    				40,
    				hWnd,
    				(HMENU)7,
    				(HINSTANCE)GetWindowLong(hWnd, GWL_HINSTANCE),
    				NULL);
    
    			T1Function6 = CreateWindow(
    				L"STATIC",
    				L"Zieldatei einstellen:",
    				WS_VISIBLE | WS_CHILD,
    				270,
    				360,
    				180,
    				20,
    				hWnd,
    				NULL,
    				NULL,
    				NULL);
    
    			T2Function6 = CreateWindow(
    				L"STATIC",
    				L"Zielordner:",
    				WS_VISIBLE | WS_CHILD,
    				10,
    				420,
    				100,
    				20,
    				hWnd,
    				NULL,
    				NULL,
    				NULL);
    
    			TB1Function6 = CreateWindow(
    				L"EDIT",
    				L"",
    				WS_VISIBLE | WS_THICKFRAME | WS_CHILD | WS_BORDER,
    				160,
    				410,
    				350,
    				20,
    				hWnd,
    				NULL,
    				NULL,
    				NULL);
    
    			T3Function6 = CreateWindow(
    				L"STATIC",
    				L"Name der Zieldatei:",
    				WS_VISIBLE | WS_CHILD,
    				10,
    				480,
    				140,
    				20,
    				hWnd,
    				NULL,
    				NULL,
    				NULL);
    
    			TB2Function6 = CreateWindow(
    				L"EDIT",
    				L"",
    				WS_VISIBLE | WS_THICKFRAME | WS_CHILD | WS_BORDER,
    				160,
    				470,
    				350,
    				20,
    				hWnd,
    				NULL,
    				NULL,
    				NULL);
    
    		}
    		else if (p == 2) {
    
    			TFile2 = CreateWindow(
    				L"EDIT",
    				L"",
    				WS_VISIBLE | WS_CHILD | ES_MULTILINE | ES_READONLY,
    				10,
    				10,
    				530,
    				550,
    				hWnd,
    				NULL,
    				NULL,
    				NULL);
    
    		}
    
    		EndPaint(hWnd, &ps);
    		break;
    
    	case WM_DESTROY:
    		PostQuitMessage(0);
    		break;
    	default:
    		return DefWindowProc(hWnd, message, wParam, lParam);
    		break;
    	}
    
    	return 0;
    }
    

    Wenn ihr noch Fragen zu dem Code habt werde ich diese gerne beantworten.

    Ich bedanke mich nochmal für eure Hilfe. 😋



  • Nee, ich bin sprachlos. Kommentier das nicht weiter, da du ja offensichtlich beratungsresistent bist.

    Zur Frage warum die Datei nicht geöffnet wird:

    ---------------
    Der Dateiname soll stehen in

    char file[256];

    Unsinnigerweise wird das jedes mal bei WM_COMMAND neu eingelesen

    GetWindowTextA(TBFile, &file[0], 256) == 0))

    kurz danach wird das Fenster gelöscht

    DestroyWindow(TBFile);

    und dann kommt WM_COMMAND ...

    Quizfrage: Was wird wohl in file stehen nachdem wieder auf
    das inzwischen gelöschte Fenster zugegriffen wird?



  • Hallo XPModder,

    warum programmierst du überhaupt direkt mit der WinAPI? Es gibt doch schon eine Reihe von anderen (einfacher zu programmierbaren) GUI-Libraries.

    Und hattest du denn mal ein komplettes WinAPI-Tutorial durchgearbeitet?
    Wie schon mehrfach geschrieben wurde, darf im WM_PAINT nur gezeichnet werden, aber sonst keine anderen Funktionalitäten (wenn das Fenster z.B. mehrfach minimiert/maximiert wird etc. dann wird WM-PAINT jedesmal aufgerufen und die Controls würden immer wieder neu erzeugt - aber die vorherigen nicht zerstört -> MemoryLeak!).
    Außerdem sollte man GUI und Logik eines Programms komplett trennen (deine bisherigen Funktionen sind viel zu groß -> erzeuge geeignete ausgelagerte Funktionen).


Log in to reply