[racket] A beginner's question re drawing on a canvas
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