EDIT-Box Text Linksbündig, Rechtsbündig und Zentriert ausrichten



  • Hi Community!
    Ich habe mir jetzt ein einfach Fenster erstellt mit
    einem Button, paar Labeln, und eine Edit-Box.
    Bin relativ neu in der GUI-Programmierung, und bin
    froh das ich das einmal geschafft habe.
    Meine hab schon eine About-box usw.

    Allerdings möchte ich es schaffen das ich meine Textbox per Knopfdruck
    auf Linksbündig setzen kann, oder Rechtsbündig mit einem anderen knopf.
    Beim Start des Programms wird der Text Zentriert ausgerichtet.

    Aber wie kann ich per Knopfdruck auf die formatierung der Textbox zugreifen,
    und sie Linksbündig stellen? Und das vllt. ohne das der vorhandene
    Text gelöscht wird?

    hTextbox01 = CreateWindow ("EDIT",
                                   "",
                                   WS_VISIBLE | WS_CHILD | WS_BORDER | ES_CENTER,   
                                   5,5,
                                   775, 510,
                                   hWnd,
                                   (HMENU)ID_TEXTBOX01,
                                   hInst,
                                   NULL);
    

    So sieht meine Textbox im Moment aus 🙂
    Und ich will einfach das sich ES_CENTER bei knopfdruck in ES_LEFT oder ES_RIGHT
    ändert. Wie kann ich das machen?

    In meinem Buch hört es nach ein paar Grundlagen der GUI-Programmierung auf,
    und ich möchte hier noch etwas weiter machen 😃

    Vielen Dank!



  • Die Antwort lautet: SetWindowLong(). Im Netz gibt es reichlich Anwendungsbeispiele dazu.

    Aus diesem Forum ein paar rausgegriffen:
    http://www.c-plusplus.net/forum/290272?highlight=setwindowlong
    http://www.c-plusplus.net/forum/269253?highlight=setwindowlong

    also probiert mal mit:
    SetWindowLong(hwnd, GWL_STYLE, GetWindowLong(hwnd, GWL_STYLE) |~ ES_LEFT)

    Rewind.



  • Danke Rewind!
    Schaut gut aus.
    Nur hab ich jetzt das Problem das hTextbox01 in der Callback Funktion
    nciht verfügbar ist, und irgendwie kann ich im parameter nicht zwei Handles übergeben?

    EDIT: Hab das Handle jetzt global definiert!
    Jetzt kann ich zwar zugreifen auf die Textbox,
    aber das programm schmiert nach drücken des knopfes ab :p

    CALLBACL FUNKTION 🙂

    LRESULT CALLBACK WindowProc (HWND hWnd,UINT message,
    							 WPARAM wParam, LPARAM lParam)
    {
    	// Messages auswerten
    	switch (message)
    	{
    		// Fenster schließen? (Auch Alt-F4)
    		case WM_DESTROY:
    		{
    			// Nachricht zum Beenden schicken
    			PostQuitMessage (0);
    			return (0);
    
    		}
    
    		case WM_COMMAND:
    		{
                switch(wParam)
                {
                    case ID_BUTTON01:
                    {
                     PostQuitMessage (0);
                     return 0;
                    }
    
                    case ID_BUTTON02:
                    {
                     SetWindowLong(hTextbox01, GWL_STYLE, GetWindowLong(hTextbox01, GWL_STYLE) | ES_LEFT);
                     return 0;
                    }
                }
    		}
    
    		// Wurde eine Taste gedrückt?
    		case WM_KEYDOWN:
    		{
    			// Ja, also je nach Taste verzweigen
    			switch (wParam)
    			{
    				// Wurde "Escape" gedrückt?
    				case VK_ESCAPE:
    				{
    					// Ja, also Nachricht zum Beenden schicken
    					PostQuitMessage (0);
    					return (0);
    
    				}
    			}
    		} break;
    	}
    
    	// Die Nachricht wurde nicht von uns verarbeitet, also
    	// von Windows verarbeiten lassen.
    
    	return (DefWindowProc (hWnd, message, wParam, lParam) );
    
    } // WindowProc
    

    EDIT:
    Hat sich gelöst!
    Danke für die Hilfe!
    🙂


Anmelden zum Antworten