I am trying to create an animated-canvas% class that has two bitmaps that I swap for some simple animation.  I have the code working with a straight canvas% instance (with the bitmaps, and dcs in variables), but wanted to abstract it into a subclass.  The problem is that I haven't figured out how to override the get-dc (to return a dc for one of the bitmaps) and still call the superclass's get-dc to draw the bit map on the canvas.  Any other suggestions on the approach would also be welcome.
<br><br>(module animated-canvas mzscheme<br>&nbsp; <br>&nbsp; (require (lib &quot;class.ss&quot;))<br>&nbsp; (require (lib &quot;mred.ss&quot; &quot;mred&quot;))<br>&nbsp; (require (lib &quot;etc.ss&quot;))<br>&nbsp; <br>&nbsp; (provide (all-defined))
<br>&nbsp; <br>&nbsp; (define animated-canvas%<br>&nbsp;&nbsp;&nbsp; (class canvas%<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (inherit refresh)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (inherit get-client-size)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (inherit min-client-height)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (inherit min-client-width)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (super-instantiate ())
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (define bitmap-vector<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (let ((w (min-client-width))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (h (min-client-height)))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;(printf &quot;width = ~a, height = ~a~n&quot; w h)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (build-vector<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (lambda (i)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (make-object bitmap% w h)))))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (define from-bitmap 0)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (define to-bitmap 1)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (define from-bitmap-dc (make-object bitmap-dc%))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (define to-bitmap-dc (make-object bitmap-dc%))
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (define/public (swap-bitmaps)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;; Reset bitmap-dc instances.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (send from-bitmap-dc set-bitmap #f)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (send to-bitmap-dc set-bitmap #f)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;; Swap bitmaps.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (set! from-bitmap (modulo (+ from-bitmap 1) 2))
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (set! to-bitmap (modulo (+ to-bitmap 1) 2))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;; Set bitmap-dc instances.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (send from-bitmap-dc set-bitmap (vector-ref bitmap-vector from-bitmap))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (send to-bitmap-dc set-bitmap (vector-ref bitmap-vector to-bitmap))
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (refresh))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (rename (super-get-dc get-dc)) ; this doesn&#39;t work, for example<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (define/override (get-dc)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (printf &quot;animated-canvas% get-dc~n&quot;)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; to-bitmap-dc)
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (define/override (on-paint)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (let ((canvas-dc (super-get-dc))) ; here is where I want to call the get-dc method for the superclass<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (send canvas-dc draw-bitmap (vector-ref bitmap-vector from-bitmap) 0 0)))
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ))<br>&nbsp; <br>&nbsp; )<br><br>Doug<br><br>