Problem bei dem Verarbeiten von Tastendrücken



  • Hallo Leute,

    ich schreibe momentan an einem eigenen Texteditor, der momentan weder den Text den man eingibt irgendwo speichert noch anderweitig besonders weit ist. Bin halt noch neu im Gebiet.

    Dabei gibt es seit neuem ein Problem bei der Verarbeitung der Tasten [Esc] und [Tab] . Bevor ich tab verwendete lief escape noch superprima, doch seit ich auch tab eine Funktion zugewiesen habe, funktioniert escape nicht mehr. Die beiden Tasten kommen sich nicht in die Quere, denn Escape wird über WM_KEYDOWN; tab über WM_CHAR verarbeitet. Folgendes tun die beiden tasten:

    [Esc]

    SendMessage ( hWnd , WM_DESTROY , NULL , NULL );
    break;
    

    [Tab]

    wsprintf ( &szMuellBuffer , L"%i , %i" , xBuffer , yBuffer );
    MessageBox ( NULL , &szMuellBuffer , L"" , NULL );
    
    break;
    

    eigentlich ist es unerheblich wozu die tasten dienen, denn sie greifen weder auf gleiche Ressourcen bzw. Variablen zu, noch verwenden sie sich gegenseitig. Sie sind komplett voneinander unabhängige Funktionen. Sobald jedoch tab gedrückt wurde (die taste funktioniert prima 🙂 ) passiert bei escape folgendes:
    die WM_DESTROY nachricht wird abgesendet und ausgeführt (dort wird noch einmal sicherheitshalber abgefragt ob auch wirklich beendet werden soll) egal was man nun anklickt (ja/nein) bleibt das programm offen. Auf das rote kreuz geklickt , verschwindet das Fenster, die Abfrage steht noch im raum und der Debugger läuft weiter, ohne dass das Fenster zu sehen ist.

    Vielen Dank, wenn jemand Rat weiss.





  • Ok,

    hab grade mal das SendMessage auf DestroyWindow(..) umgestellt aber das macht das problem nicht wet.

    Ich habe aber eine neue Spur, anscheinend habe ich etwas mit Speicherreservierung falsch gemacht. Der Debugger sagte mir etwas von _BLOCK_TYPE_IS_VALID fehler. Im netz stehen dazu Lösungsansätze die immer auf dem Heap reservierten Speicher in irgendeiner Form falsch reserviert hatten. Das ist bei mir gut möglich ich reserviere nämlich zu Beginn ein Dynamisches Multidimensionales array und lösche es zum schluss wieder. Was das aber mit der Tab taste zu tun hat, habe ich keine ahnung.

    hier das erstellen und entfernen des dynamischen mehrdimensionalen arrays. damit sollte aber alles stimmen:

    //anfang der Window Prozedur:
    static TCHAR** aBuffer;
    /*..*/
    //in WM_CREATE:
    xBuffer = cxClient / cxChar;
    yBuffer = cyClient / cyChar;
    
    aBuffer = new TCHAR*[xBuffer];
    
    for (int i = 0  ; i < xBuffer ; i++ )
    {
    	aBuffer[i] = new TCHAR [yBuffer];
    }
    
    /*..*/
    //in WM_DESTROY:
    for (int j = 0; j < xBuffer ; j++)
    {
    	delete [] aBuffer[j];
    }
    delete [] aBuffer;
    

    auf tab werden ja xBuffer und yBuffer ausgegeben, das könnte einen zusammenhang haben.


Anmelden zum Antworten