Does this help? #lang racket/gui
(define frame (new frame% [label "Example"] [width 300] [height 300])) (define top-canvas (new (class canvas% (inherit get-dc) (super-new [parent frame]) (define/override (on-paint) (define dc (get-dc)) (send dc draw-rectangle 0 10 ; Top-left at (0, 10), 10 pixels down from top-left 30 10) ; 30 pixels wide and 10 pixels high (send dc draw-line 0 0 ; Start at (0, 0), the top-left corner 30 30) ; and draw to (30, 30), the bottom-right corner (send dc draw-line 0 30 ; Start at (0, 30), the bottom-left corner 30 0) ; and draw to (30, 0), the top-right corner )))) (send frame show #t) On Oct 1, 2014, at 9:51 PM, Chris Wright wrote: > I would like to draw on a canvas in a window at various times during program > execution. > My first attempt was to combine two examples: > > #lang racket/gui > > (define frame (new frame% > [label "Example"] > [width 300] > [height 300])) > (define top-canvas (new canvas% [parent frame])) > > (send frame show #t) > > (define dc (send top-canvas get-dc)) > > (send dc draw-rectangle > 0 10 ; Top-left at (0, 10), 10 pixels down from top-left > 30 10) ; 30 pixels wide and 10 pixels high > (send dc draw-line > 0 0 ; Start at (0, 0), the top-left corner > 30 30) ; and draw to (30, 30), the bottom-right corner > (send dc draw-line > 0 30 ; Start at (0, 30), the bottom-left corner > 30 0) ; and draw to (30, 0), the top-right corner > > > > The cross and box are drawn, but "instantly" over-written by a blank canvas. > I suppose this is because on-paint is triggered? (not sure by what..) > If I put the (send frame...) form at the end of the code, the cross and box > aren't seen. > > I am sure this is due to me not understanding the model properly - I'd be > grateful for some help... > > many thanks > > Chris > ____________________ > Racket Users list: > http://lists.racket-lang.org/users ____________________ Racket Users list: http://lists.racket-lang.org/users