Textbox/feld erstellen



  • Hallo erstmal ^^

    Ich quäl mich hier die ganze Zeit damit ab ein Fenster zu erzeugen in dem ich schreiben kann... Also soweit ich weiß muss ich ein einfaches Fenster erzeugen und dann ein Editfeld. Ich hab das alles soweit gemacht aber ich kann da nicht rein schreiben und finde auch nirgends eine ordentlich Erklärung dazu.

    Kann mir das vllt jemand erklären? Vllt mit nem Code ausschnitt?!?

    Danke schonmal!



  • Nun ja, du musst in Zeile 34 das Semikolon setzen.



  • ouh.. Danke für den hilfreichen Beitrag -.-

    An alle andere:
    Ich hab noch so gut wie keine Ahnung von diesen ganzen Winapi sachen aber das hier ist was ich bis jetzt habe...

    #define WIN32_LEAN_AND_MEAN
    
    #include <windows.h>
    #include <stdio.h>
    #include <stdlib.h>
    
    LRESULT CALLBACK WndProc(HWND	hWnd,
    						 UINT	Msg,
    						 WPARAM	wParam,
    						 LPARAM	lParam);
    
    int WINAPI WinMain(HINSTANCE	hInstance,
    				   HINSTANCE	hPrevInstance,
    				   LPSTR		nCmdLine,
    				   int			nCmdShow)
    {
    	HWND		hWnd;
    	MSG			Msg;
    	WNDCLASSEX	wc;
    
    	wc.cbClsExtra		= 0;
    	wc.cbSize			= sizeof(WNDCLASSEX);
    	wc.cbWndExtra		= 0;
    	wc.hbrBackground	= (HBRUSH)GetStockObject(WHITE_BRUSH);
    	wc.hCursor			= LoadCursor(hInstance, IDC_ARROW);
    	wc.hIcon			= LoadIcon(NULL, IDI_APPLICATION);
    	wc.hIconSm			= LoadIcon(NULL, IDI_APPLICATION);
    	wc.hInstance		= hInstance;
    	wc.lpfnWndProc		= WndProc;
    	wc.lpszClassName	= L"WndClass";
    	wc.lpszMenuName		= NULL;
    	wc.style			= CS_HREDRAW | CS_VREDRAW;
    
    	if(!RegisterClassEx(&wc))
    		return 0;
    
    	hWnd	= CreateWindowEx(NULL,
    							 L"WndClass",
    							 L"WndName",
    							 WS_OVERLAPPEDWINDOW,
    							 400, 400,
    							 450, 350,
    							 NULL,
    							 NULL,
    							 hInstance,
    							 NULL);
    
    	ShowWindow(hWnd, nCmdShow);
    
    	while(TRUE)
    	{
    		while(PeekMessage(&Msg, NULL, 0, 0, PM_REMOVE))
    		{
    			TranslateMessage(&Msg);
    			DispatchMessage(&Msg);
    		}
    		if(Msg.message == WM_QUIT)
    			break;
    	}
    }
    
    LRESULT CALLBACK WndProc(HWND	hWnd,
    						 UINT	Msg,
    						 WPARAM	wParam,
    						 LPARAM	lParam)
    {
    	static	HWND	hEdit;
    
    	switch(Msg)
    	{
    	case WM_DESTROY:
    		{
    			PostQuitMessage(0);
    			return 0;
    		} break;
    	case WM_KEYDOWN:
    		{
    			switch(LOWORD(lParam))
    			{
    			case VK_ESCAPE:
    				{
    					PostQuitMessage(0);
    					return 0;
    				} break;
    			default:
    				break;
    			}
    		}
    	case WM_CREATE:
    		{
    			hEdit	= CreateWindowEx(WS_EX_CLIENTEDGE,
    									 L"edit",
    									 L"",
    									 WS_CHILD | WS_VISIBLE | WS_VSCROLL | ES_MULTILINE | ES_AUTOVSCROLL,
    									 0, 0, 
    									 CW_USEDEFAULT, CW_USEDEFAULT,
    									 hWnd,
    									 NULL,
    									 GetModuleHandle(NULL),
    									 NULL);
    
    			return 0;
    		}
    	case WM_SIZE:
    		{
    			MoveWindow(hEdit,
    					   0, 0,
    					   LOWORD(lParam),
    					   HIWORD(wParam),
    					   TRUE);
    			return 0;
    		}
    	default:
    		break;
    	}
    	return DefWindowProc(hWnd, Msg, wParam, lParam);
    }
    


  • Ich stelle fest, daß einige Deiner Switch-case-Statements nicht sauber mit break; abgeschlossen sind.

    Deshalb mein Vorschlag:
    Bitte alle case-Zweige sauber mit break; abschließen!
    Und dann sehen wir weiter.

    HTH,
    Martin



  • Jep das ist ein Argument!
    Hab ich gleich mal verbessert ändert aber ja soweit nichts an meinem Problem...



  • WildChild schrieb:

    ouh.. Danke für den hilfreichen Beitrag -.-

    Er hat genau das bewirkt, was er sollte: Du hast den Code gezeigt. Jetzt kann man dir helfen.

    WildChild schrieb:

    HIWORD(wParam),

    Da isser.



  • Ich mein ja nur ein einfaches "Zeig mal was du bis jetzt hast" hätte auch gereicht...

    Was ist denn damit? Also HIWORD(wParam)?

    EDIT: Danke habs schon gefunden ^^



  • Okay ich habe doch noch eine Frage.

    Der zweite Parameter von CreateWindowEx is ja lpClassName...
    Was kann man da alles eintragen? Ja ich weiß prinzipiell kann ich da rein schreiben was ich will aber es gibt ja ein Paar vordefinierte "Namen" wie z.B. edit wodurch man eine Editbox macht.

    Also was gibt es da noch?





  • Also tut mir Leid aber wenn ich z.B. WC_EDIT eingebe funktioniert das nicht...
    Mag sein das ich mal wieder was flasch gemacht hab, in dem Fall schreib bitte ein bisschen mehr als ein Link.

    EDIT: Es lässt sich kompilieren aber es bringt nichts.. also da ist keine Editbox entstanden.



  • Ich hoffe, du hast WC_EDIT nicht in Anführungszeichen gesetzt.



  • WildChild schrieb:

    Also tut mir Leid aber wenn ich z.B. WC_EDIT eingebe funktioniert das nicht...

    Nun, lese mal die Fußzeile (Signatur) Deines Vorposters MFK.

    Und bitte zeig hier zukünftig gleich Deinen Code mit, ohne daß wir Dich ständig dazu auffordern müssen. Sonst können wir Dir nicht helfen wo denn nun der Fehler steckt.

    Du brauchst doch Hilfe von uns, oder irre ich mich?
    Martin



  • Nein hab ich nicht.

    Ich dachte das kann man sich denken wie der Code nun aussieht ^^

    Aber hier ist er die CreateWindowEx nochmal ich denke das reicht oder?

    hEdit = CreateWindowEx(WS_EX_CLIENTEDGE,
                           WC_EDIT,
                           L"",
                           WS_CHILD | WS_VISIBLE | 
                           WS_VSCROLL | ES_MULTILINE | 
                           ES_AUTOVSCROLL,
                           10, 25,
                           350, 280,
                           hWin,
                           NULL,
                           GetModuleHandle(NULL),
                           NULL);
    


  • Was soll ich sagen, bei mir geht's. Zeig mal den vollständigen Code.



  • Also mit L"EDIT" funktionierts wunderbar...
    Hier der komplette Code:

    #define WIN32_LEAN_AND_MEAN
    
    #include <windows.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <CommCtrl.h>
    
    LRESULT CALLBACK WndProc(HWND	hWnd,
    						 UINT	Msg,
    						 WPARAM	wParam,
    						 LPARAM	lParam);
    
    int WINAPI WinMain(HINSTANCE	hInstance,
    				   HINSTANCE	hPrevInstance,
    				   LPSTR		nCmdLine,
    				   int			nCmdShow)
    {
    	HWND		hWnd;
    	MSG			Msg;
    	WNDCLASSEX	wc;
    
    	wc.cbClsExtra		= 0;
    	wc.cbSize			= sizeof(WNDCLASSEX);
    	wc.cbWndExtra		= 0;
    	wc.hbrBackground	= (HBRUSH)GetStockObject(WHITE_BRUSH);
    	wc.hCursor			= LoadCursor(hInstance, IDC_ARROW);
    	wc.hIcon			= LoadIcon(NULL, IDI_APPLICATION);
    	wc.hIconSm			= LoadIcon(NULL, IDI_APPLICATION);
    	wc.hInstance		= hInstance;
    	wc.lpfnWndProc		= WndProc;
    	wc.lpszClassName	= L"WndClass";
    	wc.lpszMenuName		= NULL;
    	wc.style			= CS_HREDRAW | CS_VREDRAW;
    
    	if(!RegisterClassEx(&wc))
    		return 0;
    
    	hWnd	= CreateWindowEx(NULL,
    							 L"WndClass",
    							 L"WndName",
    							 WS_OVERLAPPEDWINDOW,
    							 400, 400,
    							 450, 350,
    							 NULL,
    							 NULL,
    							 hInstance,
    							 NULL);
    
    	ShowWindow(hWnd, nCmdShow);
    
    	while(TRUE)
    	{
    		while(PeekMessage(&Msg, NULL, 0, 0, PM_REMOVE))
    		{
    			TranslateMessage(&Msg);
    			DispatchMessage(&Msg);
    		}
    		if(Msg.message == WM_QUIT)
    			break;
    	}
    }
    
    LRESULT CALLBACK WndProc(HWND	hWnd,
    						 UINT	Msg,
    						 WPARAM	wParam,
    						 LPARAM	lParam)
    {
    	static	HWND	hEdit;
    	static	HWND	hEdit2;
    	static	HWND	hWin;
    
    	switch(Msg)
    	{
    	case WM_DESTROY:
    		{
    			PostQuitMessage(0);
    			return 0;
    		} break;
    	case WM_KEYDOWN:
    		{
    			if(wParam == VK_ESCAPE)
    			{
    				PostQuitMessage(0);
    				return 0;
    			}
    		} break;
    	case WM_CREATE:
    		{
    			hEdit	= CreateWindowEx(WS_EX_CLIENTEDGE,
    									 WC_EDIT,
    									 L"",
    									 WS_CHILD | WS_VISIBLE | WS_VSCROLL | ES_MULTILINE | ES_AUTOVSCROLL,
    									 10, 25, 
    									 350, 280,
    									 hWin,
    									 NULL,
    									 GetModuleHandle(NULL),
    									 NULL);
    
    			return 0;
    		} break;
    	case WM_SIZE:
    		{
    			MoveWindow(hEdit,
    					   0, 0,
    					   LOWORD(lParam),
    					   HIWORD(lParam),
    					   TRUE);
    			return 0;
    		} break;
    	default:
    		break;
    	}
    	return DefWindowProc(hWnd, Msg, wParam, lParam);
    }
    


  • Wenn du hWin als Parent benutzt, kann das nicht klappen, weder mit L"EDIT" noch mit WC_EDIT.



  • Ah danke^^

    Ich wollte eigentlich eine Art Container machen dem ich die beiden Editfelder unterordnen kann deswegen das hWin .. Hab ich wohl vergessen wieder zu tauschen.


Anmelden zum Antworten