Veränderungen an Nachrichten-Parametern vor Aufruf der Basisklasse werden ignoriert



  • Hi!!

    Folgendes Problem:

    Ich habe ein RichEdit-Feld und möchte Klein- in Großbuchstaben umwandeln lassen.
    Das Umwandeln soll gleich nach Tastendruck der jeweiligen Taste erfolgen.
    Also wenn ich x drücke, möchte ich daraus ein X machen.

    Ich habs schon mit OnChar probiert:

    void CEditorView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
    {
    	// TODO: Fügen Sie hier Ihren Meldungsbehandlungscode ein, und/oder benutzen Sie den Standard.
    	if(nChar == 'x')
    		nChar = 'X';
    	CRichEditView::OnChar(nChar, nRepCnt, nFlags);
    }
    

    Haut so aber leider nicht hin.

    Habt ihr da irgendwelche Ideen oder Vorschläge?



  • Das ist etwas was in der MFC Implementierung absolut dämlich ist.
    Die Standardimplementierung ruft Default() auf, und die verwendet die alten Parameter.
    Wenn Du die Werte ändern möchtest musst Du DefWindowProc aufrufen:

    DefWindowProc(WM_CHAR,nChar,MAKELPARAM(nRepCnt,nFlags));
    

    PS: Gehört vielleicht auch in die FAQ, wenn nicht schon drinne.



  • Vielen Dank. Du hast mir echt einen Haufen Arbeit erspart!!!



  • Martin Richter schrieb:

    PS: Gehört vielleicht auch in die FAQ, wenn nicht schon drinne.

    Gern, sagst du mir noch eine sinnvolle Überschrift, unter der man es wiederfinden kann? 🙂



  • estartu schrieb:

    Martin Richter schrieb:

    PS: Gehört vielleicht auch in die FAQ, wenn nicht schon drinne.

    Gern, sagst du mir noch eine sinnvolle Überschrift, unter der man es wiederfinden kann? 🙂

    RichEdit: bei Eingabe: Klein- in Großbuchstaben Umwandeln 🙂



  • Ist es echt nur beim Richedit?
    Ich hatte den Verdacht, dass man das an mehr Stellen beachten sollte. 😕



  • estartu schrieb:

    Ist es echt nur beim Richedit?
    Ich hatte den Verdacht, dass man das an mehr Stellen beachten sollte. 😕

    Du hast vollkommen Recht estartu! Das gilt für alle Windows Nachrichten, die man verändert, d.h. mit anderen wParam/lParam Werten, an die Basisklasse weitergeben möchten.

    So etwas wie: "Ändern der Nachrichten Argumente vor Aufruf der Basisklasse"
    o.ä.


Anmelden zum Antworten