In my opinion, when you want to modify something in your view, you should call InvalidateRect or InvalidateRgn for all of changed areas, store the new data, and let the OnPaint or OnDraw handlers to draw the new image using the current data. This will also work when you, for example, minimise and restore the window, which requires repainting too.
You do not have to draw new characters explicitly. Try calling InvalidateRect two times: for un-highlighted and highlighted characters. Perform the drawing inside the OnDraw only using the supplied pDC.