Begrenzte Editbox / Edit Control



  • Hallo ich will eine Editbox in ihren Grenzen für die Zeicheneingabe begrenzen (soll mal variabel durch den User eingestellt werden, z.b. 80 Zeichen x40 Zeilen, wobei 80x20 dargestellt sollen begrenzt werden können auf 20x20)
    Wie kann ich das anstellen ?
    Ich dachte daran die Zeichen mit zu zählen und dann immer ein "Enter" einzufügen

    Leider bekommt meine Messageproc gar keine Tasten nicht. Wie löse ist mein Problem/ meine Probleme ???

    int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPTSTR lpCmdLine,int nCmdShow)
    {
    	UNREFERENCED_PARAMETER(hPrevInstance);
    	UNREFERENCED_PARAMETER(lpCmdLine);
    
    	MSG msg;
    	HACCEL hAccelTable;
    
    	// Globale Zeichenfolgen initialisieren
    	LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
    	LoadString(hInstance, DLC_MAINMenu, szWindowClass, MAX_LOADSTRING);
    	MyRegisterClass(hInstance);
    
    	// Anwendungsinitialisierung ausführen:
    	if (!InitInstance (hInstance, nCmdShow))
    	{
    		return FALSE;
    	}
    
    	hAccelTable = LoadAccelerators(hInstance,MAKEINTRESOURCE(DLC_MAINMenu));
    
    	// Hauptnachrichtenschleife:
    	while (GetMessage(&msg, NULL, 0, 0))
    	{
    
    		if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
    		{
    			TranslateMessage(&msg);
    			DispatchMessage(&msg);
    		}
    	}
    	return (int) msg.wParam;
    }
    
    LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
    	int wmId, wmEvent;
    	PAINTSTRUCT ps;
    	HDC hdc;
    
    	switch (message)
    	{
    	case WM_COMMAND:
    		wmId    = LOWORD(wParam);
    		wmEvent = HIWORD(wParam);
    		// Menüauswahl bearbeiten:
    		switch (wmId)
    		{
    		case IDM_MAINMenuOPEN:
    	        control->Command(hWnd, LOWORD(wParam), HIWORD (wParam));
    			return TRUE;
    			break;
    		case IDM_MAINMenu\1:
    		  	 DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
    			 break;
    		case IDM_MAINMenuEXIT:
    			 DestroyWindow(hWnd);
    			 break;
    		default:
    			return DefWindowProc(hWnd, message, wParam, lParam);
    		}
    		break;
    	case WM_PAINT:
    		hdc = BeginPaint(hWnd, &ps);
    		// TODO: Hier den Zeichnungscode hinzufügen.
    		EndPaint(hWnd, &ps);
    		break;
    	case WM_DESTROY:
    		PostQuitMessage(0);
    		break;
    	default:
    		return DefWindowProc(hWnd, message, wParam, lParam);
    	}
    	return 0;
    }
    
    // Meldungshandler für Main-Dialog für das Haupeingabefenster
    BOOL CALLBACK MainDialog (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
    
        switch (message)
        {
    
        case WM_INITDIALOG:
            try
            {
                control = new Controller (hwnd,hInst);
    			int cTabs = 1;
    			int lpnTabs[1]={80};
    			SendDlgItemMessage(hwnd, IDC_LIST, LB_SETTABSTOPS, (WPARAM)cTabs, (LPARAM)lpnTabs);
            }
            catch (WinException e)
            {
    				MessageBox (0, e.GetMessage (),"Exception", MB_ICONEXCLAMATION | MB_OK);
            }
            catch (...)
            {
    			MessageBox (0,"Unknown","Exception", MB_ICONEXCLAMATION | MB_OK);
                return -1;
            }
            return TRUE;
        case WM_COMMAND:
            control->Command(hwnd, LOWORD(wParam), HIWORD (wParam));
            return TRUE;
        case WM_DESTROY:
            PostQuitMessage(0);
            return TRUE;
        case WM_CLOSE:
            delete control;
            DestroyWindow (hwnd);
            return TRUE;
        }
        return FALSE;
    }
    

    (alt+c)



  • Wenn in einem Editfeld Zeichen eingefügt werden, erhält der Eventhandler des Dialogs die Nachricht "WM_COMMAND" mit "HIWORD(wParam) = EN_CHANGE" und "LOWORD(wParam) = identifier of edit control". An dieser Stelle kannst du dann entsprechende Aktionen durdchführen.



  • Weiß ich dann auch welche taste gerade gedrückt wurde?


Anmelden zum Antworten