2

canvas%Racket では、独自の on-event メソッドを使用して独自のカスタム クラスを作成する方法を知っています。

(define my-canvas%
  (class canvas%
    (define/override (on-event event)
      (cond ...));; handle the event
    (super-new)))

(send canvas get-dc)より多くの描画メソッドを持つように、返される描画コンテキストに同様の変更を加えたいと思います。カスタム クラスを作成すると、 で呼び出されたときに通常の代わりにそれを返すmy-dc%方法を見つける必要があります 。これは可能ですか?my-canvas%dc%get-dc

より具体的には、my-dc%次のようになります(ここで、定義済みdraw-circleは組み込みを使用することになっていますdraw-arc):

(define my-dc%
  (class dc%
    (define (draw-circle x y radius)
      (draw-arc (- x radius) ; left
                (- y radius) ; top
                (* 2 radius) ; width
                (* 2 radius) ; height
                0            ; start-angle
                (* 2 pi)))   ; end-angle
    (super-new)))

(send dc draw-circle 100 100 20)他のすべての描画方法と同様に、後で円を描くだけで済むようにします。

4

2 に答える 2

1

dc<%>いいえ、ドキュメンテーションとソース コードの両方を見て、キャンバスが使用するクラスを変更することはできないと思います。

draw-circle代わりに関数を作成する必要があります。

(define (draw-circle dc x y radius)
  (send dc draw-arc ....))
于 2013-02-23T00:10:49.327 に答える