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 回答