Eigene Nachricht Erstellen und Handler dazu Schreiben



  • Hi,

    Ich habe eine EditControl. Die OnChar() habe ich folgendermassen ueberschrieben:

    char c = 0;
    	CString Buff;
    	unsigned long X;
    
    	WriteFile(hcom, &nChar, 1, &X, NULL);
    

    d.h. Anstatt ein Zeichen in der EdiBox auszugeben, wird dieses an die Serielle Schnittstelle gesendet.

    Nun moechte ich aber an einer anderen Stelle im Code die von der Schnittstelle gelesenen Zeichen in der EditBox ausgeben.

    Dazu benutze ich einfach

    CEdit::SendMessage(WM_CHAR, c);

    wobei c der von der Comm Schnittstelle eingelesene char ist.
    Mit dieser Message wird nun aber die von mir ueberschriebene Funktion aufgerufen. Hier moechte ich aber nun die gewoehliche OnChar Funktion aufrufen.

    Dazu waere es guenstig, ich koennte eine eigene Nachricht WM_CUSTUM definieren und dazu eine Routine Schreiben, die aufgerufen wird.

    Wie kann ich das machen?

    Vielen Dank fuer eure Hilfe



  • Ansich ist das möglich, weiss ich jetzt leider nicht auswendig. Muss ich mal nachher in mein Buch schauen.
    Aber, wenn ich dich richtig verstehe, hast du ein Edit Control.
    Sobald du dorth hinein "tippst" wird das Zeichen per COM - Schnittstelle weggeschickt.
    Und später möchtest du, dass dann in demselben Edit Control ein Zeichen erscheinen soll, welches du per Schnittstelle erhalten hast.
    Ist denn das Zeichen, welches du selber eintippst, zuerst sichtbar?
    Und warum nutzt du nicht einfach die Memberfunktion SetWindowText() dafür?
    Oder verstehe ich noch irgendwas falsch? 😉



  • Genau das hatte ich Versucht (SetWindowText), doch dann passiert, daß der Bildschirm flakkert, weil ich jedes einzelnes Zeichen neu updaten will. Zudem geht der Cursor immer an den Anfang der Editbox, nicht da, wo der Text aufhört.
    Wenn die Edit Box zu voll wird, muß ich Außerdem immer die CEdit::ScrollDown funktion aufrufen, damit man sieht, welches Zeichen als letztes Ausgegeben wurde.

    Das Problem habe ich jetzt folgendermaßen gelöst:

    CEdit::SendMessage(WM_CHAR, c);
    

    wenn ein Zeichen auf der seriellen Schnittstelle Ankommt.

    Meine Funktion OnChar sieht dann so aus:

    void CExpertEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) 
    {
    	unsigned long X;
    
    	if (nFlags) { //nFlags != 0 wenn von Tastatur kommend, mit SendMessage
                          //ist mFlags == 0
    		WriteFile(hcom, &nChar, 1, &X, NULL);
    		return;
    	}
    
    	CEdit::OnChar(nChar, nRepCnt, nFlags);
    }
    

    So gehts. 😉
    Also Ein Zeichen von der Seriellen Schnittstelle kommend wird im Editierfeld angezeigt, ein Zeichen von der Tastatur wird an die Serielle Schnittstelle gesendet.


Anmelden zum Antworten