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:
Aiuto perfavore!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;


Rispondi quotando