Robby: Thank you for the feedback.
Overall the approach of drawing simultaneously onto the canvas dc and the backing bitmap, and then when I need to erase a part of the canvas just copying it over from the backing bitmap works. The speed improvement is lovely: at least a factor of 20 or so, and everything I need for my application. Two interesting problems that I ran into are: 1) The bitmap draw routines do not erase the rectangle they draw into. I don't know why. I ended up erasing the rectangle "by hand" with draw-rectangle with a transparent pen. (I tried 'solid and 'opaque styles. My backing bitmap and canvas are all default for things like monochrome? and alpha.) 2) The draw-rectangle draws a little too big of a rectangle, presumably because of the outline it is drawing with the transparent pen. I had to make the draw-bitmap draw just a couple of extra pixels to make the erase work. The invalidate approach I've seen in other graphics frameworks does this work for you: you issue an "invalidate" for a rectangle, and the paint routine is called with the dimensions of that rectangle, and a guarantee that the background is already erased. I guess the above is doing that "by hand", which is okay. Thanks, John _________________________________________________ For list-related administrative tasks: http://lists.racket-lang.org/listinfo/users