The docs here might help elaborate on Matthias's answer:

  http://docs.racket-lang.org/gui/canvas___.html

I'll try adding more links to that information, including from the
`get-dc` method. Maybe it also would be better as its own section in
the overview chapter.

At Mon, 22 Jun 2015 18:07:04 -0400, Matthias Felleisen wrote:
> 
> [[ I am tempted to say that you misplaced the parentheses and brackets and 
> broke lines at the wrong place. ]]
> 
> Here is a re-ordering of the first "don't work" variant that kind of works: 
> 
> #lang racket
> 
> (require slideshow racket/class racket/gui/base)
> 
> (define my-frame
>   (new frame%
>        [label "my frame"]
>        [width 300] [height 300]
>        [alignment '(center center)]))
> 
> (define my-canvas (new canvas% [parent my-frame]))
> (define my-dc (send my-canvas get-dc))
> (send my-frame show #t) 
> (draw-pict (circle 60) my-dc 40 40) 
> (sleep 1)
> 
> Stop! This should give you a hint of why you need to have an callback 
> function 
> in this world. 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> In this world, many different events affect the visible canvas and it needs 
> to 
> refresh itself all the time. Omitting the callback says "draw nothing" when 
> you 
> refresh.
> 
> 
> 
> 
> On Jun 22, 2015, at 2:17 PM, Mianlai Zhou <[email protected]> wrote:
> 
> > Hi people,
> > 
> > I am wondering why this segment of code failed to work:
> > 
> > ; don't work
> > #lang racket
> > 
> > (require slideshow racket/class racket/gui/base)
> > 
> > (define my-frame (new frame% [label "my frame"]
> >                              [width 300] [height 300]
> >                              [alignment '(center center)] ))
> > 
> > (define my-canvas
> >       (new canvas% [parent my-frame]
> >           ))
> > 
> > (define my-dc (send my-canvas get-dc))
> > 
> > (draw-pict (circle 60) my-dc 40 40)                                         
> >   
> > 
> > (send my-frame show #t) 
> > 
> > While the following codes *do* work:
> > 
> > ; do work
> > #lang racket
> > 
> > (require slideshow racket/class racket/gui/base)
> > 
> > (define my-frame (new frame% [label "my frame"]
> >                              [width 300] [height 300]
> >                              [alignment '(center center)] ))
> > 
> > (define my-canvas
> >       (new canvas% [parent my-frame]
> >                    [paint-callback (lambda (self dc)
> >                                   (draw-pict (circle 60) dc 40 
> 40)                                                  
> >                                )] 
> >           ))
> > 
> > (send my-frame show #t) 
> > 
> > Is there anyway to avoid using redefining paint-callback to draw one or more
> > pictures on the canvas, as in the first example?
> > 
> > Thanks in advance for your answer,
> > 
> > Mianlai
> > 
> > 
> > -- 
> > You received this message because you are subscribed to the Google Groups 
> "Racket Users" group.
> > To unsubscribe from this group and stop receiving emails from it, send an 
> email to [email protected].
> > For more options, visit https://groups.google.com/d/optout.
> 
> -- 
> You received this message because you are subscribed to the Google Groups 
> "Racket Users" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email 
> to [email protected].
> For more options, visit https://groups.google.com/d/optout.

-- 
You received this message because you are subscribed to the Google Groups 
"Racket Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to