frage zu edit control und fenster



  • Hi,

    schreib grad mein erstes Programm mit Verwendung eines kleinen Teils der WinApi^^...

    also bis jetzt hab ich n paar buttons die reagieren, und n hauptfenster...
    und ein edit control fenster... problem: man kann zwar reinklicken und der Cursor blinkt dann, aber reinschreiben kann man nix. !?!?

    dann müsste ich noch ein rahmenloses Fenster erstellen (wird dann Fullscreen -> per GDI soll dann ein begrüßungstext kommen (das mit gdi bekomm ich schon hin), der name soll dann aus dem edit control ausgelesen werden..... also genaue frage: wie macht man ein rahmenloses Fenster?

    danke schonmal^^

    raiden



  • ach, hier der code wie ich das edit fenster erstelle...

    hNameEdit = CreateWindow("EDIT", "Name eingeben: ", WS_CHILD |
    ES_LEFT | ES_AUTOVSCROLL, 60, 135, 290, 20,
    hMainWindow, (HMENU)5,
    (HINSTANCE)GetWindowLong(hMainWindow, GWL_HINSTANCE), NULL);

    sichtbar wirds dann gemacht wenn ein bestimmter radiobutton gechecked ist, funzt auch... nur reinschreiben geht nicht... der cursor bleibt an der selben stelle und es tut sich nix (naja blinken tut er halt...)



  • Zum Edit: ich würde vermuten, dass der Fehler in deiner WndProc sitzt (bzw. dort festhängst) - ohne Code aber schwer zu sagen 🙄

    Zum Fenster: WS_POPUP anstelle von WS_OVERLAPPED / WS_TILED bzw. WS_OVERLAPPEDWINDOW / WS_TILEDWINDOW



  • also in der WndProc mach ich gar nix ausser eben die buttons abfragen und wm_destroy ^^

    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)
    							{
    								ShowWindow(hNameEdit, SW_HIDE);
    							}
    							break;
    
    						case 4:
    							ShowWindow(hNameEdit, SW_SHOW);
    							break;
    					}
    				break;
    			}
    			break;
    
    		case WM_DESTROY:
    			PostQuitMessage(0);
    			return 0;
    
    		break;
    
    	}
    
    	return DefWindowProc(hWnd, Msg, wParam, lParam);
    
    }
    


  • Seltsam - bei mir funktioniert dein Code 🙄



  • oh - shit 😞

    hast du auch XP (SP1 hier)?

    ..menno ich vertu meine Zeit hier^^.. und bei dir gehts?!... aber bei mir halt nicht 😕



  • kannst du das mal im Ganzen testen?

    #include "stdafx.h"
    
    #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);
    
    HWND hMainWindow = 0;
    
    HWND hExitBTN = 0;
    
    HWND hStartBTN = 0;
    
    HWND hGR = 0;
    
    HWND hK1R = 0;
    
    HWND hK2R = 0;
    
    HWND hNameEdit = 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)GetWindowLong(hMainWindow, GWL_HINSTANCE), NULL);
    
    	hStartBTN = CreateWindow("BUTTON", "START", WS_VISIBLE | WS_CHILD| BS_PUSHBUTTON,
    							  140, 200, 120, 60,
    							  hMainWindow, (HMENU)1,
    							  (HINSTANCE)GetWindowLong(hMainWindow, GWL_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)GetWindowLong(hMainWindow, GWL_HINSTANCE), NULL);
    
    	hK1R = CreateWindow("BUTTON", "allgemein     (\"Herzlich willkommen\")",
    						 WS_VISIBLE | WS_CHILD | BS_AUTORADIOBUTTON,
    						 30, 45, 260, 20, hMainWindow, (HMENU)3,
    						 (HINSTANCE)GetWindowLong(hMainWindow, GWL_HINSTANCE), NULL);
    
    	hK2R = CreateWindow("BUTTON", "persönlich    (\"Wir begrüßen...\")",
    						 WS_VISIBLE | WS_CHILD | BS_AUTORADIOBUTTON,
    						 30, 90, 225, 20, hMainWindow, (HMENU)4,
    						 (HINSTANCE)GetWindowLong(hMainWindow, GWL_HINSTANCE), NULL);
    
    	hNameEdit = CreateWindow("EDIT", NULL, WS_CHILD |WS_BORDER| WS_DISABLED| WS_VISIBLE|
    							  ES_LEFT | ES_AUTOHSCROLL,
    							  60, 135, 290, 20, hMainWindow, (HMENU)5,
    							  (HINSTANCE)GetWindowLong(hMainWindow, GWL_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(hNameEdit, 0);
    							}
    							break;
    
    						case 4:
    							EnableWindow(hNameEdit, 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;
    	}
    
    	return 1;
    
    }
    


  • Hallö,

    wär echt froh, wenn sich jemand mal dieses bisschen Code ganz reinzieht und mir dann sagen kann warum man nix ins Edit Control schreiben kann per Tasta (wenn ich beim erstellen, also als name, einen text angebe, dann steht der im Edit Control... kann man aber nicht verändern)?!?! please help me 😕 😞

    btw, mittlerweile hab ich auch schon das Popupfenster, es hat ne eigene callback, mit esc kann man es destroyen, das programm bleibt aber offen.. und hWelcomeWindow wird auf 0 gesetzt.. so kann man es sicher nur einmal öffnen (weil vorher gecheckt wird obs 0 ist)... und auch wird geprüft ob die klasse schon gereggt ist^^ ...also das funzt schonmal 100 pro^^ ...aber ich brauch das edit control 😕



  • Hallo,

    DaRaiden schrieb:

    und mir dann sagen kann warum man nix ins Edit Control schreiben kann per Tastatur

    ich habe mir das nur mal kurz angesehen, und frage mich:

    was ist denn das für eine ungewöhnliche Nachrichten-Schleife, wenn man auch Tastatur-Eingaben auswerten will 🙂 ? :

    while(GetMessage(&Msg, NULL, 0, 0))
        {
            DispatchMessage(&Msg);
        }
    

    und das willst du doch, oder 😃 ? Was zu tun ist, kannst du auch nachlesen:

    MSDN schrieb:

    A thread's message loop must include TranslateMessage if the thread is to receive character input from the keyboard.

    Ohne diese wichtige Funktion könntest du dich tot tippen auf der Tastatur (und das wollen wir doch nicht 😃 ), und du würdest nicht ein Zeichen in deinem Edit Control sehen.

    Also sieht eine "Standard"-Message Loop so aus:

    while( GetMessage( &msg, NULL, 0, 0 ) )
    {
        TranslateMessage( &msg );
        DispatchMessage( &msg );
    }
    

    das war zumindest das Hauptproblem hier.

    MfG


Anmelden zum Antworten