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!