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 ^^