Ciao ragazzi, ho questo problema a creare un semplice editor di testo di allenamento (senza l'uso delle editbox).

Allora posto solo il WM_CHAR, questo codice fa in modo che ogni tasto premuto venga aggiunto ad uno std::string sText.
Dopo di che chiama InvalidateRect,hwnd,NULL,FALSE).
Fin qui tutto bene.

Poi quando viene premuto backspace, se la stringa ha 0 caratteri, fa ritornare la procedura, poichè non si può eliminare un carattere da una string vuota!
Fin qui tutto bene.

Dopo di che con sText.assign(CSTR(sText),sText.size() - 1), viene eliminato l'ultimo carattere di sText.
Tutto bene anche qui

Ecco che i problemi sorgono:
se io chiamo InvalidateRect(hwnd,NULL,FALSE), non viene elimanata dalla finestra l'ultima lettera,
se chiamo InvalidateRect(hwnd,NULL,TRUE), dato che c'è il TRUE, viene pitturata la finestra del colore di background e poi viene disegnata la stringa senza l'ultima lettera, ma così NON va bene perchè si ottitene un effetto a lampeggio.

Sto cercando una funzione che invalida solo la zona che cambierebbe, non so come fare!

Codice:
codice:
case WM_CHAR:
         switch(wParam)
             {
             case '\b': //backspace
             if(sText.size() == 0)
                 return 0;
                 
             sText.assign(CSTR(sText),sText.size() - 1);
             InvalidateRect(hwnd,NULL,TRUE);
             UpdateWindow(hwnd);
             return 0;       
             }
         sText += (TCHAR)wParam;
         InvalidateRect(hwnd,NULL,FALSE);
         break;
Aiuto perfavore!