CreateWindowEx > EN_CHANGE > SendMessage(...,WM_GETTEXT,...)



  • Folgendes interessantes Phaenomen:

    Ich erstelle mir ein Eingabefeld (EDIT) mit CreateWindowEx, bei dem ich als 3. Parameter einen Text als Default vorgebe. Desweiteren fange ich das Eingeben von Text im besagten Editfeld mit der Message EN_CHANGE ab. Tritt dieser Fall ein, lese ich den bisherigen Text mit SendMessage(...WM_GETTEXT...) aus, um ihn zu analysieren. Kompilieren funkst und auch die Arbeitesweisse des Codes. Allerdings nur unter Windows 7. Gleiches Programm unter Windows Vista fuehrt zur beruehmten Windowsfehlermeldung. Ich habe rausgefunden, dass bei CreateWindowEx und dem fuellen des vordefinierten Textes das EN_CHANGE - Ereignis ausgeloest wird. Dort schlaegt dann SendMessage fehl. Wohl, weil das Fenster noch garnet fertig mit erstellen ist.
    Ich könnte ne grosses IF irgendwo rumsetzen und pruefen, ob das Edit-Feld da ist. Hat jemand ne andere Idee?

    //EDIT:
    Gerade viel mir auf, dass auch bei Windows 7 der Fehler kommt, allerdings nur, wenn ich den Debugger laufen lasse 😃


  • Mod

    Wo kracht es und wie behandelst Du EN_CHANGE?
    Evtl. ist das Windows Handle, dass Du verwendest noch NULL...
    Du kannst auch GetDlgItemText verwenden statt WM_GETTEXT.



  • case EN_CHANGE:
    {
    	bool bAllowed = true;
    	int tmp;
    
    	// Das If wurde von mir eben noch eingefuegt, um den Fehler abzufangen
    	// in der getText()-Funktion befindet sich der SendMessage Befehl
    	// So wuerde es im Moment funktionieren.
    	if(g_oMain->oGameOptions.oEdtHindernis->getHandle() != NULL)
    	{
    		tmp = strToX<int>(g_oMain->oGameOptions.oEdtHindernis->getText());
    		if(tmp < 0 || tmp > 250)
    			bAllowed = false;
    		}
    	}
    } break;
    

  • Mod

    1. Bekommst Du mit der WM_COMMAND Nachricht auch das Handle selbst. Du benötist nicht den Zugriff aufdie globale Varoable.
    Ich vermute, das während CreateWindow ausgeführt ist bereits die WM_COMMAND Nachricht ausgeführt wird. In diesem Moment ist das Handle aber noch 0!

    Der Debugger kann Dir mehr sagen 😉



  • Danke fuer den Tipp mit dem COMMAND ... allerdings hab ich (leider nicht gepostet) mehrere Edit-Felder, die ich zur gleichen Zeit ueberpruefe.

    Ich hab mich nun dazu entschieden, dass ganze Problem zu umgehen. Ich pruefe jetzt nicht waehrend der Eingabe, sondern wenn ich den Button dann zum Uebernehmen klicke.

    😃 der Weg fuehrt mich derzeit schneller nach Rom


Anmelden zum Antworten