2

DrRacket 5.3.4 を使用しています

フレームf、キャンバスcあり

そして、スクロールバーをキャンバスに設定しました。

画像の座標を取得したい(メインウィンドウではなく、フレームの左上相対座標)

画像の x と y を取得するにはどうすればよいですか?

つまり、スクロールバーが移動したので、x と y が 90、90 から 290、290 の画像の領域が表示されます。

この時点で、マウスをウィンドウの左上隅に移動します。0,0 を取得します。

しかし、私は90,90を取得したいです。

これどうやってするの?

ありがとう!

#lang racket/gui 
(require racket/draw)
(define f
  (new frame% 
       [label "hey"]
       [width 200]
       [height 200]))
(define img (read-bitmap "some_image.png"))
(define img-w (send img get-width))
(define img-h (send img get-height))

(define (pcb c dc)
  (send dc draw-bitmap img 0 0))
(define my_c%
  (class canvas%
    (define/override (on-event e)

     (printf "x: ~a y: ~a \n" (send e get-x) (send e get-y)))

    (super-new)))
(define c (new my_c%
       [parent f]
       [style (list 'hscroll 'vscroll)]
       [paint-callback pcb]))

(send c init-auto-scrollbars img-w img-h 0 0)       

(send f show #t)
4

1 に答える 1

0

このような:

(define my_c%
  (class canvas%
    (define/override (on-event e)
      (let-values (((x y) (send this get-view-start)))
        (printf "x: ~a y: ~a \n" (+ x (send e get-x)) (+ y (send e get-y)))))
    (super-new)))

get-view-start (複数の戻り値) プロパティには、スクロールバーの x および y オフセットが含まれます。それを現在の x 位置と y 位置に追加すると、画像上の位置が得られます。ただし、画像の実際のサイズよりも大きい数値が得られる可能性があるため、 img-w および img-w の値に対して確認する必要があります。

于 2013-06-19T14:09:38.803 に答える