Edit-Feld nicht editierbar - Dumme Frage



  • Hallo,
    ich benutze das VC++ 6 und programmiere unter Windows. Ich bin dabei, eine kleine Anwendung zu erstellen. Nun habe ich aber folgendes Problem bei einem Edit-Feld:
    Man kann nichts hineinschreiben. 😕 Es blinkt zwar die Schreibmarke, wenn ich hineinklicke, aber sonst passiert nichts.

    Das Feld habe ich folgendermaßen erstellt:

    static HWND hEdittext;
    
    hEdittext = CreateWindow("EDIT","test", WS_CHILD | WS_VISIBLE | ES_MULTILINE | ES_AUTOVSCROLL, 10, 10, 600, 420, hWindow, (HMENU)1, (HINSTANCE) GetWindowLong (hWindow, GWL_HINSTANCE), NULL);
    

    Das Feld soll innerhalb des Hauptfensters hWindow erstellt werden. Die CreateWindow() Funktion wird beim Erstellen des Hauptfensters aufgerufen (WM_CREATE). Ich hoffe, dass reicht an Infos. Vermutlich gibt es eine ganz simple Lösung, aber ich weiß nicht, was ich falsch mache. 😞
    Schonmal danke.

    Gruß,
    Sir Toby 🙂



  • Dein Fehler scheint an anderer Stelle zu liegen, denn bei mir kann man mit deinem Code ganz normal reinschreiben 😉



  • Danke für deine Antwort.
    Dann leigt es wohl tatsächlich nicht am Code zum erstellen. Hmm, aber woran könnte es denn dann liegen ?

    Gruß,
    Sir Toby 🙂



  • Ah, habs selber rausgefunden. Ich hatte wohl das HANDLE für das Edit-Feld falsch deklariert, es muss anscheindend direkt vor der CreateWindow() Anweisung stehen. 😃

    Gruß,
    Sir Toby 🙂



  • gehts bisl genauer? ich hab das problem auch. ich hab aber HWND hNameEdit = 0; global schon vor der winmain... dann in der winmain noch hNameEdit = CreateWindow...

    😕



  • Hmm, versuch mal die Deklaration vom Editfeldhandle direkt vor die CreateWindow() Anweisung zu schreiben.

    Gruß,
    Sir Toby 🙂



  • ist mir leider so nicht möglich, da ich es global benötige 😃 😞 mensch da muss doch irgndwo irgndn wurm sein^^ 😕



  • einfach code zeigen wenn er nicht zu kompliziert ist



  • hab ich hier schon getan, kompliziert isser nicht^^

    http://www.c-plusplus.net/forum/viewtopic.php?t=84658

    ...mittlerweile isses auch schon etwas mehr, aber jetzt bin ich soweit dass ich das funzend haben muss damit ich fortfahren kann^^

    aber hier mal das aktuelle

    #include <windows.h>
    
    HWND CreateMainWindow(HINSTANCE hInstance);
    
    bool Start(HINSTANCE hInstance);
    
    HWND CreateWelcomeWindow(HINSTANCE hInstance);
    
    LRESULT CALLBACK MainWindowCallBack(HWND hWnd, UINT Msg,
    									WPARAM wParam, LPARAM lParam);
    
    LRESULT CALLBACK WelcomeWindowCallBack(HWND hWnd, UINT Msg,
    									WPARAM wParam, LPARAM lParam);
    
    HWND hMainWindow = 0;
    
    HWND hWelcomeWindow = 0;
    
    HWND hExitBTN = 0;
    
    HWND hStartBTN = 0;
    
    HWND hGR = 0;
    
    HWND hK1R = 0;
    
    HWND hK2R = 0;
    
    HWND hName = 0;
    
    HWND hStatic1 = 0;
    
    HWND hSHeartly = 0;
    
    int APIENTRY WinMain(HINSTANCE hInstance,
                         HINSTANCE hPrevInstance,
                         LPSTR     lpCmdLine,
                         int       nCmdShow )
    {
    
    	MSG Msg;
    
    	if (!(hMainWindow = CreateMainWindow(hInstance)))
    	{
    		MessageBox(0, "MainWindow konnte nicht erstellt werden!", "Fehler", MB_OK);
    		return 0;
    	}
    
    	hExitBTN = CreateWindow("BUTTON", "Beenden", WS_VISIBLE | WS_CHILD| BS_PUSHBUTTON,
    							 305, 220, 75, 45,
    							 hMainWindow, (HMENU)0,
    							 hInstance, NULL);
    
    	hStartBTN = CreateWindow("BUTTON", "START", WS_VISIBLE | WS_CHILD| BS_PUSHBUTTON,
    							  140, 200, 120, 60,
    							  hMainWindow, (HMENU)1,
    							  hInstance, NULL);
    
    	hGR = CreateWindow("BUTTON", "Art der Begrüßung", WS_VISIBLE | WS_CHILD | BS_GROUPBOX | 
    						BS_RIGHT, 10, 10, 360, 180, hMainWindow, (HMENU)2,
    						hInstance, NULL);
    
    	hK1R = CreateWindow("BUTTON", "allgemein     (\"Herzlich willkommen\")",
    						 WS_VISIBLE | WS_CHILD | BS_AUTORADIOBUTTON,
    						 30, 45, 260, 20, hMainWindow, (HMENU)3,
    						 hInstance, NULL);
    
    	hK2R = CreateWindow("BUTTON", "persönlich    (\"Wir begrüßen...\")",
    						 WS_VISIBLE | WS_CHILD | BS_AUTORADIOBUTTON,
    						 30, 90, 225, 20, hMainWindow, (HMENU)4,
    						 hInstance, NULL);
    
    	hName = CreateWindow("EDIT", NULL, WS_CHILD |WS_BORDER|WS_DISABLED| WS_VISIBLE|
    							  ES_AUTOHSCROLL,
    							  65, 160, 290, 20, hMainWindow, (HMENU)5,
    							  hInstance, NULL);
    
    	hStatic1 = CreateWindow("STATIC", "Name eingeben:", WS_CHILD | WS_DISABLED| WS_VISIBLE|
    							  SS_LEFT,
    							  65, 130, 150, 20, hMainWindow, (HMENU)6,
    							  hInstance, NULL);
    
    	while(GetMessage(&Msg, NULL, 0, 0))
    	{
    		DispatchMessage(&Msg);
    	}
    	return 0;
    }
    
    LRESULT CALLBACK MainWindowCallBack(HWND hWnd, UINT Msg,
    									WPARAM wParam, LPARAM lParam)
    {
    	switch(Msg)
    	{
    		case WM_COMMAND:
    			switch(HIWORD(wParam))
    			{	case BN_CLICKED:
    
    					switch(LOWORD(wParam))
    					{	case 0:
    							PostQuitMessage(0);
    							return 0;
    							break;
    
    						case 1:
    							Start((HINSTANCE)GetWindowLong(hMainWindow, GWL_HINSTANCE));
    							break;
    
    						case 3:
    							if (SendMessage(hK2R, BM_GETSTATE, 0, 0) == BST_UNCHECKED)
    							{
    								EnableWindow(hName, 0);
    								EnableWindow(hStatic1, 0);
    							}
    							break;
    
    						case 4:
    							EnableWindow(hName, 1);
    							EnableWindow(hStatic1, 1);
    							break;
    					}
    				break;
    			}
    			break;
    
    		case WM_DESTROY:
    			PostQuitMessage(0);
    			return 0;
    
    		break;
    
    	}
    
    	return DefWindowProc(hWnd, Msg, wParam, lParam);
    
    }
    
    HWND CreateMainWindow(HINSTANCE hInstance)
    {
    
    	WNDCLASSEX wndClass;
    
    	wndClass.cbSize = sizeof(WNDCLASSEX);
    	wndClass.style = CS_OWNDC | CS_HREDRAW | CS_VREDRAW;
    
    	wndClass.lpfnWndProc = MainWindowCallBack;
    
    	wndClass.cbClsExtra = 0;
    	wndClass.cbWndExtra = 0;
    	wndClass.hInstance = hInstance;
    
    	wndClass.hbrBackground = (HBRUSH)COLOR_BACKGROUND;
    
    	wndClass.hCursor = LoadCursor(NULL, IDC_ARROW);
    
    	wndClass.lpszMenuName = NULL;
    
    	wndClass.lpszClassName = "MainWindowClass";
    
    	wndClass.hIcon = LoadIcon(NULL, IDI_WINLOGO);
    
    	wndClass.hIconSm = LoadIcon(NULL, IDI_WINLOGO);
    
    	if (!RegisterClassEx(&wndClass))
    	{
    		MessageBox(0, "Die MainWindowClass konnte nicht registriert werden!",
    			       "Fehler", MB_OK | MB_ICONEXCLAMATION);
    		return 0;
    	}
    
    	return CreateWindowEx(
    							NULL,
    							"MainWindowClass",
    							"Welcomeproggie",
    							WS_VISIBLE | WS_CAPTION,
    
    							((1024/2)-200),
    							((768/2)-150),
    							400,
    							300,
    							NULL,
    							NULL,
    							hInstance,
    							NULL);
    } //HWND CreateMainWindow
    
    bool Start(HINSTANCE hInstance)
    {
    	if( (SendMessage(hK1R, BM_GETSTATE, 0, 0) == BST_UNCHECKED)
    		&& (SendMessage(hK2R, BM_GETSTATE, 0, 0) == BST_UNCHECKED))
    	{
    		MessageBox(hMainWindow, "Sie haben keine Begrüßungsart ausgewählt!\n\nBitte wählen sie eine Art der Begrüßung aus.\n\n",
    			"Fehler", MB_OK | MB_ICONEXCLAMATION);
    		return 0;
    	}
    
    	HANDLE hHeartly = 0;
    
    	if (!(hHeartly=LoadImage(NULL, "gfx\\herzlich.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE)))
    	{
    		MessageBox(hWelcomeWindow, "Datei \"herzlich.bmp\" konnte\nnicht geladen werden!", 
    			       "Fehler", MB_OK | MB_ICONEXCLAMATION);
    		return 0;
    	}
    
    	MessageBox(hMainWindow, "\nDas folgende Fenster kann mit der Taste \"ESC\"\n             wieder geschlossen werden!\n\n", "Info", MB_OK | MB_ICONINFORMATION);
    
    	if (!hWelcomeWindow)
    	{
    	hWelcomeWindow = CreateWelcomeWindow(hInstance);
    	}
    
    	if (hSHeartly == 0)
    	{
    		hSHeartly = CreateWindow("STATIC", NULL, WS_VISIBLE | SS_BITMAP | SS_CENTERIMAGE
    								  | WS_CHILD, 47, 223, 931, 321, hWelcomeWindow, (HMENU)7,
    								  hInstance, NULL);
    	}
    
    	SendMessage(hSHeartly, STM_SETIMAGE, (WPARAM) IMAGE_BITMAP, (LPARAM) (HANDLE) hHeartly);
    	if (!DeleteObject(hHeartly))
    	{MessageBox(hWelcomeWindow, "Object hHeartly konnte nicht gelöscht werden!", "Fehler",
    				MB_OK | MB_ICONEXCLAMATION);
    	}
    
    	ShowCursor(0);
    	return 1;
    
    }
    
    HWND CreateWelcomeWindow(HINSTANCE hInstance)
    {
    
    	WNDCLASSEX wndClass;
    	WNDCLASSEX tstClass;
    
    	wndClass.cbSize = sizeof(WNDCLASSEX);
    	wndClass.style = CS_OWNDC;
    
    	wndClass.lpfnWndProc = WelcomeWindowCallBack;
    
    	wndClass.cbClsExtra = 0;
    	wndClass.cbWndExtra = 0;
    	wndClass.hInstance = hInstance;
    
    	wndClass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
    
    	wndClass.hCursor = NULL;
    
    	wndClass.lpszMenuName = NULL;
    
    	wndClass.lpszClassName = "WelcomeWindowClass";
    
    	wndClass.hIcon = NULL;
    
    	wndClass.hIconSm = NULL;
    
    	if (!GetClassInfoEx(hInstance, "WelcomeWindowClass", &tstClass))
    	{
    
    	if (!RegisterClassEx(&wndClass))
    	{
    		MessageBox(0, "Die WelcomeWindowClass konnte nicht registriert werden!",
    			       "Fehler", MB_OK | MB_ICONEXCLAMATION);
    		return 0;
    	}
    	}
    
    	return CreateWindowEx(
    							NULL,
    							"WelcomeWindowClass",
    							"WelcomeScreen",
    							WS_VISIBLE | WS_POPUP,
    
    							0,
    							0,
    							1024,
    							768,
    							NULL,
    							NULL,
    							hInstance,
    							NULL);
    } //HWND CreateWelcomeWindow
    
    LRESULT CALLBACK WelcomeWindowCallBack(HWND hWnd, UINT Msg,
    									WPARAM wParam, LPARAM lParam)
    {
    	switch(Msg)
    	{
    
    		case WM_KEYDOWN:
    			if(VK_ESCAPE == wParam)
    				DestroyWindow(hWelcomeWindow);
    			break;
    
    		case WM_DESTROY:
    			hWelcomeWindow = 0;
    			hSHeartly = 0;
    			ShowCursor(1);
    			return 0;
    
    		break;
    
    	}
    
    	return DefWindowProc(hWnd, Msg, wParam, lParam);
    
    }
    

    😃



  • Hey, da kann ich helfen.

    Erstmal nimm das WS_DISABLED weg. Ist ja klar das man da nichts eingeben kann.

    Und dann füge TranslateMessage in die Nachrichtenschleife ein.

    Dann gehts.



  • Moinsn, es wird ja enabled wenn man den Radiobutton für persönliche begrüßung anschaltet, also das WS_DISABLED bleibt so^^

    aber am fehlendem TranslateMessage hats gelegen, big thx... wofür braucht man das noch so?

    mfg

    raiden





  • ahjo, auch danke^^ ... programm is gerade fertig geworden 🙂

    nach diesem WinApi bastelexkurs (ist sehr mühselig sich dass so fast ohne kenntnisse zusammen zu stöpseln^^) bin ich schon süchtig^^... werd mir also den petzold zulegen ^^


Anmelden zum Antworten